[ofw] [IPOIB_NDIS6_CM] enhance wc linking loop performance by removing	array index calculations
    Smith, Stan 
    stan.smith at intel.com
       
    Mon Aug  9 12:53:01 PDT 2010
    
    
  
Hefty, Sean wrote:
>>> --- A/ulp/ipoib_NDIS6_CM/kernel/ipoib_endpoint.cpp      Wed Aug 04
>>> 10:30:43 2010 +++ B/ulp/ipoib_NDIS6_CM/kernel/ipoib_endpoint.cpp
>>> Wed Aug 04 10:28:59 2010 @@ -888,9 +888,10 @@
>>>                 p_port->p_adapter->p_ifc->modify_qp( p_endpt-
>>>> conn.h_send_qp, &mod_attr );
>>>                 p_port->p_adapter->p_ifc->modify_qp( p_endpt-
>>>> conn.h_recv_qp, &mod_attr );
>>>
>>> -               for( i = 0; i < MAX_RECV_WC; i++ )
>>> -                       wc[i].p_next = &wc[i + 1];
>>> -               wc[MAX_RECV_WC - 1].p_next = NULL;
>>> +       for( p_free_wc=wc; p_free_wc < &wc[MAX_RECV_WC];
>>> p_free_wc++ ) +               p_free_wc->p_next = p_free_wc + 1;
>>> +
>>> +       (--p_free_wc)->p_next = NULL;
>
> Personally, I don't like the use of (--p_free_wc) here.  This results
> in updating (extra memory write) p_free_wc outside of the loop, plus
> a second write to wc[MAX_RECV_WC - 1].p_next, because the first write
> was incorrect.  I realize that the original code had this update as
> well, but can't we just end the loop one iteration earlier?
>
> - Sean
Yes '(--p_free_wc)->p_next = NULL;' should have been '(p_free_wc - 1)->p_next = NULL;' to skip the extra memory write.
Although (if this is what you had in mind)
        for( p_free_wc=wc; p_free_wc < &wc[MAX_RECV_WC - 1]; p_free_wc++ )
              p_free_wc->p_next = p_free_wc + 1;
       p_free_wc->p_next = NULL;
is more efficient; (could not see the forest for the trees issue) thanks.
    
    
More information about the ofw
mailing list