Commit a8b5f8f2 authored by Linus Torvalds's avatar Linus Torvalds

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

Pull rdma fixes from Jason Gunthorpe:
 "There are a few big regression items from the merge window suggesting
  that people are testing rc1's but not testing the for-next branches:

   - Warnings fixes

   - Crash in hf1 when creating QPs and setting counters

   - Some old mlx4 cards fail to probe due to missing counters

   - Syzkaller crash in the new counters code"

* tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma:
  MAINTAINERS: Update for VMware PVRDMA driver
  RDMA/nldev: Check stat attribute before accessing it
  RDMA/mlx4: Do not fail the registration on port stats
  IB/hfi1: Properly allocate rdma counter desc memory
  RDMA/core: Set send and receive CQ before forwarding to the driver
  RDMA/netlink: Add __maybe_unused to static inline in C file
parents 44791698 df4e6faa
...@@ -20317,7 +20317,8 @@ F: arch/x86/include/asm/vmware.h ...@@ -20317,7 +20317,8 @@ F: arch/x86/include/asm/vmware.h
F: arch/x86/kernel/cpu/vmware.c F: arch/x86/kernel/cpu/vmware.c
VMWARE PVRDMA DRIVER VMWARE PVRDMA DRIVER
M: Adit Ranadive <aditr@vmware.com> M: Bryan Tan <bryantan@vmware.com>
M: Vishnu Dasa <vdasa@vmware.com>
M: VMware PV-Drivers <pv-drivers@vmware.com> M: VMware PV-Drivers <pv-drivers@vmware.com>
L: linux-rdma@vger.kernel.org L: linux-rdma@vger.kernel.org
S: Maintained S: Maintained
......
...@@ -1906,7 +1906,8 @@ static int nldev_stat_set_mode_doit(struct sk_buff *msg, ...@@ -1906,7 +1906,8 @@ static int nldev_stat_set_mode_doit(struct sk_buff *msg,
int ret; int ret;
/* Currently only counter for QP is supported */ /* Currently only counter for QP is supported */
if (nla_get_u32(tb[RDMA_NLDEV_ATTR_STAT_RES]) != RDMA_NLDEV_ATTR_RES_QP) if (!tb[RDMA_NLDEV_ATTR_STAT_RES] ||
nla_get_u32(tb[RDMA_NLDEV_ATTR_STAT_RES]) != RDMA_NLDEV_ATTR_RES_QP)
return -EINVAL; return -EINVAL;
mode = nla_get_u32(tb[RDMA_NLDEV_ATTR_STAT_MODE]); mode = nla_get_u32(tb[RDMA_NLDEV_ATTR_STAT_MODE]);
......
...@@ -1232,6 +1232,9 @@ static struct ib_qp *create_qp(struct ib_device *dev, struct ib_pd *pd, ...@@ -1232,6 +1232,9 @@ static struct ib_qp *create_qp(struct ib_device *dev, struct ib_pd *pd,
INIT_LIST_HEAD(&qp->rdma_mrs); INIT_LIST_HEAD(&qp->rdma_mrs);
INIT_LIST_HEAD(&qp->sig_mrs); INIT_LIST_HEAD(&qp->sig_mrs);
qp->send_cq = attr->send_cq;
qp->recv_cq = attr->recv_cq;
rdma_restrack_new(&qp->res, RDMA_RESTRACK_QP); rdma_restrack_new(&qp->res, RDMA_RESTRACK_QP);
WARN_ONCE(!udata && !caller, "Missing kernel QP owner"); WARN_ONCE(!udata && !caller, "Missing kernel QP owner");
rdma_restrack_set_name(&qp->res, udata ? NULL : caller); rdma_restrack_set_name(&qp->res, udata ? NULL : caller);
......
...@@ -1628,8 +1628,7 @@ static int init_cntr_names(const char *names_in, const size_t names_len, ...@@ -1628,8 +1628,7 @@ static int init_cntr_names(const char *names_in, const size_t names_len,
n++; n++;
names_out = names_out =
kmalloc((n + num_extra_names) * sizeof(struct rdma_stat_desc) + kzalloc((n + num_extra_names) * sizeof(*q) + names_len,
names_len,
GFP_KERNEL); GFP_KERNEL);
if (!names_out) { if (!names_out) {
*num_cntrs = 0; *num_cntrs = 0;
...@@ -1637,7 +1636,7 @@ static int init_cntr_names(const char *names_in, const size_t names_len, ...@@ -1637,7 +1636,7 @@ static int init_cntr_names(const char *names_in, const size_t names_len,
return -ENOMEM; return -ENOMEM;
} }
p = names_out + (n + num_extra_names) * sizeof(struct rdma_stat_desc); p = names_out + (n + num_extra_names) * sizeof(*q);
memcpy(p, names_in, names_len); memcpy(p, names_in, names_len);
q = (struct rdma_stat_desc *)names_out; q = (struct rdma_stat_desc *)names_out;
......
...@@ -2215,6 +2215,11 @@ static const struct ib_device_ops mlx4_ib_hw_stats_ops = { ...@@ -2215,6 +2215,11 @@ static const struct ib_device_ops mlx4_ib_hw_stats_ops = {
.get_hw_stats = mlx4_ib_get_hw_stats, .get_hw_stats = mlx4_ib_get_hw_stats,
}; };
static const struct ib_device_ops mlx4_ib_hw_stats_ops1 = {
.alloc_hw_device_stats = mlx4_ib_alloc_hw_device_stats,
.get_hw_stats = mlx4_ib_get_hw_stats,
};
static int mlx4_ib_alloc_diag_counters(struct mlx4_ib_dev *ibdev) static int mlx4_ib_alloc_diag_counters(struct mlx4_ib_dev *ibdev)
{ {
struct mlx4_ib_diag_counters *diag = ibdev->diag_counters; struct mlx4_ib_diag_counters *diag = ibdev->diag_counters;
...@@ -2227,9 +2232,16 @@ static int mlx4_ib_alloc_diag_counters(struct mlx4_ib_dev *ibdev) ...@@ -2227,9 +2232,16 @@ static int mlx4_ib_alloc_diag_counters(struct mlx4_ib_dev *ibdev)
return 0; return 0;
for (i = 0; i < MLX4_DIAG_COUNTERS_TYPES; i++) { for (i = 0; i < MLX4_DIAG_COUNTERS_TYPES; i++) {
/* i == 1 means we are building port counters */ /*
if (i && !per_port) * i == 1 means we are building port counters, set a different
continue; * stats ops without port stats callback.
*/
if (i && !per_port) {
ib_set_device_ops(&ibdev->ib_dev,
&mlx4_ib_hw_stats_ops1);
return 0;
}
ret = __mlx4_ib_alloc_diag_counters(ibdev, &diag[i].descs, ret = __mlx4_ib_alloc_diag_counters(ibdev, &diag[i].descs,
&diag[i].offset, &diag[i].offset,
......
...@@ -30,7 +30,7 @@ enum rdma_nl_flags { ...@@ -30,7 +30,7 @@ enum rdma_nl_flags {
* constant as well and the compiler checks they are the same. * constant as well and the compiler checks they are the same.
*/ */
#define MODULE_ALIAS_RDMA_NETLINK(_index, _val) \ #define MODULE_ALIAS_RDMA_NETLINK(_index, _val) \
static inline void __chk_##_index(void) \ static inline void __maybe_unused __chk_##_index(void) \
{ \ { \
BUILD_BUG_ON(_index != _val); \ BUILD_BUG_ON(_index != _val); \
} \ } \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment