Skip to content

Commit 6f3f374

Browse files
committed
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
Pull rdma fixes from Jason Gunthorpe: "A few more merge window regressions that didn't make rc1: - New validation in the DMA layer triggers wrong use of the DMA layer in rxe, siw and rdmavt - Accidental change of a hypervisor facing ABI when widening the port speed u8 to u16 in vmw_pvrdma - Memory leak on error unwind in SRP target" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: RDMA/srpt: Fix typo in srpt_unregister_mad_agent docstring RDMA/vmw_pvrdma: Fix the active_speed and phys_state value IB/srpt: Fix memory leak in srpt_add_one RDMA: Fix software RDMA drivers for dma mapping error
2 parents cf26c71 + 21fcdee commit 6f3f374

5 files changed

Lines changed: 24 additions & 11 deletions

File tree

drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ struct pvrdma_port_attr {
176176
u8 subnet_timeout;
177177
u8 init_type_reply;
178178
u8 active_width;
179-
u16 active_speed;
179+
u8 active_speed;
180180
u8 phys_state;
181181
u8 reserved[2];
182182
};

drivers/infiniband/sw/rdmavt/vt.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,7 @@ static noinline int check_support(struct rvt_dev_info *rdi, int verb)
524524
int rvt_register_device(struct rvt_dev_info *rdi)
525525
{
526526
int ret = 0, i;
527+
u64 dma_mask;
527528

528529
if (!rdi)
529530
return -EINVAL;
@@ -580,8 +581,10 @@ int rvt_register_device(struct rvt_dev_info *rdi)
580581

581582
/* DMA Operations */
582583
rdi->ibdev.dev.dma_parms = rdi->ibdev.dev.parent->dma_parms;
583-
dma_set_coherent_mask(&rdi->ibdev.dev,
584-
rdi->ibdev.dev.parent->coherent_dma_mask);
584+
dma_mask = IS_ENABLED(CONFIG_64BIT) ? DMA_BIT_MASK(64) : DMA_BIT_MASK(32);
585+
ret = dma_coerce_mask_and_coherent(&rdi->ibdev.dev, dma_mask);
586+
if (ret)
587+
goto bail_wss;
585588

586589
/* Protection Domain */
587590
spin_lock_init(&rdi->n_pds_lock);

drivers/infiniband/sw/rxe/rxe_verbs.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1118,6 +1118,7 @@ int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name)
11181118
int err;
11191119
struct ib_device *dev = &rxe->ib_dev;
11201120
struct crypto_shash *tfm;
1121+
u64 dma_mask;
11211122

11221123
strlcpy(dev->node_desc, "rxe", sizeof(dev->node_desc));
11231124

@@ -1130,7 +1131,10 @@ int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name)
11301131
rxe->ndev->dev_addr);
11311132
dev->dev.dma_parms = &rxe->dma_parms;
11321133
dma_set_max_seg_size(&dev->dev, UINT_MAX);
1133-
dma_set_coherent_mask(&dev->dev, dma_get_required_mask(&dev->dev));
1134+
dma_mask = IS_ENABLED(CONFIG_64BIT) ? DMA_BIT_MASK(64) : DMA_BIT_MASK(32);
1135+
err = dma_coerce_mask_and_coherent(&dev->dev, dma_mask);
1136+
if (err)
1137+
return err;
11341138

11351139
dev->uverbs_cmd_mask = BIT_ULL(IB_USER_VERBS_CMD_GET_CONTEXT)
11361140
| BIT_ULL(IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL)

drivers/infiniband/sw/siw/siw_main.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ static struct siw_device *siw_device_create(struct net_device *netdev)
306306
struct siw_device *sdev = NULL;
307307
struct ib_device *base_dev;
308308
struct device *parent = netdev->dev.parent;
309+
u64 dma_mask;
309310
int rv;
310311

311312
if (!parent) {
@@ -384,8 +385,10 @@ static struct siw_device *siw_device_create(struct net_device *netdev)
384385
base_dev->dev.parent = parent;
385386
base_dev->dev.dma_parms = &sdev->dma_parms;
386387
dma_set_max_seg_size(&base_dev->dev, UINT_MAX);
387-
dma_set_coherent_mask(&base_dev->dev,
388-
dma_get_required_mask(&base_dev->dev));
388+
dma_mask = IS_ENABLED(CONFIG_64BIT) ? DMA_BIT_MASK(64) : DMA_BIT_MASK(32);
389+
if (dma_coerce_mask_and_coherent(&base_dev->dev, dma_mask))
390+
goto error;
391+
389392
base_dev->num_comp_vectors = num_possible_cpus();
390393

391394
xa_init_flags(&sdev->qp_xa, XA_FLAGS_ALLOC1);

drivers/infiniband/ulp/srpt/ib_srpt.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -622,18 +622,19 @@ static int srpt_refresh_port(struct srpt_port *sport)
622622
/**
623623
* srpt_unregister_mad_agent - unregister MAD callback functions
624624
* @sdev: SRPT HCA pointer.
625+
* @port_cnt: number of ports with registered MAD
625626
*
626627
* Note: It is safe to call this function more than once for the same device.
627628
*/
628-
static void srpt_unregister_mad_agent(struct srpt_device *sdev)
629+
static void srpt_unregister_mad_agent(struct srpt_device *sdev, int port_cnt)
629630
{
630631
struct ib_port_modify port_modify = {
631632
.clr_port_cap_mask = IB_PORT_DEVICE_MGMT_SUP,
632633
};
633634
struct srpt_port *sport;
634635
int i;
635636

636-
for (i = 1; i <= sdev->device->phys_port_cnt; i++) {
637+
for (i = 1; i <= port_cnt; i++) {
637638
sport = &sdev->port[i - 1];
638639
WARN_ON(sport->port != i);
639640
if (sport->mad_agent) {
@@ -3185,7 +3186,8 @@ static int srpt_add_one(struct ib_device *device)
31853186
if (ret) {
31863187
pr_err("MAD registration failed for %s-%d.\n",
31873188
dev_name(&sdev->device->dev), i);
3188-
goto err_event;
3189+
i--;
3190+
goto err_port;
31893191
}
31903192
}
31913193

@@ -3197,7 +3199,8 @@ static int srpt_add_one(struct ib_device *device)
31973199
pr_debug("added %s.\n", dev_name(&device->dev));
31983200
return 0;
31993201

3200-
err_event:
3202+
err_port:
3203+
srpt_unregister_mad_agent(sdev, i);
32013204
ib_unregister_event_handler(&sdev->event_handler);
32023205
err_cm:
32033206
if (sdev->cm_id)
@@ -3221,7 +3224,7 @@ static void srpt_remove_one(struct ib_device *device, void *client_data)
32213224
struct srpt_device *sdev = client_data;
32223225
int i;
32233226

3224-
srpt_unregister_mad_agent(sdev);
3227+
srpt_unregister_mad_agent(sdev, sdev->device->phys_port_cnt);
32253228

32263229
ib_unregister_event_handler(&sdev->event_handler);
32273230

0 commit comments

Comments
 (0)