I applied this, but I'm wondering if this:

 > +int ipath_resize_cq(struct ibv_cq *ibcq, int cqe)
 >  {
 > +    struct ipath_cq                *cq = to_icq(ibcq);
 > +    struct ibv_resize_cq            cmd;
 > +    struct ipath_resize_cq_resp     resp;
 > +    size_t                          size;
 > +    int                             ret;
 > +
 > +    pthread_spin_lock(&cq->lock);
 > +    /* Save the old size so we can unmmap the queue. */
 > +    size = sizeof(struct ipath_cq_wc) +
 > +            (sizeof(struct ipath_wc) * cq->ibv_cq.cqe);
 > +    ret = ibv_cmd_resize_cq(ibcq, cqe, &cmd, sizeof cmd,
 > +                            &resp.ibv_resp, sizeof resp);
 > +    if (ret) {
 > +            pthread_spin_unlock(&cq->lock);
 > +            return ret;
 > +    }
 > +    (void) munmap(cq->queue, size);
 > +    size = sizeof(struct ipath_cq_wc) +
 > +            (sizeof(struct ipath_wc) * cq->ibv_cq.cqe);
 > +    cq->queue = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
 > +                     ibcq->context->cmd_fd, resp.offset);
 > +    ret = errno;
 > +    pthread_spin_unlock(&cq->lock);
 > +    if ((void *) cq->queue == MAP_FAILED)
 > +            return ret;
 > +    return 0;
 > +}

works against an old kernel driver.  It seems you do have this:

 > +    if (dev->abi_version == 1) {
 > +            context->ibv_ctx.ops.poll_cq       = ibv_cmd_poll_cq;
 > +            context->ibv_ctx.ops.post_srq_recv = ibv_cmd_post_srq_recv;
 > +            context->ibv_ctx.ops.post_recv     = ibv_cmd_post_recv;
 > +    }

so I guess you're just ignoring the failure of mmap() or something?

 - R.

_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to