[ofa-general] IBV_WC_LOC_PROT_ERROR in receive

Dotan Barak dotanb at dev.mellanox.co.il
Mon Sep 17 22:17:34 PDT 2007


Hi.

Bharath Ramesh wrote:
> I am getting this error when I am trying to do a bunch of send/receives.
> I have registered the receive buffer. I printed the address of the
> buffers and their respective lkeys, they all match but I am still
> getting this error.
>
> The code snippet looks as follows:
>
> struct ibv_mr *mr;
> struct ibv_sge sge;
> struct ibv_recv_wr wr;
> struct ibv_recv_wr *wr_bad;
>
> // registering buffers
> mr = ibv_reg_mr (ib_pd, buf, size, IBV_ACCESS_LOCAL_WRITE |
>                         IBV_ACCESS_REMOTE_READ |
> 			IBV_ACCESS_REMOTE_WRITE);
>
>
> //Post the receive buffer
> sge.addr = (uintptr_t) buf;
> sge.length = size;
> sge.lkey = mr->lkey;
> wr.wr_id = WR_ID;
> wr.next = NULL;
> wr.sg_list = &sge;
> wr.num_sge = 1;
> if (ibv_post_recv (ib_qp, &wr, &wr_bad) != 0) {
>   printf ("ERROR: Unable to post receiver buffer.\n");
>   return -1;
> }
>
> When I poll for the completion event I get this error. Any help on this
> is appreciated. I am not subscribed to this list, I would appreciate if
> you please cc me on the reply.
>   


If the address that you given in the RR is valid (you didn't deregister 
this MR):
You should check the following things:
* If this is a UD QP, maybe the extra 40 bytes (for the GRH) is missing 
in the recv buffer.
* Maybe the incoming message is larger than the receive buffer
* maybe the PD of the QP and the MR are not the same


If this didn't help you, the value of the vendor_err in the completion 
structure may help me....

Dotan



More information about the general mailing list