[ofw] How to block waiting for a CQE?

Diego Guella diego.guella at sircomtech.com
Mon Feb 23 02:24:16 PST 2009


I have used the pseudo-code below in a real application, and don't see any problem or high processor usage, even with realtime 
priority.


Thanks,
Diego



----- Original Message ----- 
From: "Diego Guella"
>
> ----- Original Message ----- 
>>From: "Tzachi Dar"
>>Ib rearm CQ will fire if there is an event after the last polled cqe.
>>That is, if there is a new cqe it will fire, even if it happens between
>>the poll
>>And the arm.
>>As a result, the code will work, and you don't have to wait for the
>>second event.
>
> Oh. This is what I was missing.
> I am using Mellanox hw now, so I shouldn't have problems.
>
>
>>[All said is true for Mellanox HW. I don't know what happens for other
>>hw vendors.]
> In ib_al.h:
> /****f* Access Layer/ib_rearm_cq
> * NAME
> * ib_rearm_cq
> *
> * DESCRIPTION
> * This indicates that the completion queue should notify the client when
> * the next completion is added.
> *
> * SYNOPSIS
> */
>
> ...
>
> * NOTES
> * This routine instructs the channel interface to invoke the completion
> * handler when the next completion queue entry is added to this CQ.
>
> (In fact, this is the behavior of ibv_req_notify_cq/ibv_get_cq_event on Linux).
> So if some other vendor implemented ib_rearm_cq using the strict behavior in ib_al.h, I will run into the problem I outlined.
> Same thing if Mellanox changes the behavior to conform to what is written in ib_al.h.
>
> Please look at the modified pseudocode below:
> -----
> // Initialization
> ib_status = ib_rearm_cq( ctx->scq, FALSE );
>
> // Loop
> while (1) {
> cl_status = cl_waitobj_wait_on( ctx->cq_waitobj, EVENT_NO_TIMEOUT, TRUE );
> ib_status = ib_rearm_cq( ctx->scq, FALSE );    // ib_rearm_cq moved before poll loop
>
> do {
>  ib_status = ib_poll_cq(ctx->scq, &p_wc_free, &p_wc_done);
>  if (ib_status == IB_SUCCESS)
>   handle_stuff();
> } while (ib_status == IB_SUCCESS );
>
> }
> -----
>
> This has the drawback that on Mellanox hw I will double the number of outer loops, but at least I have a spec-compliant behavior 
> from my side.
> What do you think about it? Do you see some problems in it?
>
>
> Thanks,
> Diego
>
>
> _______________________________________________
> ofw mailing list
> ofw at lists.openfabrics.org
> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
>
> 




More information about the ofw mailing list