From 7affc54cf38e72e5f3b591a8fa77eae15ae8657b Mon Sep 17 00:00:00 2001 From: Selvin Xavier Date: Wed, 24 Feb 2016 18:21:16 +0530 Subject: [PATCH] RDMA/ocrdma: ocrdma sync up patch series Updating the ocrdma driver with the bug fixes from upstream Signed-off-by: Selvin Xavier --- ...-Fix-memory-leak-in-_ocrdma_alloc_pd.patch | 38 ++++++ ...26-RDMA-ocrdma-fix-double-free-on-pd.patch | 42 +++++++ ...roy-ocrdma_dev_id-IDR-on-module-exit.patch | 75 +++++++++++ ...d-a-possible-crash-in-ocrdma_rem_por.patch | 35 ++++++ ...k-resource-ids-received-in-Async-CQE.patch | 62 +++++++++ ...MA-ocrdma-Prevent-CQ-Doorbell-floods.patch | 45 +++++++ ...ialize-stats-resources-in-the-driver.patch | 118 ++++++++++++++++++ ...pkey_index-returned-by-driver-in-rq-.patch | 33 +++++ ...xing-ocrdma-debugfs-directory-remove.patch | 31 +++++ ...-RDMA-ocrdma-Updating-ocrdma-version.patch | 28 +++++ 10 files changed, 507 insertions(+) create mode 100644 linux-next-pending/0025-RDMA-ocrdma-Fix-memory-leak-in-_ocrdma_alloc_pd.patch create mode 100644 linux-next-pending/0026-RDMA-ocrdma-fix-double-free-on-pd.patch create mode 100644 linux-next-pending/0027-IB-core-Destroy-ocrdma_dev_id-IDR-on-module-exit.patch create mode 100644 linux-next-pending/0028-RDMA-ocrdma-Avoid-a-possible-crash-in-ocrdma_rem_por.patch create mode 100644 linux-next-pending/0029-RDMA-ocrdma-Check-resource-ids-received-in-Async-CQE.patch create mode 100644 linux-next-pending/0030-RDMA-ocrdma-Prevent-CQ-Doorbell-floods.patch create mode 100644 linux-next-pending/0031-RDMA-ocrdma-Initialize-stats-resources-in-the-driver.patch create mode 100644 linux-next-pending/0032-RDMA-ocrdma-Fix-pkey_index-returned-by-driver-in-rq-.patch create mode 100644 linux-next-pending/0033-RDMA-ocrdma-Fixing-ocrdma-debugfs-directory-remove.patch create mode 100644 linux-next-pending/0034-RDMA-ocrdma-Updating-ocrdma-version.patch 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 index 0000000..065b441 --- /dev/null +++ b/linux-next-pending/0025-RDMA-ocrdma-Fix-memory-leak-in-_ocrdma_alloc_pd.patch @@ -0,0 +1,38 @@ +From dfa032b975949be21830cfd7ad4c50a98f61a718 Mon Sep 17 00:00:00 2001 +From: Roland Dreier +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 +Acked-By: Devesh Sharma +Signed-off-by: Doug Ledford +Signed-off-by: Selvin Xavier +--- + 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 index 0000000..012c6bf --- /dev/null +++ b/linux-next-pending/0026-RDMA-ocrdma-fix-double-free-on-pd.patch @@ -0,0 +1,42 @@ +From 5cc1f0beecc99adc2a93379317e177f7ccaefe50 Mon Sep 17 00:00:00 2001 +From: Colin Ian King +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 +Acked-By: Devesh Sharma +Signed-off-by: Doug Ledford +Signed-off-by: Selvin Xavier +--- + 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 index 0000000..797cbaf --- /dev/null +++ b/linux-next-pending/0027-IB-core-Destroy-ocrdma_dev_id-IDR-on-module-exit.patch @@ -0,0 +1,75 @@ +From ed8a600eca4fd88e98992150a12a9c04d4f9014d Mon Sep 17 00:00:00 2001 +From: Johannes Thumshirn +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 +) + +@ 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); + } + + + +Signed-off-by: Johannes Thumshirn +Signed-off-by: Doug Ledford +Signed-off-by: Selvin Xavier +--- + 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 index 0000000..3296a39 --- /dev/null +++ b/linux-next-pending/0028-RDMA-ocrdma-Avoid-a-possible-crash-in-ocrdma_rem_por.patch @@ -0,0 +1,35 @@ +From f12e0a14e43ef02743be0f8f7898d5ddbacc2986 Mon Sep 17 00:00:00 2001 +From: Selvin Xavier +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 +Signed-off-by: Selvin Xavier +Signed-off-by: Doug Ledford +Signed-off-by: Selvin Xavier +--- + 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 index 0000000..b5eaf86 --- /dev/null +++ b/linux-next-pending/0029-RDMA-ocrdma-Check-resource-ids-received-in-Async-CQE.patch @@ -0,0 +1,62 @@ +From 24e4da1d22895d964a00f2785240af6cec54396e Mon Sep 17 00:00:00 2001 +From: Naga Irrinki +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 +Signed-off-by: Selvin Xavier +Signed-off-by: Doug Ledford +Signed-off-by: Selvin Xavier +--- + 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 index 0000000..29f4c49 --- /dev/null +++ b/linux-next-pending/0030-RDMA-ocrdma-Prevent-CQ-Doorbell-floods.patch @@ -0,0 +1,45 @@ +From 3c4579ec474299d5ef8c0c13d1d7538f05eb01fd Mon Sep 17 00:00:00 2001 +From: Devesh Sharma +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 +Signed-off-by: Selvin Xavier +Signed-off-by: Doug Ledford +Signed-off-by: Selvin Xavier +--- + 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 index 0000000..a5aa817 --- /dev/null +++ b/linux-next-pending/0031-RDMA-ocrdma-Initialize-stats-resources-in-the-driver.patch @@ -0,0 +1,118 @@ +From 81afbfac5107d1bae0077f0c53dbcb410efceb9a Mon Sep 17 00:00:00 2001 +From: Selvin Xavier +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 +Signed-off-by: Doug Ledford +--- + 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 index 0000000..debfc1c --- /dev/null +++ b/linux-next-pending/0032-RDMA-ocrdma-Fix-pkey_index-returned-by-driver-in-rq-.patch @@ -0,0 +1,33 @@ +From 50f6f1cd866c23230362df3888c06e3eba2f9c9d Mon Sep 17 00:00:00 2001 +From: Selvin Xavier +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 +Signed-off-by: Doug Ledford +--- + 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 index 0000000..4dd4bd2 --- /dev/null +++ b/linux-next-pending/0033-RDMA-ocrdma-Fixing-ocrdma-debugfs-directory-remove.patch @@ -0,0 +1,31 @@ +From abab0d4223adc9390980d02b8f4e96f69f361ede Mon Sep 17 00:00:00 2001 +From: Selvin Xavier +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 +Signed-off-by: Doug Ledford +--- + 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 index 0000000..7a97896 --- /dev/null +++ b/linux-next-pending/0034-RDMA-ocrdma-Updating-ocrdma-version.patch @@ -0,0 +1,28 @@ +From af8d02d973efd52342ea52d45de0e8b0c16fb6f4 Mon Sep 17 00:00:00 2001 +From: Selvin Xavier +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 +--- + 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 + #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 + -- 2.41.0