Skip to content

Commit

Permalink
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/gi…
Browse files Browse the repository at this point in the history
…t/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
  • Loading branch information
torvalds committed Nov 19, 2021
2 parents 4479169 + df4e6fa commit a8b5f8f
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 9 deletions.
3 changes: 2 additions & 1 deletion MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -20317,7 +20317,8 @@ F: arch/x86/include/asm/vmware.h
F: arch/x86/kernel/cpu/vmware.c

VMWARE PVRDMA DRIVER
M: Adit Ranadive <[email protected]>
M: Bryan Tan <[email protected]>
M: Vishnu Dasa <[email protected]>
M: VMware PV-Drivers <[email protected]>
L: [email protected]
S: Maintained
Expand Down
3 changes: 2 additions & 1 deletion drivers/infiniband/core/nldev.c
Original file line number Diff line number Diff line change
Expand Up @@ -1906,7 +1906,8 @@ static int nldev_stat_set_mode_doit(struct sk_buff *msg,
int ret;

/* 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;

mode = nla_get_u32(tb[RDMA_NLDEV_ATTR_STAT_MODE]);
Expand Down
3 changes: 3 additions & 0 deletions drivers/infiniband/core/verbs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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->sig_mrs);

qp->send_cq = attr->send_cq;
qp->recv_cq = attr->recv_cq;

rdma_restrack_new(&qp->res, RDMA_RESTRACK_QP);
WARN_ONCE(!udata && !caller, "Missing kernel QP owner");
rdma_restrack_set_name(&qp->res, udata ? NULL : caller);
Expand Down
5 changes: 2 additions & 3 deletions drivers/infiniband/hw/hfi1/verbs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1628,16 +1628,15 @@ static int init_cntr_names(const char *names_in, const size_t names_len,
n++;

names_out =
kmalloc((n + num_extra_names) * sizeof(struct rdma_stat_desc) +
names_len,
kzalloc((n + num_extra_names) * sizeof(*q) + names_len,
GFP_KERNEL);
if (!names_out) {
*num_cntrs = 0;
*cntr_descs = NULL;
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);

q = (struct rdma_stat_desc *)names_out;
Expand Down
18 changes: 15 additions & 3 deletions drivers/infiniband/hw/mlx4/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2215,6 +2215,11 @@ static const struct ib_device_ops mlx4_ib_hw_stats_ops = {
.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)
{
struct mlx4_ib_diag_counters *diag = ibdev->diag_counters;
Expand All @@ -2227,9 +2232,16 @@ static int mlx4_ib_alloc_diag_counters(struct mlx4_ib_dev *ibdev)
return 0;

for (i = 0; i < MLX4_DIAG_COUNTERS_TYPES; i++) {
/* i == 1 means we are building port counters */
if (i && !per_port)
continue;
/*
* i == 1 means we are building port counters, set a different
* 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,
&diag[i].offset,
Expand Down
2 changes: 1 addition & 1 deletion include/rdma/rdma_netlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ enum rdma_nl_flags {
* constant as well and the compiler checks they are the same.
*/
#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); \
} \
Expand Down

0 comments on commit a8b5f8f

Please sign in to comment.