Skip to content

Commit 55aa394

Browse files
committed
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
Pull rdma updates from Jason Gunthorpe: "This has another new RDMA driver 'bng_en' for latest generation Broadcom NICs. There might be one more new driver still to come. Otherwise it is a fairly quite cycle. Summary: - Minor driver bug fixes and updates to cxgb4, rxe, rdmavt, bnxt_re, mlx5 - Many bug fix patches for irdma - WQ_PERCPU annotations and system_dfl_wq changes - Improved mlx5 support for "other eswitches" and multiple PFs - 1600Gbps link speed reporting support. Four Digits Now! - New driver bng_en for latest generation Broadcom NICs - Bonding support for hns - Adjust mlx5's hmm based ODP to work with the very large address space created by the new 5 level paging default on x86 - Lockdep fixups in rxe and siw" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (65 commits) RDMA/rxe: reclassify sockets in order to avoid false positives from lockdep RDMA/siw: reclassify sockets in order to avoid false positives from lockdep RDMA/bng_re: Remove prefetch instruction RDMA/core: Reduce cond_resched() frequency in __ib_umem_release RDMA/irdma: Fix SRQ shadow area address initialization RDMA/irdma: Remove doorbell elision logic RDMA/irdma: Do not set IBK_LOCAL_DMA_LKEY for GEN3+ RDMA/irdma: Do not directly rely on IB_PD_UNSAFE_GLOBAL_RKEY RDMA/irdma: Add missing mutex destroy RDMA/irdma: Fix SIGBUS in AEQ destroy RDMA/irdma: Add a missing kfree of struct irdma_pci_f for GEN2 RDMA/irdma: Fix data race in irdma_free_pble RDMA/irdma: Fix data race in irdma_sc_ccq_arm RDMA/mlx5: Add support for 1600_8x lane speed RDMA/core: Add new IB rate for XDR (8x) support IB/mlx5: Reduce IMR KSM size when 5-level paging is enabled RDMA/bnxt_re: Pass correct flag for dma mr creation RDMA/bnxt_re: Fix the inline size for GenP7 devices RDMA/hns: Support reset recovery for bond RDMA/hns: Support link state reporting for bond ...
2 parents 056daec + 80a85a7 commit 55aa394

89 files changed

Lines changed: 5064 additions & 471 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

MAINTAINERS

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5243,6 +5243,13 @@ W: http://www.broadcom.com
52435243
F: drivers/infiniband/hw/bnxt_re/
52445244
F: include/uapi/rdma/bnxt_re-abi.h
52455245

5246+
BROADCOM 800 GIGABIT ROCE DRIVER
5247+
M: Siva Reddy Kallam <siva.kallam@broadcom.com>
5248+
L: linux-rdma@vger.kernel.org
5249+
S: Supported
5250+
W: http://www.broadcom.com
5251+
F: drivers/infiniband/hw/bng_re/
5252+
52465253
BROADCOM NVRAM DRIVER
52475254
M: Rafał Miłecki <zajec5@gmail.com>
52485255
L: linux-mips@vger.kernel.org

drivers/infiniband/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ config INFINIBAND_VIRT_DMA
8080
if INFINIBAND_USER_ACCESS || !INFINIBAND_USER_ACCESS
8181
if !UML
8282
source "drivers/infiniband/hw/bnxt_re/Kconfig"
83+
source "drivers/infiniband/hw/bng_re/Kconfig"
8384
source "drivers/infiniband/hw/cxgb4/Kconfig"
8485
source "drivers/infiniband/hw/efa/Kconfig"
8586
source "drivers/infiniband/hw/erdma/Kconfig"

drivers/infiniband/core/cm.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ MODULE_AUTHOR("Sean Hefty");
3434
MODULE_DESCRIPTION("InfiniBand CM");
3535
MODULE_LICENSE("Dual BSD/GPL");
3636

