<br><tt><font size=2>general-bounces@lists.openfabrics.org wrote on 29.07.2008
18:32:27:<br>
<br>
> [image removed] </font></tt>
<br><tt><font size=2>> <br>
> Re: [ofa-general] Non-Signaled RDMA Read (cxgb3)</font></tt>
<br><tt><font size=2>> <br>
> Steve Wise </font></tt>
<br><tt><font size=2>> <br>
> to:</font></tt>
<br><tt><font size=2>> <br>
> Roland Dreier</font></tt>
<br><tt><font size=2>> <br>
> 29.07.2008 18:32</font></tt>
<br><tt><font size=2>> <br>
> Sent by:</font></tt>
<br><tt><font size=2>> <br>
> general-bounces@lists.openfabrics.org</font></tt>
<br><tt><font size=2>> <br>
> Cc:</font></tt>
<br><tt><font size=2>> <br>
> Philip Frey1, general</font></tt>
<br><tt><font size=2>> <br>
> Steve Wise wrote:<br>
> > Roland Dreier wrote:<br>
> >>  > I am trying to post a non-signaled RDMA Read WR.
Somehow OFED 1.3 <br>
> >> running  > on a T3 Chelsio Adapter seems<br>
> >>  > not to care what I set for 'enum ibv_send_flags'
in my 'struct  > <br>
> >> ibv_send_wr'. I always get a work completion with status<br>
> >>  > set to IBV_WC_SUCCESS and opcode IBV_WC_RDMA_READ.
When creating <br>
> >> the  > 'struct ibv_qp' I have set<br>
> >>  > 'sq_sig_all = 0' in 'struct ibv_qp_init_attr'.
With RDMA Write and <br>
> >> Send I  > do not get a WC when I set the 'ibv_send_flags'<br>
> >>  > to 0.<br>
> >>  >  > What am I missing here?<br>
> >><br>
> >> Looks like you're hitting this -- the cxgb3 driver has:<br>
> >><br>
> >>                 case
IB_WR_RDMA_READ:<br>
> >>                  
      t3_wr_opcode = T3_WR_READ;<br>
> >>                  
      t3_wr_flags = 0; /* T3 reads are always <br>
> >> signaled */<br>
> >><br>
> >> so I guess the HW can't do unsignaled RDMA reads.<br>
> >><br>
> >>  - R.<br>
> >>   <br>
> > Right.  This is a T3 hw limitation.  It will be fixed
in the next chip.<br>
> ><br>
> > Steve.<br>
> ><br>
> ><br>
> Note that I _could_ add code in the driver/lib poll routine to "eat"
<br>
> these cqes.  But there is a fundamental problem in that if the
CQ is <br>
> armed, then the HW _will_ generate an interrupt in this case.  This
<br>
> leads to a "false notification" which breaks the semantics
of the <br>
> notification mechanism.  I'm not sure how bad that is?  To
the <br>
> application, it would receive a notification, then go poll and get
nothing.<br>
> <br>
> Steve.<br>
</font></tt>
<br><tt><font size=2>I do not think this will help. When I do a send, I
am expecting a completion with</font></tt>
<br><tt><font size=2>the matching work request ID and I do not want to
add extra code into the upper layer</font></tt>
<br><tt><font size=2>app to get rid of those false notifications (pitfall).</font></tt>
<br>
<br><tt><font size=2>Speaking about this notification mechanism: What is
the intended way of using that?</font></tt>
<br><tt><font size=2>Say I expect a number of inbound sends. What disturbs
me is that only the first of them</font></tt>
<br><tt><font size=2>generates an event. I cannot just do an ibv_get_cq_event()
after having gotten the first one.</font></tt>
<br><tt><font size=2>It might happen that already several inbound sends
have arrived so I need to poll the CQ</font></tt>
<br><tt><font size=2>for all of them. Only when the polling fails I go
to sleep waiting for an event. From a</font></tt>
<br><tt><font size=2>user perspective it would be way more convenient to
just call ibv_get_cq_event() several times.</font></tt>
<br><tt><font size=2>Another disturbing thing is the fact that the events
have to be acknowledged - why bother the user</font></tt>
<br><tt><font size=2>with that?<br>
</font></tt>
<br><tt><font size=2>If I may, I would like to suggest another thing: Is
there no possibility that non-signaled WRs</font></tt>
<br><tt><font size=2>do not create a WC at all? Clearing the SQ with a
signaled WR to prevent an overflow is rather</font></tt>
<br><tt><font size=2>cumbersome as the user has to keep track of the number
of unsignaled WRs posted as well as the</font></tt>
<br><tt><font size=2>size of the SQ. Things like that add a lot of pitfalls
to upper layer applications.</font></tt>
<br>
<br><tt><font size=2>Thanks,</font></tt>
<br><tt><font size=2> Philip</font></tt>