Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma

Pull rdma fixes from Doug Ledford:
"A few more minor fixes for rc3:

- One fix to ipoib
- One fix to core sysfs code
- Four patches that resolve an oops found in testing of ocrdma and a
couple other ocrdma issues"

* tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma:
RDMA/ocrdma: Fixing ocrdma debugfs directory remove
RDMA/ocrdma: Fix pkey_index returned by driver in rq work completion
RDMA/ocrdma: populate max_sge_rd in device attributes
RDMA/ocrdma: Initialize stats resources in the driver before ib device registration.
IB/sysfs: remove unused va_list args
IB/IPoIB: Do not set skb truesize since using one linearskb

+16 -19
-2
drivers/infiniband/core/sysfs.c
··· 336 union ib_gid gid; 337 struct ib_gid_attr gid_attr = {}; 338 ssize_t ret; 339 - va_list args; 340 341 ret = ib_query_gid(p->ibdev, p->port_num, tab_attr->index, &gid, 342 &gid_attr); ··· 347 err: 348 if (gid_attr.ndev) 349 dev_put(gid_attr.ndev); 350 - va_end(args); 351 return ret; 352 } 353
··· 336 union ib_gid gid; 337 struct ib_gid_attr gid_attr = {}; 338 ssize_t ret; 339 340 ret = ib_query_gid(p->ibdev, p->port_num, tab_attr->index, &gid, 341 &gid_attr); ··· 348 err: 349 if (gid_attr.ndev) 350 dev_put(gid_attr.ndev); 351 return ret; 352 } 353
+6
drivers/infiniband/hw/ocrdma/ocrdma_main.c
··· 228 229 ocrdma_alloc_pd_pool(dev); 230 231 spin_lock_init(&dev->av_tbl.lock); 232 spin_lock_init(&dev->flush_q_lock); 233 return 0; ··· 243 244 static void ocrdma_free_resources(struct ocrdma_dev *dev) 245 { 246 kfree(dev->stag_arr); 247 kfree(dev->qp_tbl); 248 kfree(dev->cq_tbl);
··· 228 229 ocrdma_alloc_pd_pool(dev); 230 231 + if (!ocrdma_alloc_stats_resources(dev)) { 232 + pr_err("%s: stats resource allocation failed\n", __func__); 233 + goto alloc_err; 234 + } 235 + 236 spin_lock_init(&dev->av_tbl.lock); 237 spin_lock_init(&dev->flush_q_lock); 238 return 0; ··· 238 239 static void ocrdma_free_resources(struct ocrdma_dev *dev) 240 { 241 + ocrdma_release_stats_resources(dev); 242 kfree(dev->stag_arr); 243 kfree(dev->qp_tbl); 244 kfree(dev->cq_tbl);
+5 -11
drivers/infiniband/hw/ocrdma/ocrdma_stats.c
··· 64 return cpy_len; 65 } 66 67 - static bool ocrdma_alloc_stats_mem(struct ocrdma_dev *dev) 68 { 69 struct stats_mem *mem = &dev->stats_mem; 70 71 /* Alloc mbox command mem*/ 72 mem->size = max_t(u32, sizeof(struct ocrdma_rdma_stats_req), 73 sizeof(struct ocrdma_rdma_stats_resp)); ··· 92 return true; 93 } 94 95 - static void ocrdma_release_stats_mem(struct ocrdma_dev *dev) 96 { 97 struct stats_mem *mem = &dev->stats_mem; 98 99 if (mem->va) 100 dma_free_coherent(&dev->nic_info.pdev->dev, mem->size, 101 mem->va, mem->pa); 102 kfree(mem->debugfs_mem); 103 } 104 ··· 840 &dev->reset_stats, &ocrdma_dbg_ops)) 841 goto err; 842 843 - /* Now create dma_mem for stats mbx command */ 844 - if (!ocrdma_alloc_stats_mem(dev)) 845 - goto err; 846 - 847 - mutex_init(&dev->stats_lock); 848 849 return; 850 err: 851 - ocrdma_release_stats_mem(dev); 852 debugfs_remove_recursive(dev->dir); 853 dev->dir = NULL; 854 } ··· 851 { 852 if (!dev->dir) 853 return; 854 - debugfs_remove(dev->dir); 855 - mutex_destroy(&dev->stats_lock); 856 - ocrdma_release_stats_mem(dev); 857 } 858 859 void ocrdma_init_debugfs(void)
··· 64 return cpy_len; 65 } 66 67 + bool ocrdma_alloc_stats_resources(struct ocrdma_dev *dev) 68 { 69 struct stats_mem *mem = &dev->stats_mem; 70 71 + mutex_init(&dev->stats_lock); 72 /* Alloc mbox command mem*/ 73 mem->size = max_t(u32, sizeof(struct ocrdma_rdma_stats_req), 74 sizeof(struct ocrdma_rdma_stats_resp)); ··· 91 return true; 92 } 93 94 + void ocrdma_release_stats_resources(struct ocrdma_dev *dev) 95 { 96 struct stats_mem *mem = &dev->stats_mem; 97 98 if (mem->va) 99 dma_free_coherent(&dev->nic_info.pdev->dev, mem->size, 100 mem->va, mem->pa); 101 + mem->va = NULL; 102 kfree(mem->debugfs_mem); 103 } 104 ··· 838 &dev->reset_stats, &ocrdma_dbg_ops)) 839 goto err; 840 841 842 return; 843 err: 844 debugfs_remove_recursive(dev->dir); 845 dev->dir = NULL; 846 } ··· 855 { 856 if (!dev->dir) 857 return; 858 + debugfs_remove_recursive(dev->dir); 859 } 860 861 void ocrdma_init_debugfs(void)
+2
drivers/infiniband/hw/ocrdma/ocrdma_stats.h
··· 65 66 void ocrdma_rem_debugfs(void); 67 void ocrdma_init_debugfs(void); 68 void ocrdma_rem_port_stats(struct ocrdma_dev *dev); 69 void ocrdma_add_port_stats(struct ocrdma_dev *dev); 70 int ocrdma_pma_counters(struct ocrdma_dev *dev,
··· 65 66 void ocrdma_rem_debugfs(void); 67 void ocrdma_init_debugfs(void); 68 + bool ocrdma_alloc_stats_resources(struct ocrdma_dev *dev); 69 + void ocrdma_release_stats_resources(struct ocrdma_dev *dev); 70 void ocrdma_rem_port_stats(struct ocrdma_dev *dev); 71 void ocrdma_add_port_stats(struct ocrdma_dev *dev); 72 int ocrdma_pma_counters(struct ocrdma_dev *dev,
+3 -4
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
··· 125 IB_DEVICE_SYS_IMAGE_GUID | 126 IB_DEVICE_LOCAL_DMA_LKEY | 127 IB_DEVICE_MEM_MGT_EXTENSIONS; 128 - attr->max_sge = min(dev->attr.max_send_sge, dev->attr.max_srq_sge); 129 - attr->max_sge_rd = 0; 130 attr->max_cq = dev->attr.max_cq; 131 attr->max_cqe = dev->attr.max_cqe; 132 attr->max_mr = dev->attr.max_mr; ··· 2726 OCRDMA_CQE_UD_STATUS_MASK) >> OCRDMA_CQE_UD_STATUS_SHIFT; 2727 ibwc->src_qp = le32_to_cpu(cqe->flags_status_srcqpn) & 2728 OCRDMA_CQE_SRCQP_MASK; 2729 - ibwc->pkey_index = le32_to_cpu(cqe->ud.rxlen_pkey) & 2730 - OCRDMA_CQE_PKEY_MASK; 2731 ibwc->wc_flags = IB_WC_GRH; 2732 ibwc->byte_len = (le32_to_cpu(cqe->ud.rxlen_pkey) >> 2733 OCRDMA_CQE_UD_XFER_LEN_SHIFT);
··· 125 IB_DEVICE_SYS_IMAGE_GUID | 126 IB_DEVICE_LOCAL_DMA_LKEY | 127 IB_DEVICE_MEM_MGT_EXTENSIONS; 128 + attr->max_sge = dev->attr.max_send_sge; 129 + attr->max_sge_rd = attr->max_sge; 130 attr->max_cq = dev->attr.max_cq; 131 attr->max_cqe = dev->attr.max_cqe; 132 attr->max_mr = dev->attr.max_mr; ··· 2726 OCRDMA_CQE_UD_STATUS_MASK) >> OCRDMA_CQE_UD_STATUS_SHIFT; 2727 ibwc->src_qp = le32_to_cpu(cqe->flags_status_srcqpn) & 2728 OCRDMA_CQE_SRCQP_MASK; 2729 + ibwc->pkey_index = 0; 2730 ibwc->wc_flags = IB_WC_GRH; 2731 ibwc->byte_len = (le32_to_cpu(cqe->ud.rxlen_pkey) >> 2732 OCRDMA_CQE_UD_XFER_LEN_SHIFT);
-2
drivers/infiniband/ulp/ipoib/ipoib_ib.c
··· 245 skb_reset_mac_header(skb); 246 skb_pull(skb, IPOIB_ENCAP_LEN); 247 248 - skb->truesize = SKB_TRUESIZE(skb->len); 249 - 250 ++dev->stats.rx_packets; 251 dev->stats.rx_bytes += skb->len; 252
··· 245 skb_reset_mac_header(skb); 246 skb_pull(skb, IPOIB_ENCAP_LEN); 247 248 ++dev->stats.rx_packets; 249 dev->stats.rx_bytes += skb->len; 250