37-
#define CM_DESTROY_ID_WAIT_TIMEOUT 10000 /* msecs */
3837
#define CM_DIRECT_RETRY_CTX ((void *) 1UL)
3938
#define CM_MRA_SETTING 24 /* 4.096us * 2^24 = ~68.7 seconds */
4039

@@ -1057,6 +1056,7 @@ static void cm_destroy_id(struct ib_cm_id *cm_id, int err)
10571056
{
10581057
struct cm_id_private *cm_id_priv;
10591058
enum ib_cm_state old_state;
1059+
unsigned long timeout;
10601060
struct cm_work *work;
10611061
int ret;
10621062

@@ -1167,10 +1167,9 @@ static void cm_destroy_id(struct ib_cm_id *cm_id, int err)
11671167

11681168
xa_erase(&cm.local_id_table, cm_local_id(cm_id->local_id));
11691169
cm_deref_id(cm_id_priv);
1170+
timeout = msecs_to_jiffies((cm_id_priv->max_cm_retries * cm_id_priv->timeout_ms * 5) / 4);
11701171
do {
1171-
ret = wait_for_completion_timeout(&cm_id_priv->comp,
1172-
msecs_to_jiffies(
1173-
CM_DESTROY_ID_WAIT_TIMEOUT));
1172+
ret = wait_for_completion_timeout(&cm_id_priv->comp, timeout);
11741173
if (!ret) /* timeout happened */
11751174
cm_destroy_id_wait_timeout(cm_id, old_state);
11761175
} while (!ret);
@@ -4518,7 +4517,7 @@ static int __init ib_cm_init(void)
45184517
get_random_bytes(&cm.random_id_operand, sizeof cm.random_id_operand);
45194518
INIT_LIST_HEAD(&cm.timewait_list);
45204519

4521-
cm.wq = alloc_workqueue("ib_cm", 0, 1);
4520+
cm.wq = alloc_workqueue("ib_cm", WQ_PERCPU, 1);
45224521
if (!cm.wq) {
45234522
ret = -ENOMEM;
45244523
goto error2;

drivers/infiniband/core/cma.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4475,6 +4475,8 @@ int rdma_connect_locked(struct rdma_cm_id *id,
44754475
container_of(id, struct rdma_id_private, id);
44764476
int ret;
44774477

4478+
lockdep_assert_held(&id_priv->handler_mutex);
4479+
44784480
if (!cma_comp_exch(id_priv, RDMA_CM_ROUTE_RESOLVED, RDMA_CM_CONNECT))
44794481
return -EINVAL;
44804482

drivers/infiniband/core/device.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3021,7 +3021,7 @@ static int __init ib_core_init(void)
30213021
{
30223022
int ret = -ENOMEM;
30233023

3024-
ib_wq = alloc_workqueue("infiniband", 0, 0);
3024+
ib_wq = alloc_workqueue("infiniband", WQ_PERCPU, 0);
30253025
if (!ib_wq)
30263026
return -ENOMEM;
30273027

@@ -3031,7 +3031,7 @@ static int __init ib_core_init(void)
30313031
goto err;
30323032

30333033
ib_comp_wq = alloc_workqueue("ib-comp-wq",
3034-
WQ_HIGHPRI | WQ_MEM_RECLAIM | WQ_SYSFS, 0);
3034+
WQ_HIGHPRI | WQ_MEM_RECLAIM | WQ_SYSFS | WQ_PERCPU, 0);
30353035
if (!ib_comp_wq)
30363036
goto err_unbound;
30373037

drivers/infiniband/core/restrack.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ void rdma_restrack_new(struct rdma_restrack_entry *res,
175175
EXPORT_SYMBOL(rdma_restrack_new);
176176

177177
/**
178-
* rdma_restrack_add() - add object to the reource tracking database
178+
* rdma_restrack_add() - add object to the resource tracking database
179179
* @res: resource entry
180180
*/
181181
void rdma_restrack_add(struct rdma_restrack_entry *res)
@@ -277,7 +277,7 @@ int rdma_restrack_put(struct rdma_restrack_entry *res)
277277
EXPORT_SYMBOL(rdma_restrack_put);
278278

279279
/**
280-
* rdma_restrack_del() - delete object from the reource tracking database
280+
* rdma_restrack_del() - delete object from the resource tracking database
281281
* @res: resource entry
282282
*/
283283
void rdma_restrack_del(struct rdma_restrack_entry *res)

drivers/infiniband/core/ucma.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ static int ucma_event_handler(struct rdma_cm_id *cm_id,
366366
if (event->event == RDMA_CM_EVENT_DEVICE_REMOVAL) {
367367
xa_lock(&ctx_table);
368368
if (xa_load(&ctx_table, ctx->id) == ctx)
369-
queue_work(system_unbound_wq, &ctx->close_work);
369+
queue_work(system_dfl_wq, &ctx->close_work);
370370
xa_unlock(&ctx_table);
371371
}
372372
return 0;

drivers/infiniband/core/umem.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545

4646
#include "uverbs.h"
4747

48+
#define RESCHED_LOOP_CNT_THRESHOLD 0x1000
49+
4850
static void __ib_umem_release(struct ib_device *dev, struct ib_umem *umem, int dirty)
4951
{
5052
bool make_dirty = umem->writable && dirty;
@@ -55,10 +57,14 @@ static void __ib_umem_release(struct ib_device *dev, struct ib_umem *umem, int d
5557
ib_dma_unmap_sgtable_attrs(dev, &umem->sgt_append.sgt,
5658
DMA_BIDIRECTIONAL, 0);
5759

58-
for_each_sgtable_sg(&umem->sgt_append.sgt, sg, i)
60+
for_each_sgtable_sg(&umem->sgt_append.sgt, sg, i) {
5961
unpin_user_page_range_dirty_lock(sg_page(sg),
6062
DIV_ROUND_UP(sg->length, PAGE_SIZE), make_dirty);
6163

64+
if (i && !(i % RESCHED_LOOP_CNT_THRESHOLD))
65+
cond_resched();
66+
}
67+
6268
sg_free_append_table(&umem->sgt_append);
6369
}
6470

drivers/infiniband/core/verbs.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ __attribute_const__ int ib_rate_to_mult(enum ib_rate rate)
148148
case IB_RATE_400_GBPS: return 160;
149149
case IB_RATE_600_GBPS: return 240;
150150
case IB_RATE_800_GBPS: return 320;
151+
case IB_RATE_1600_GBPS: return 640;
151152
default: return -1;
152153
}
153154
}
@@ -178,6 +179,7 @@ __attribute_const__ enum ib_rate mult_to_ib_rate(int mult)
178179
case 160: return IB_RATE_400_GBPS;
179180
case 240: return IB_RATE_600_GBPS;
180181
case 320: return IB_RATE_800_GBPS;
182+
case 640: return IB_RATE_1600_GBPS;
181183
default: return IB_RATE_PORT_CURRENT;
182184
}
183185
}
@@ -208,6 +210,7 @@ __attribute_const__ int ib_rate_to_mbps(enum ib_rate rate)
208210
case IB_RATE_400_GBPS: return 425000;
209211
case IB_RATE_600_GBPS: return 637500;
210212
case IB_RATE_800_GBPS: return 850000;
213+
case IB_RATE_1600_GBPS: return 1700000;
211214
default: return -1;
212215
}
213216
}

drivers/infiniband/hw/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@ obj-$(CONFIG_INFINIBAND_HFI1) += hfi1/
1313
obj-$(CONFIG_INFINIBAND_HNS_HIP08) += hns/
1414
obj-$(CONFIG_INFINIBAND_QEDR) += qedr/
1515
obj-$(CONFIG_INFINIBAND_BNXT_RE) += bnxt_re/
16+
obj-$(CONFIG_INFINIBAND_BNG_RE) += bng_re/
1617
obj-$(CONFIG_INFINIBAND_ERDMA) += erdma/
1718
obj-$(CONFIG_INFINIBAND_IONIC) += ionic/

0 commit comments

Comments
 (0)