[ofw] [IPoIB_NDIS6_CM] [Patch 3/3] Improper IPoIB behavior during simultaneous sends on both sides
Fab Tillier
ftillier at microsoft.com
Tue Nov 9 10:29:38 PST 2010
Alex Naslednikov wrote on Tue, 9 Nov 2010 at 09:24:26
> Signed-off by: Alexander Naslednikov (xalex at mellanox.co.il)
>
> Index: ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp
> =================================================================== ---
> ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp (revision 2984) +++
> ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp (working copy) @@ -1112,8
> +1112,13 @@
> qp_create.sq_depth = p_port->p_adapter->params.sq_depth;
>
> #define UD_QP_USED_SGE 3
What the heck is UD_QP_USED_SGE? How about a comment?
> - qp_create.sq_sge = MAX_SEND_SGE < p_port->p_ca_attrs->max_sges ?
> - MAX_SEND_SGE : ( p_port->p_ca_attrs->max_sges -
> UD_QP_USED_SGE );
> + if ( MAX_SEND_SGE < p_port->p_ca_attrs->max_sges )
I find this notation very hard to read: "CONSTANT <operator> variable". I *much* prefer variable <operator> CONSTANT. The argument that it prevents errors is weak, at best, since compilers will generate warnings for assignment within conditionals. When looking at this code, I have to think "if p_port->p_ca_attrs->max_sges > MAX_SEND_SGE" to be able to reason the code flow.
> + {
> + p_port->p_ca_attrs->max_sges = MAX_SEND_SGE;
> + }
> + p_port->p_ca_attrs->max_sges -= UD_QP_USED_SGE;
> + qp_create.sq_sge = p_port->p_ca_attrs->max_sges;
> +
> if ( !p_port->p_ca_attrs->ipoib_csum )
> {
> /* checksum is not supported by device
> @@ -3799,7 +3804,7 @@
> }
>
> /* Remember that one of the DS entries is reserved for the IPoIB
> header. */
> - if( num_pages >= MAX_SEND_SGE )
> + if( num_pages >= p_port->p_ca_attrs->max_sges )
> {
> IPOIB_PRINT(TRACE_LEVEL_INFORMATION, IPOIB_DBG_SEND,
> ("Too many buffers to fit in WR ds_array. Copying
> data.\n") );
> @@ -4270,13 +4275,13 @@
> Copy only N+1-MAX_SEND_SGE, where N is a lenght of SG List
> Remember that one of the DS entries is reserved for the IPoIB header.
> */
> - if( ( p_sgl->NumberOfElements >= MAX_SEND_SGE ||
> + if( ( p_sgl->NumberOfElements >= s_buf->p_port->p_ca_attrs-
> max_sges ||
> p_sgl->Elements[0].Length < sizeof(eth_hdr_t)) )
> {
> IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_SEND,
> ("Too many buffers %d to fit in WR ds_array[%d] \
> Or buffer[0] length %d < Eth header. Copying
> data.\n",
> - p_sgl->NumberOfElements, MAX_SEND_SGE, p_sgl-
> Elements[0].Length ) );
> + p_sgl->NumberOfElements,
> s_buf->p_port->p_ca_attrs->max_sges , p_sgl->Elements[0].Length ) );
No space before comma. The line is also too long.
>
> if( !s_buf->p_port->p_adapter->params.cm_enabled )
> {
More information about the ofw
mailing list