]> git.openfabrics.org - ~emulex/for-vlad/compat-rdma.git/commitdiff
RDMA/ocrdma: ocrdma sync up patch series master
authorSelvin Xavier <selvin.xavier@broadcom.com>
Wed, 24 Feb 2016 12:51:16 +0000 (18:21 +0530)
committerSelvin Xavier <selvin.xavier@broadcom.com>
Wed, 24 Feb 2016 12:51:16 +0000 (18:21 +0530)
Updating the ocrdma driver with the bug fixes from upstream

Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
linux-next-pending/0025-RDMA-ocrdma-Fix-memory-leak-in-_ocrdma_alloc_pd.patch [new file with mode: 0644]
linux-next-pending/0026-RDMA-ocrdma-fix-double-free-on-pd.patch [new file with mode: 0644]
linux-next-pending/0027-IB-core-Destroy-ocrdma_dev_id-IDR-on-module-exit.patch [new file with mode: 0644]
linux-next-pending/0028-RDMA-ocrdma-Avoid-a-possible-crash-in-ocrdma_rem_por.patch [new file with mode: 0644]
linux-next-pending/0029-RDMA-ocrdma-Check-resource-ids-received-in-Async-CQE.patch [new file with mode: 0644]
linux-next-pending/0030-RDMA-ocrdma-Prevent-CQ-Doorbell-floods.patch [new file with mode: 0644]
linux-next-pending/0031-RDMA-ocrdma-Initialize-stats-resources-in-the-driver.patch [new file with mode: 0644]
linux-next-pending/0032-RDMA-ocrdma-Fix-pkey_index-returned-by-driver-in-rq-.patch [new file with mode: 0644]
linux-next-pending/0033-RDMA-ocrdma-Fixing-ocrdma-debugfs-directory-remove.patch [new file with mode: 0644]
linux-next-pending/0034-RDMA-ocrdma-Updating-ocrdma-version.patch [new file with mode: 0644]

