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