diff options
| -rw-r--r-- | drivers/infiniband/core/sysfs.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_main.c | 6 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_stats.c | 16 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_stats.h | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 7 | ||||
| -rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_ib.c | 2 |
6 files changed, 16 insertions, 19 deletions
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c index 3de93517efe4..ec46386e3c7f 100644 --- a/drivers/infiniband/core/sysfs.c +++ b/drivers/infiniband/core/sysfs.c | |||
| @@ -336,7 +336,6 @@ static ssize_t _show_port_gid_attr(struct ib_port *p, | |||
| 336 | union ib_gid gid; | 336 | union ib_gid gid; |
| 337 | struct ib_gid_attr gid_attr = {}; | 337 | struct ib_gid_attr gid_attr = {}; |
| 338 | ssize_t ret; | 338 | ssize_t ret; |
| 339 | va_list args; | ||
| 340 | 339 | ||
| 341 | ret = ib_query_gid(p->ibdev, p->port_num, tab_attr->index, &gid, | 340 | ret = ib_query_gid(p->ibdev, p->port_num, tab_attr->index, &gid, |
| 342 | &gid_attr); | 341 | &gid_attr); |
| @@ -348,7 +347,6 @@ static ssize_t _show_port_gid_attr(struct ib_port *p, | |||
| 348 | err: | 347 | err: |
| 349 | if (gid_attr.ndev) | 348 | if (gid_attr.ndev) |
| 350 | dev_put(gid_attr.ndev); | 349 | dev_put(gid_attr.ndev); |
| 351 | va_end(args); | ||
| 352 | return ret; | 350 | return ret; |
| 353 | } | 351 | } |
| 354 | 352 | ||
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_main.c b/drivers/infiniband/hw/ocrdma/ocrdma_main.c index 573849354cb9..f38743018cb4 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_main.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c | |||
| @@ -228,6 +228,11 @@ static int ocrdma_alloc_resources(struct ocrdma_dev *dev) | |||
| 228 | 228 | ||
| 229 | ocrdma_alloc_pd_pool(dev); | 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 | spin_lock_init(&dev->av_tbl.lock); | 236 | spin_lock_init(&dev->av_tbl.lock); |
| 232 | spin_lock_init(&dev->flush_q_lock); | 237 | spin_lock_init(&dev->flush_q_lock); |
| 233 | return 0; | 238 | return 0; |
| @@ -238,6 +243,7 @@ alloc_err: | |||
| 238 | 243 | ||
| 239 | static void ocrdma_free_resources(struct ocrdma_dev *dev) | 244 | static void ocrdma_free_resources(struct ocrdma_dev *dev) |
| 240 | { | 245 | { |
| 246 | ocrdma_release_stats_resources(dev); | ||
| 241 | kfree(dev->stag_arr); | 247 | kfree(dev->stag_arr); |
| 242 | kfree(dev->qp_tbl); | 248 | kfree(dev->qp_tbl); |
| 243 | kfree(dev->cq_tbl); | 249 | kfree(dev->cq_tbl); |
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_stats.c b/drivers/infiniband/hw/ocrdma/ocrdma_stats.c index 86c303a620c1..255f774080a4 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, | |||
| 64 | return cpy_len; | 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 | struct stats_mem *mem = &dev->stats_mem; | 69 | struct stats_mem *mem = &dev->stats_mem; |
| 70 | 70 | ||
| 71 | mutex_init(&dev->stats_lock); | ||
| 71 | /* Alloc mbox command mem*/ | 72 | /* Alloc mbox command mem*/ |
| 72 | mem->size = max_t(u32, sizeof(struct ocrdma_rdma_stats_req), | 73 | mem->size = max_t(u32, sizeof(struct ocrdma_rdma_stats_req), |
| 73 | sizeof(struct ocrdma_rdma_stats_resp)); | 74 | sizeof(struct ocrdma_rdma_stats_resp)); |
| @@ -91,13 +92,14 @@ static bool ocrdma_alloc_stats_mem(struct ocrdma_dev *dev) | |||
| 91 | return true; | 92 | return true; |
| 92 | } | 93 | } |
| 93 | 94 | ||
| 94 | static void ocrdma_release_stats_mem(struct ocrdma_dev *dev) | 95 | void ocrdma_release_stats_resources(struct ocrdma_dev *dev) |
| 95 | { | 96 | { |
| 96 | struct stats_mem *mem = &dev->stats_mem; | 97 | struct stats_mem *mem = &dev->stats_mem; |
| 97 | 98 | ||
| 98 | if (mem->va) | 99 | if (mem->va) |
| 99 | dma_free_coherent(&dev->nic_info.pdev->dev, mem->size, | 100 | dma_free_coherent(&dev->nic_info.pdev->dev, mem->size, |
| 100 | mem->va, mem->pa); | 101 | mem->va, mem->pa); |
| 102 | mem->va = NULL; | ||
| 101 | kfree(mem->debugfs_mem); | 103 | kfree(mem->debugfs_mem); |
| 102 | } | 104 | } |
| 103 | 105 | ||
| @@ -838,15 +840,9 @@ void ocrdma_add_port_stats(struct ocrdma_dev *dev) | |||
| 838 | &dev->reset_stats, &ocrdma_dbg_ops)) | 840 | &dev->reset_stats, &ocrdma_dbg_ops)) |
| 839 | goto err; | 841 | goto err; |
| 840 | 842 | ||
| 841 | /* Now create dma_mem for stats mbx command */ | ||
| 842 | if (!ocrdma_alloc_stats_mem(dev)) | ||
| 843 | goto err; | ||
| 844 | |||
| 845 | mutex_init(&dev->stats_lock); | ||
| 846 | 843 | ||
| 847 | return; | 844 | return; |
| 848 | err: | 845 | err: |
| 849 | ocrdma_release_stats_mem(dev); | ||
| 850 | debugfs_remove_recursive(dev->dir); | 846 | debugfs_remove_recursive(dev->dir); |
| 851 | dev->dir = NULL; | 847 | dev->dir = NULL; |
| 852 | } | 848 | } |
| @@ -855,9 +851,7 @@ void ocrdma_rem_port_stats(struct ocrdma_dev *dev) | |||
| 855 | { | 851 | { |
| 856 | if (!dev->dir) | 852 | if (!dev->dir) |
| 857 | return; | 853 | return; |
| 858 | debugfs_remove(dev->dir); | 854 | debugfs_remove_recursive(dev->dir); |
| 859 | mutex_destroy(&dev->stats_lock); | ||
| 860 | ocrdma_release_stats_mem(dev); | ||
| 861 | } | 855 | } |
| 862 | 856 | ||
| 863 | void ocrdma_init_debugfs(void) | 857 | void ocrdma_init_debugfs(void) |
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_stats.h b/drivers/infiniband/hw/ocrdma/ocrdma_stats.h index c9e58d04c7b8..bba1fec4f11f 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 { | |||
| 65 | 65 | ||
| 66 | void ocrdma_rem_debugfs(void); | 66 | void ocrdma_rem_debugfs(void); |
| 67 | void ocrdma_init_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); | ||
| 68 | void ocrdma_rem_port_stats(struct ocrdma_dev *dev); | 70 | void ocrdma_rem_port_stats(struct ocrdma_dev *dev); |
| 69 | void ocrdma_add_port_stats(struct ocrdma_dev *dev); | 71 | void ocrdma_add_port_stats(struct ocrdma_dev *dev); |
| 70 | int ocrdma_pma_counters(struct ocrdma_dev *dev, | 72 | int ocrdma_pma_counters(struct ocrdma_dev *dev, |
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c index d4c687b548d8..37620b4baafb 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | |||
| @@ -125,8 +125,8 @@ int ocrdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr, | |||
| 125 | IB_DEVICE_SYS_IMAGE_GUID | | 125 | IB_DEVICE_SYS_IMAGE_GUID | |
| 126 | IB_DEVICE_LOCAL_DMA_LKEY | | 126 | IB_DEVICE_LOCAL_DMA_LKEY | |
| 127 | IB_DEVICE_MEM_MGT_EXTENSIONS; | 127 | IB_DEVICE_MEM_MGT_EXTENSIONS; |
| 128 | attr->max_sge = min(dev->attr.max_send_sge, dev->attr.max_srq_sge); | 128 | attr->max_sge = dev->attr.max_send_sge; |
| 129 | attr->max_sge_rd = 0; | 129 | attr->max_sge_rd = attr->max_sge; |
| 130 | attr->max_cq = dev->attr.max_cq; | 130 | attr->max_cq = dev->attr.max_cq; |
| 131 | attr->max_cqe = dev->attr.max_cqe; | 131 | attr->max_cqe = dev->attr.max_cqe; |
| 132 | attr->max_mr = dev->attr.max_mr; | 132 | attr->max_mr = dev->attr.max_mr; |
| @@ -2726,8 +2726,7 @@ static int ocrdma_update_ud_rcqe(struct ib_wc *ibwc, struct ocrdma_cqe *cqe) | |||
| 2726 | OCRDMA_CQE_UD_STATUS_MASK) >> OCRDMA_CQE_UD_STATUS_SHIFT; | 2726 | OCRDMA_CQE_UD_STATUS_MASK) >> OCRDMA_CQE_UD_STATUS_SHIFT; |
| 2727 | ibwc->src_qp = le32_to_cpu(cqe->flags_status_srcqpn) & | 2727 | ibwc->src_qp = le32_to_cpu(cqe->flags_status_srcqpn) & |
| 2728 | OCRDMA_CQE_SRCQP_MASK; | 2728 | OCRDMA_CQE_SRCQP_MASK; |
| 2729 | ibwc->pkey_index = le32_to_cpu(cqe->ud.rxlen_pkey) & | 2729 | ibwc->pkey_index = 0; |
| 2730 | OCRDMA_CQE_PKEY_MASK; | ||
| 2731 | ibwc->wc_flags = IB_WC_GRH; | 2730 | ibwc->wc_flags = IB_WC_GRH; |
| 2732 | ibwc->byte_len = (le32_to_cpu(cqe->ud.rxlen_pkey) >> | 2731 | ibwc->byte_len = (le32_to_cpu(cqe->ud.rxlen_pkey) >> |
| 2733 | OCRDMA_CQE_UD_XFER_LEN_SHIFT); | 2732 | OCRDMA_CQE_UD_XFER_LEN_SHIFT); |
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c index 5ea0c14070d1..fa9c42ff1fb0 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c | |||
| @@ -245,8 +245,6 @@ static void ipoib_ib_handle_rx_wc(struct net_device *dev, struct ib_wc *wc) | |||
| 245 | skb_reset_mac_header(skb); | 245 | skb_reset_mac_header(skb); |
| 246 | skb_pull(skb, IPOIB_ENCAP_LEN); | 246 | skb_pull(skb, IPOIB_ENCAP_LEN); |
| 247 | 247 | ||
| 248 | skb->truesize = SKB_TRUESIZE(skb->len); | ||
| 249 | |||
| 250 | ++dev->stats.rx_packets; | 248 | ++dev->stats.rx_packets; |
| 251 | dev->stats.rx_bytes += skb->len; | 249 | dev->stats.rx_bytes += skb->len; |
| 252 | 250 | ||