diff --git a/linux-next-pending/0025-RDMA-ocrdma-Fix-memory-leak-in-_ocrdma_alloc_pd.patch b/linux-next-pending/0025-RDMA-ocrdma-Fix-memory-leak-in-_ocrdma_alloc_pd.patch
new file mode 100644 (file)
index 0000000..065b441
--- /dev/null
@@ -0,0 +1,38 @@
+From dfa032b975949be21830cfd7ad4c50a98f61a718 Mon Sep 17 00:00:00 2001
+From: Roland Dreier <roland@purestorage.com>
+Date: Fri, 29 May 2015 23:10:31 -0700
+Subject: [PATCH 1/9] RDMA/ocrdma: Fix memory leak in _ocrdma_alloc_pd()
+
+If ocrdma_get_pd_num() fails, then we need to free the pd struct we allocated.
+
+This was detected by Coverity (CID 1271245).
+
+Signed-off-by: Roland Dreier <roland@purestorage.com>
+Acked-By: Devesh Sharma <devesh.sharma@avagotech.com>
+Signed-off-by: Doug Ledford <dledford@redhat.com>
+Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
+---
+ drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+index 736fee3..f57d070 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+@@ -390,7 +390,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:
+-- 
+2.2.0
+
diff --git a/linux-next-pending/0026-RDMA-ocrdma-fix-double-free-on-pd.patch b/linux-next-pending/0026-RDMA-ocrdma-fix-double-free-on-pd.patch
new file mode 100644 (file)
index 0000000..012c6bf
--- /dev/null
@@ -0,0 +1,42 @@
+From 5cc1f0beecc99adc2a93379317e177f7ccaefe50 Mon Sep 17 00:00:00 2001
+From: Colin Ian King <colin.king@canonical.com>
+Date: Fri, 5 Jun 2015 15:47:27 +0100
+Subject: [PATCH 2/9] RDMA/ocrdma: fix double free on pd
+
+A reorganisation of the PD allocation and deallocation in commit
+9ba1377daa ("RDMA/ocrdma: Move PD resource management to driver.")
+introduced a double free on pd, as detected by static analysis by
+smatch:
+
+drivers/infiniband/hw/ocrdma/ocrdma_verbs.c:682 ocrdma_alloc_pd()
+  error: double free of 'pd'^
+
+The original call to ocrdma_mbx_dealloc_pd() (which does not kfree
+pd) was replaced with a call to _ocrdma_dealloc_pd() (which does
+kfree pd).  The kfree following this call causes the double free,
+so just remove it to fix the problem.
+
+Fixes: 9ba1377daa ("RDMA/ocrdma: Move PD resource management to driver.")
+Signed-off-by: Colin Ian King <colin.king@canonical.com>
+Acked-By: Devesh Sharma <devesh.sharma@avagotech.com>
+Signed-off-by: Doug Ledford <dledford@redhat.com>
+Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
+---
+ drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+index f57d070..aae5601 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+@@ -699,7 +699,6 @@ err:
+               ocrdma_release_ucontext_pd(uctx);
+       } else {
+               status = _ocrdma_dealloc_pd(dev, pd);
+-              kfree(pd);
+       }
+ exit:
+       return ERR_PTR(status);
+-- 
+2.2.0
+
diff --git a/linux-next-pending/0027-IB-core-Destroy-ocrdma_dev_id-IDR-on-module-exit.patch b/linux-next-pending/0027-IB-core-Destroy-ocrdma_dev_id-IDR-on-module-exit.patch
new file mode 100644 (file)
index 0000000..797cbaf
--- /dev/null
@@ -0,0 +1,75 @@
+From ed8a600eca4fd88e98992150a12a9c04d4f9014d Mon Sep 17 00:00:00 2001
+From: Johannes Thumshirn <jthumshirn@suse.de>
+Date: Wed, 8 Jul 2015 17:23:00 +0200
+Subject: [PATCH 3/9] IB/core: Destroy ocrdma_dev_id IDR on module exit
+
+Destroy ocrdma_dev_id IDR on module exit, reclaiming the allocated memory.
+
+This was detected by the following semantic patch (written by Luis Rodriguez
+<mcgrof@suse.com>)
+<SmPL>
+@ defines_module_init @
+declarer name module_init, module_exit;
+declarer name DEFINE_IDR;
+identifier init;
+@@
+
+module_init(init);
+
+@ defines_module_exit @
+identifier exit;
+@@
+
+module_exit(exit);
+
+@ declares_idr depends on defines_module_init && defines_module_exit @
+identifier idr;
+@@
+
+DEFINE_IDR(idr);
+
+@ on_exit_calls_destroy depends on declares_idr && defines_module_exit @
+identifier declares_idr.idr, defines_module_exit.exit;
+@@
+
+exit(void)
+{
+ ...
+ idr_destroy(&idr);
+ ...
+}
+
+@ missing_module_idr_destroy depends on declares_idr && defines_module_exit && !on_exit_calls_destroy @
+identifier declares_idr.idr, defines_module_exit.exit;
+@@
+
+exit(void)
+{
+ ...
+ +idr_destroy(&idr);
+ }
+
+</SmPL>
+
+Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
+Signed-off-by: Doug Ledford <dledford@redhat.com>
+Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
+---
+ drivers/infiniband/hw/ocrdma/ocrdma_main.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_main.c b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+index 30dc904..3db5349 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_main.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+@@ -691,6 +691,7 @@ static void __exit ocrdma_exit_module(void)
+       ocrdma_unregister_inet6addr_notifier();
+       ocrdma_unregister_inetaddr_notifier();
+       ocrdma_rem_debugfs();
++      idr_destroy(&ocrdma_dev_id);
+ }
+ module_init(ocrdma_init_module);
+-- 
+2.2.0
+
diff --git a/linux-next-pending/0028-RDMA-ocrdma-Avoid-a-possible-crash-in-ocrdma_rem_por.patch b/linux-next-pending/0028-RDMA-ocrdma-Avoid-a-possible-crash-in-ocrdma_rem_por.patch
new file mode 100644 (file)
index 0000000..3296a39
--- /dev/null
@@ -0,0 +1,35 @@
+From f12e0a14e43ef02743be0f8f7898d5ddbacc2986 Mon Sep 17 00:00:00 2001
+From: Selvin Xavier <selvin.xavier@avagotech.com>
+Date: Tue, 20 Oct 2015 14:17:57 +0530
+Subject: [PATCH 4/9] RDMA/ocrdma: Avoid a possible crash in
+ ocrdma_rem_port_stats
+
+debugfs_remove should be called before freeing the driver
+stats resources to avoid any crash during ocrdma_remove.
+
+Signed-off-by: Devesh Sharma <devesh.sharma@avagotech.com>
+Signed-off-by: Selvin Xavier <selvin.xavier@avagotech.com>
+Signed-off-by: Doug Ledford <dledford@redhat.com>
+Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
+---
+ drivers/infiniband/hw/ocrdma/ocrdma_stats.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_stats.c b/drivers/infiniband/hw/ocrdma/ocrdma_stats.c
+index b9e5e10..98e1744 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_stats.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_stats.c
+@@ -856,9 +856,9 @@ void ocrdma_rem_port_stats(struct ocrdma_dev *dev)
+ {
+       if (!dev->dir)
+               return;
++      debugfs_remove(dev->dir);
+       mutex_destroy(&dev->stats_lock);
+       ocrdma_release_stats_mem(dev);
+-      debugfs_remove(dev->dir);
+ }
+ void ocrdma_init_debugfs(void)
+-- 
+2.2.0
+
diff --git a/linux-next-pending/0029-RDMA-ocrdma-Check-resource-ids-received-in-Async-CQE.patch b/linux-next-pending/0029-RDMA-ocrdma-Check-resource-ids-received-in-Async-CQE.patch
new file mode 100644 (file)
index 0000000..b5eaf86
--- /dev/null
@@ -0,0 +1,62 @@
+From 24e4da1d22895d964a00f2785240af6cec54396e Mon Sep 17 00:00:00 2001
+From: Naga Irrinki <Naga.Irrinki@avagotech.com>
+Date: Tue, 20 Oct 2015 14:17:58 +0530
+Subject: [PATCH 5/9] RDMA/ocrdma: Check resource ids received in Async CQE
+
+Some versions of the FW sends wrong QP or CQ IDs in the
+Async CQE. Adding a check to see whether qp or cq structures
+associated with the CQE is valid.
+
+Signed-off-by: Devesh Sharma <devesh.sharma@avagotech.com>
+Signed-off-by: Selvin Xavier <selvin.xavier@avagotech.com>
+Signed-off-by: Doug Ledford <dledford@redhat.com>
+Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
+---
+ drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 30 ++++++++++++++++++++++++++----
+ 1 file changed, 26 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
+index 8776e12..c12cbaa 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c
+@@ -678,11 +678,33 @@ static void ocrdma_dispatch_ibevent(struct ocrdma_dev *dev,
+       int dev_event = 0;
+       int type = (cqe->valid_ae_event & OCRDMA_AE_MCQE_EVENT_TYPE_MASK) >>
+           OCRDMA_AE_MCQE_EVENT_TYPE_SHIFT;
++      u16 qpid = cqe->qpvalid_qpid & OCRDMA_AE_MCQE_QPID_MASK;
++      u16 cqid = cqe->cqvalid_cqid & OCRDMA_AE_MCQE_CQID_MASK;
+-      if (cqe->qpvalid_qpid & OCRDMA_AE_MCQE_QPVALID)
+-              qp = dev->qp_tbl[cqe->qpvalid_qpid & OCRDMA_AE_MCQE_QPID_MASK];
+-      if (cqe->cqvalid_cqid & OCRDMA_AE_MCQE_CQVALID)
+-              cq = dev->cq_tbl[cqe->cqvalid_cqid & OCRDMA_AE_MCQE_CQID_MASK];
++      /*
++       * Some FW version returns wrong qp or cq ids in CQEs.
++       * Checking whether the IDs are valid
++       */
++
++      if (cqe->qpvalid_qpid & OCRDMA_AE_MCQE_QPVALID) {
++              if (qpid < dev->attr.max_qp)
++                      qp = dev->qp_tbl[qpid];
++              if (qp == NULL) {
++                      pr_err("ocrdma%d:Async event - qpid %u is not valid\n",
++                             dev->id, qpid);
++                      return;
++              }
++      }
++
++      if (cqe->cqvalid_cqid & OCRDMA_AE_MCQE_CQVALID) {
++              if (cqid < dev->attr.max_cq)
++                      cq = dev->cq_tbl[cqid];
++              if (cq == NULL) {
++                      pr_err("ocrdma%d:Async event - cqid %u is not valid\n",
++                             dev->id, cqid);
++                      return;
++              }
++      }
+       memset(&ib_evt, 0, sizeof(ib_evt));
+-- 
+2.2.0
+
diff --git a/linux-next-pending/0030-RDMA-ocrdma-Prevent-CQ-Doorbell-floods.patch b/linux-next-pending/0030-RDMA-ocrdma-Prevent-CQ-Doorbell-floods.patch
new file mode 100644 (file)
index 0000000..29f4c49
--- /dev/null
@@ -0,0 +1,45 @@
+From 3c4579ec474299d5ef8c0c13d1d7538f05eb01fd Mon Sep 17 00:00:00 2001
+From: Devesh Sharma <devesh.sharma@avagotech.com>
+Date: Tue, 20 Oct 2015 14:17:59 +0530
+Subject: [PATCH 6/9] RDMA/ocrdma: Prevent CQ-Doorbell floods
+
+Changing CQ-Doorbell(DB) logic to prevent DB floods, it is supposed to be
+pressed only if any hw CQE is polled. If cq-arm was requested
+previously then don't bother about number of hw CQEs polled and
+arm the CQ.
+
+Signed-off-by: Devesh Sharma <devesh.sharma@avagotech.com>
+Signed-off-by: Selvin Xavier <selvin.xavier@avagotech.com>
+Signed-off-by: Doug Ledford <dledford@redhat.com>
+Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
+---
+ drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 11 +++--------
+ 1 file changed, 3 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+index aae5601..45b8e09 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+@@ -2886,16 +2886,11 @@ expand_cqe:
+       }
+ stop_cqe:
+       cq->getp = cur_getp;
+-      if (cq->deferred_arm) {
+-              ocrdma_ring_cq_db(dev, cq->id, true, cq->deferred_sol,
+-                                polled_hw_cqes);
++      if (cq->deferred_arm || polled_hw_cqes) {
++              ocrdma_ring_cq_db(dev, cq->id, cq->deferred_arm,
++                                cq->deferred_sol, polled_hw_cqes);
+               cq->deferred_arm = false;
+               cq->deferred_sol = false;
+-      } else {
+-              /* We need to pop the CQE. No need to arm */
+-              ocrdma_ring_cq_db(dev, cq->id, false, cq->deferred_sol,
+-                                polled_hw_cqes);
+-              cq->deferred_sol = false;
+       }
+       return i;
+-- 
+2.2.0
+
diff --git a/linux-next-pending/0031-RDMA-ocrdma-Initialize-stats-resources-in-the-driver.patch b/linux-next-pending/0031-RDMA-ocrdma-Initialize-stats-resources-in-the-driver.patch
new file mode 100644 (file)
index 0000000..a5aa817
--- /dev/null
@@ -0,0 +1,118 @@
+From 81afbfac5107d1bae0077f0c53dbcb410efceb9a Mon Sep 17 00:00:00 2001
+From: Selvin Xavier <selvin.xavier@broadcom.com>
+Date: Fri, 5 Feb 2016 20:06:37 +0530
+Subject: [PATCH 7/9] RDMA/ocrdma: Initialize stats resources in the driver
+ before ib device registration.
+
+In the latest kernel, process_mad hook of the driver can be invoked as
+soon as device is registered. In this hook, ocrdma driver is issuing a
+command to get the stats counters from the HW. This is triggering system
+crash since the statistics command resources are not allocated by the driver.
+Changing the sequence of initialization to avoid this crash.
+
+Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
+Signed-off-by: Doug Ledford <dledford@redhat.com>
+---
+ drivers/infiniband/hw/ocrdma/ocrdma_main.c  |  6 ++++++
+ drivers/infiniband/hw/ocrdma/ocrdma_stats.c | 14 ++++----------
+ drivers/infiniband/hw/ocrdma/ocrdma_stats.h |  2 ++
+ 3 files changed, 12 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_main.c b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+index 3db5349..b66711d 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_main.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+@@ -346,6 +346,11 @@ static int ocrdma_alloc_resources(struct ocrdma_dev *dev)
+       ocrdma_alloc_pd_pool(dev);
++      if (!ocrdma_alloc_stats_resources(dev)) {
++              pr_err("%s: stats resource allocation failed\n", __func__);
++              goto alloc_err;
++      }
++
+       spin_lock_init(&dev->av_tbl.lock);
+       spin_lock_init(&dev->flush_q_lock);
+       return 0;
+@@ -356,6 +361,7 @@ alloc_err:
+ static void ocrdma_free_resources(struct ocrdma_dev *dev)
+ {
++      ocrdma_release_stats_resources(dev);
+       kfree(dev->stag_arr);
+       kfree(dev->qp_tbl);
+       kfree(dev->cq_tbl);
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_stats.c b/drivers/infiniband/hw/ocrdma/ocrdma_stats.c
+index 98e1744..844e249 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_stats.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_stats.c
+@@ -64,10 +64,11 @@ static int ocrdma_add_stat(char *start, char *pcur,
+       return cpy_len;
+ }
+-static bool ocrdma_alloc_stats_mem(struct ocrdma_dev *dev)
++bool ocrdma_alloc_stats_resources(struct ocrdma_dev *dev)
+ {
+       struct stats_mem *mem = &dev->stats_mem;
++      mutex_init(&dev->stats_lock);
+       /* Alloc mbox command mem*/
+       mem->size = max_t(u32, sizeof(struct ocrdma_rdma_stats_req),
+                       sizeof(struct ocrdma_rdma_stats_resp));
+@@ -91,13 +92,14 @@ static bool ocrdma_alloc_stats_mem(struct ocrdma_dev *dev)
+       return true;
+ }
+-static void ocrdma_release_stats_mem(struct ocrdma_dev *dev)
++void ocrdma_release_stats_resources(struct ocrdma_dev *dev)
+ {
+       struct stats_mem *mem = &dev->stats_mem;
+       if (mem->va)
+               dma_free_coherent(&dev->nic_info.pdev->dev, mem->size,
+                                 mem->va, mem->pa);
++      mem->va = NULL;
+       kfree(mem->debugfs_mem);
+ }
+@@ -839,15 +841,9 @@ void ocrdma_add_port_stats(struct ocrdma_dev *dev)
+                               &dev->reset_stats, &ocrdma_dbg_ops))
+               goto err;
+-      /* Now create dma_mem for stats mbx command */
+-      if (!ocrdma_alloc_stats_mem(dev))
+-              goto err;
+-
+-      mutex_init(&dev->stats_lock);
+       return;
+ err:
+-      ocrdma_release_stats_mem(dev);
+       debugfs_remove_recursive(dev->dir);
+       dev->dir = NULL;
+ }
+@@ -857,8 +853,6 @@ void ocrdma_rem_port_stats(struct ocrdma_dev *dev)
+       if (!dev->dir)
+               return;
+       debugfs_remove(dev->dir);
+-      mutex_destroy(&dev->stats_lock);
+-      ocrdma_release_stats_mem(dev);
+ }
+ void ocrdma_init_debugfs(void)
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_stats.h b/drivers/infiniband/hw/ocrdma/ocrdma_stats.h
+index c9e58d0..bba1fec 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_stats.h
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_stats.h
+@@ -65,6 +65,8 @@ enum OCRDMA_STATS_TYPE {
+ void ocrdma_rem_debugfs(void);
+ void ocrdma_init_debugfs(void);
++bool ocrdma_alloc_stats_resources(struct ocrdma_dev *dev);
++void ocrdma_release_stats_resources(struct ocrdma_dev *dev);
+ void ocrdma_rem_port_stats(struct ocrdma_dev *dev);
+ void ocrdma_add_port_stats(struct ocrdma_dev *dev);
+ int ocrdma_pma_counters(struct ocrdma_dev *dev,
+-- 
+2.2.0
+
diff --git a/linux-next-pending/0032-RDMA-ocrdma-Fix-pkey_index-returned-by-driver-in-rq-.patch b/linux-next-pending/0032-RDMA-ocrdma-Fix-pkey_index-returned-by-driver-in-rq-.patch
new file mode 100644 (file)
index 0000000..debfc1c
--- /dev/null
@@ -0,0 +1,33 @@
+From 50f6f1cd866c23230362df3888c06e3eba2f9c9d Mon Sep 17 00:00:00 2001
+From: Selvin Xavier <selvin.xavier@broadcom.com>
+Date: Fri, 5 Feb 2016 20:06:39 +0530
+Subject: [PATCH 8/9] RDMA/ocrdma: Fix pkey_index returned by driver in rq work
+ completion
+
+Currently returning the pkey value instead of pkey index.
+pkey index is always zero since ocrdma supports only default
+pkey.
+
+Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
+Signed-off-by: Doug Ledford <dledford@redhat.com>
+---
+ drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+index 45b8e09..3cd8e3c 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+@@ -2701,8 +2701,7 @@ static int ocrdma_update_ud_rcqe(struct ib_wc *ibwc, struct ocrdma_cqe *cqe)
+               OCRDMA_CQE_UD_STATUS_MASK) >> OCRDMA_CQE_UD_STATUS_SHIFT;
+       ibwc->src_qp = le32_to_cpu(cqe->flags_status_srcqpn) &
+                                               OCRDMA_CQE_SRCQP_MASK;
+-      ibwc->pkey_index = le32_to_cpu(cqe->ud.rxlen_pkey) &
+-                                              OCRDMA_CQE_PKEY_MASK;
++      ibwc->pkey_index = 0;
+       ibwc->wc_flags = IB_WC_GRH;
+       ibwc->byte_len = (le32_to_cpu(cqe->ud.rxlen_pkey) >>
+                                       OCRDMA_CQE_UD_XFER_LEN_SHIFT);
+-- 
+2.2.0
+
diff --git a/linux-next-pending/0033-RDMA-ocrdma-Fixing-ocrdma-debugfs-directory-remove.patch b/linux-next-pending/0033-RDMA-ocrdma-Fixing-ocrdma-debugfs-directory-remove.patch
new file mode 100644 (file)
index 0000000..4dd4bd2
--- /dev/null
@@ -0,0 +1,31 @@
+From abab0d4223adc9390980d02b8f4e96f69f361ede Mon Sep 17 00:00:00 2001
+From: Selvin Xavier <selvin.xavier@broadcom.com>
+Date: Fri, 5 Feb 2016 20:06:40 +0530
+Subject: [PATCH 9/9] RDMA/ocrdma: Fixing ocrdma debugfs directory remove
+
+During the ocrdma device remove sequence, the debugfs directory
+tree of each ocrdma device needs to be removed. Use
+debugfs_remove_recursive instead of debugfs_remove.
+
+Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
+Signed-off-by: Doug Ledford <dledford@redhat.com>
+---
+ drivers/infiniband/hw/ocrdma/ocrdma_stats.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_stats.c b/drivers/infiniband/hw/ocrdma/ocrdma_stats.c
+index 844e249..54c0958 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_stats.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_stats.c
+@@ -852,7 +852,7 @@ void ocrdma_rem_port_stats(struct ocrdma_dev *dev)
+ {
+       if (!dev->dir)
+               return;
+-      debugfs_remove(dev->dir);
++      debugfs_remove_recursive(dev->dir);
+ }
+ void ocrdma_init_debugfs(void)
+-- 
+2.2.0
+
diff --git a/linux-next-pending/0034-RDMA-ocrdma-Updating-ocrdma-version.patch b/linux-next-pending/0034-RDMA-ocrdma-Updating-ocrdma-version.patch
new file mode 100644 (file)
index 0000000..7a97896
--- /dev/null
@@ -0,0 +1,28 @@
+From af8d02d973efd52342ea52d45de0e8b0c16fb6f4 Mon Sep 17 00:00:00 2001
+From: Selvin Xavier <selvin.xavier@broadcom.com>
+Date: Wed, 24 Feb 2016 18:18:07 +0530
+Subject: [PATCH] RDMA/ocrdma: Updating ocrdma version
+
+Updating ocrdma version to 11.0.0.0
+
+Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
+---
+ drivers/infiniband/hw/ocrdma/ocrdma.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma.h b/drivers/infiniband/hw/ocrdma/ocrdma.h
+index c293491..7b25ca7 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma.h
++++ b/drivers/infiniband/hw/ocrdma/ocrdma.h
+@@ -55,7 +55,7 @@
+ #include <be_roce.h>
+ #include "ocrdma_sli.h"
+-#define OCRDMA_ROCE_DRV_VERSION "10.6.0.0_ofed"
++#define OCRDMA_ROCE_DRV_VERSION "11.0.0.0_ofed"
+ #define OCRDMA_ROCE_DRV_DESC "Emulex OneConnect RoCE Driver"
+ #define OCRDMA_NODE_DESC "Emulex OneConnect RoCE HCA"
+-- 
+2.2.0
+