]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma
[karo-tx-linux.git] / drivers / infiniband / hw / ocrdma / ocrdma_verbs.c
index 9dcb66077d6cbf9cd37bdaaa594414aadee4c96f..5bb61eb58f2c71859969d73ac6e326d4dafc51fd 100644 (file)
@@ -61,10 +61,14 @@ int ocrdma_query_gid(struct ib_device *ibdev, u8 port,
        return 0;
 }
 
-int ocrdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr)
+int ocrdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr,
+                       struct ib_udata *uhw)
 {
        struct ocrdma_dev *dev = get_ocrdma_dev(ibdev);
 
+       if (uhw->inlen || uhw->outlen)
+               return -EINVAL;
+
        memset(attr, 0, sizeof *attr);
        memcpy(&attr->fw_ver, &dev->attr.fw_ver[0],
               min(sizeof(dev->attr.fw_ver), sizeof(attr->fw_ver)));
@@ -375,7 +379,12 @@ static struct ocrdma_pd *_ocrdma_alloc_pd(struct ocrdma_dev *dev,
 
        if (dev->pd_mgr->pd_prealloc_valid) {
                status = ocrdma_get_pd_num(dev, pd);
-               return (status == 0) ? pd : ERR_PTR(status);
+               if (status == 0) {
+                       return pd;
+               } else {
+                       kfree(pd);
+                       return ERR_PTR(status);
+               }
        }
 
 retry:
@@ -679,7 +688,6 @@ err:
                ocrdma_release_ucontext_pd(uctx);
        } else {
                status = _ocrdma_dealloc_pd(dev, pd);
-               kfree(pd);
        }
 exit:
        return ERR_PTR(status);
@@ -1000,10 +1008,12 @@ err:
        return status;
 }
 
-struct ib_cq *ocrdma_create_cq(struct ib_device *ibdev, int entries, int vector,
+struct ib_cq *ocrdma_create_cq(struct ib_device *ibdev,
+                              const struct ib_cq_init_attr *attr,
                               struct ib_ucontext *ib_ctx,
                               struct ib_udata *udata)
 {
+       int entries = attr->cqe;
        struct ocrdma_cq *cq;
        struct ocrdma_dev *dev = get_ocrdma_dev(ibdev);
        struct ocrdma_ucontext *uctx = NULL;
@@ -1011,6 +1021,9 @@ struct ib_cq *ocrdma_create_cq(struct ib_device *ibdev, int entries, int vector,
        int status;
        struct ocrdma_create_cq_ureq ureq;
 
+       if (attr->flags)
+               return ERR_PTR(-EINVAL);
+
        if (udata) {
                if (ib_copy_from_udata(&ureq, udata, sizeof(ureq)))
                        return ERR_PTR(-EFAULT);