Skip to content

Commit 23852be

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 is quite a small cycle, no major series stands out. The HNS and rxe drivers saw the most activity this cycle, with rxe being broken for a good chunk of time. The significant deleted line count is due to a SPDX cleanup series. Summary: - Various cleanup and small features for rtrs - kmap_local_page() conversions - Driver updates and fixes for: efa, rxe, mlx5, hfi1, qed, hns - Cache the IB subnet prefix - Rework how CRC is calcuated in rxe - Clean reference counting in iwpm's netlink - Pull object allocation and lifecycle for user QPs to the uverbs core code - Several small hns features and continued general code cleanups - Fix the scatterlist confusion of orig_nents/nents introduced in an earlier patch creating the append operation" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (90 commits) RDMA/mlx5: Relax DCS QP creation checks RDMA/hns: Delete unnecessary blank lines. RDMA/hns: Encapsulate the qp db as a function RDMA/hns: Adjust the order in which irq are requested and enabled RDMA/hns: Remove RST2RST error prints for hw v1 RDMA/hns: Remove dqpn filling when modify qp from Init to Init RDMA/hns: Fix QP's resp incomplete assignment RDMA/hns: Fix query destination qpn RDMA/hfi1: Convert to SPDX identifier IB/rdmavt: Convert to SPDX identifier RDMA/hns: Bugfix for incorrect association between dip_idx and dgid RDMA/hns: Bugfix for the missing assignment for dip_idx RDMA/hns: Bugfix for data type of dip_idx RDMA/hns: Fix incorrect lsn field RDMA/irdma: Remove the repeated declaration RDMA/core/sa_query: Retry SA queries RDMA: Use the sg_table directly and remove the opencoded version from umem lib/scatterlist: Fix wrong update of orig_nents lib/scatterlist: Provide a dedicated function to support table append RDMA/hns: Delete unused hns bitmap interface ...
2 parents 83ec916 + 6a21743 commit 23852be

File tree

217 files changed

+2069
-6603
lines changed

Some content is hidden

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

217 files changed

+2069
-6603
lines changed

Documentation/admin-guide/devices.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2993,10 +2993,10 @@
29932993
65 = /dev/infiniband/issm1 Second InfiniBand IsSM device
29942994
...
29952995
127 = /dev/infiniband/issm63 63rd InfiniBand IsSM device
2996-
128 = /dev/infiniband/uverbs0 First InfiniBand verbs device
2997-
129 = /dev/infiniband/uverbs1 Second InfiniBand verbs device
2996+
192 = /dev/infiniband/uverbs0 First InfiniBand verbs device
2997+
193 = /dev/infiniband/uverbs1 Second InfiniBand verbs device
29982998
...
2999-
159 = /dev/infiniband/uverbs31 31st InfiniBand verbs device
2999+
223 = /dev/infiniband/uverbs31 31st InfiniBand verbs device
30003000

30013001
232 char Biometric Devices
30023002
0 = /dev/biometric/sensor0/fingerprint first fingerprint sensor on first device

MAINTAINERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8446,7 +8446,7 @@ F: drivers/crypto/hisilicon/sgl.c
84468446
F: drivers/crypto/hisilicon/zip/
84478447

84488448
HISILICON ROCE DRIVER
8449-
M: Lijun Ou <oulijun@huawei.com>
8449+
M: Wenpeng Liang <liangwenpeng@huawei.com>
84508450
M: Weihang Li <[email protected]>
84518451
84528452
S: Maintained

drivers/gpu/drm/drm_prime.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -807,8 +807,8 @@ struct sg_table *drm_prime_pages_to_sg(struct drm_device *dev,
807807
struct page **pages, unsigned int nr_pages)
808808
{
809809
struct sg_table *sg;
810-
struct scatterlist *sge;
811810
size_t max_segment = 0;
811+
int err;
812812

813813
sg = kmalloc(sizeof(struct sg_table), GFP_KERNEL);
814814
if (!sg)
@@ -818,13 +818,12 @@ struct sg_table *drm_prime_pages_to_sg(struct drm_device *dev,
818818
max_segment = dma_max_mapping_size(dev->dev);
819819
if (max_segment == 0)
820820
max_segment = UINT_MAX;
821-
sge = __sg_alloc_table_from_pages(sg, pages, nr_pages, 0,
822-
nr_pages << PAGE_SHIFT,
823-
max_segment,
824-
NULL, 0, GFP_KERNEL);
825-
if (IS_ERR(sge)) {
821+
err = sg_alloc_table_from_pages_segment(sg, pages, nr_pages, 0,
822+
nr_pages << PAGE_SHIFT,
823+
max_segment, GFP_KERNEL);
824+
if (err) {
826825
kfree(sg);
827-
sg = ERR_CAST(sge);
826+
sg = ERR_PTR(err);
828827
}
829828
return sg;
830829
}

drivers/gpu/drm/i915/gem/i915_gem_ttm.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,6 @@ i915_ttm_region(struct ttm_device *bdev, int ttm_mem_type)
382382
static struct sg_table *i915_ttm_tt_get_st(struct ttm_tt *ttm)
383383
{
384384
struct i915_ttm_tt *i915_tt = container_of(ttm, typeof(*i915_tt), ttm);
385-
struct scatterlist *sg;
386385
struct sg_table *st;
387386
int ret;
388387

@@ -393,13 +392,13 @@ static struct sg_table *i915_ttm_tt_get_st(struct ttm_tt *ttm)
393392
if (!st)
394393
return ERR_PTR(-ENOMEM);
395394

396-
sg = __sg_alloc_table_from_pages
397-
(st, ttm->pages, ttm->num_pages, 0,
398-
(unsigned long)ttm->num_pages << PAGE_SHIFT,
399-
i915_sg_segment_size(), NULL, 0, GFP_KERNEL);
400-
if (IS_ERR(sg)) {
395+
ret = sg_alloc_table_from_pages_segment(st,
396+
ttm->pages, ttm->num_pages,
397+
0, (unsigned long)ttm->num_pages << PAGE_SHIFT,
398+
i915_sg_segment_size(), GFP_KERNEL);
399+
if (ret) {
401400
kfree(st);
402-
return ERR_CAST(sg);
401+
return ERR_PTR(ret);
403402
}
404403

405404
ret = dma_map_sgtable(i915_tt->dev, st, DMA_BIDIRECTIONAL, 0);

drivers/gpu/drm/i915/gem/i915_gem_userptr.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,6 @@ static int i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
131131
unsigned int max_segment = i915_sg_segment_size();
132132
struct sg_table *st;
133133
unsigned int sg_page_sizes;
134-
struct scatterlist *sg;
135134
struct page **pvec;
136135
int ret;
137136

@@ -148,13 +147,11 @@ static int i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
148147
pvec = obj->userptr.pvec;
149148

150149
alloc_table:
151-
sg = __sg_alloc_table_from_pages(st, pvec, num_pages, 0,
152-
num_pages << PAGE_SHIFT, max_segment,
153-
NULL, 0, GFP_KERNEL);
154-
if (IS_ERR(sg)) {
155-
ret = PTR_ERR(sg);
150+
ret = sg_alloc_table_from_pages_segment(st, pvec, num_pages, 0,
151+
num_pages << PAGE_SHIFT,
152+
max_segment, GFP_KERNEL);
153+
if (ret)
156154
goto err;
157-
}
158155

159156
ret = i915_gem_gtt_prepare_pages(obj, st);
160157
if (ret) {

drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,6 @@ static int vmw_ttm_map_dma(struct vmw_ttm_tt *vmw_tt)
328328
int ret = 0;
329329
static size_t sgl_size;
330330
static size_t sgt_size;
331-
struct scatterlist *sg;
332331

333332
if (vmw_tt->mapped)
334333
return 0;
@@ -351,15 +350,12 @@ static int vmw_ttm_map_dma(struct vmw_ttm_tt *vmw_tt)
351350
if (unlikely(ret != 0))
352351
return ret;
353352

354-
sg = __sg_alloc_table_from_pages(&vmw_tt->sgt, vsgt->pages,
355-
vsgt->num_pages, 0,
356-
(unsigned long) vsgt->num_pages << PAGE_SHIFT,
357-
dma_get_max_seg_size(dev_priv->drm.dev),
358-
NULL, 0, GFP_KERNEL);
359-
if (IS_ERR(sg)) {
360-
ret = PTR_ERR(sg);
353+
ret = sg_alloc_table_from_pages_segment(
354+
&vmw_tt->sgt, vsgt->pages, vsgt->num_pages, 0,
355+
(unsigned long)vsgt->num_pages << PAGE_SHIFT,
356+
dma_get_max_seg_size(dev_priv->drm.dev), GFP_KERNEL);
357+
if (ret)
361358
goto out_sg_alloc_fail;
362-
}
363359

364360
if (vsgt->num_pages > vmw_tt->sgt.orig_nents) {
365361
uint64_t over_alloc =

drivers/infiniband/core/cache.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,7 +1429,7 @@ int rdma_read_gid_l2_fields(const struct ib_gid_attr *attr,
14291429
EXPORT_SYMBOL(rdma_read_gid_l2_fields);
14301430

14311431
static int config_non_roce_gid_cache(struct ib_device *device,
1432-
u32 port, int gid_tbl_len)
1432+
u32 port, struct ib_port_attr *tprops)
14331433
{
14341434
struct ib_gid_attr gid_attr = {};
14351435
struct ib_gid_table *table;
@@ -1441,7 +1441,7 @@ static int config_non_roce_gid_cache(struct ib_device *device,
14411441
table = rdma_gid_table(device, port);
14421442

14431443
mutex_lock(&table->lock);
1444-
for (i = 0; i < gid_tbl_len; ++i) {
1444+
for (i = 0; i < tprops->gid_tbl_len; ++i) {
14451445
if (!device->ops.query_gid)
14461446
continue;
14471447
ret = device->ops.query_gid(device, port, i, &gid_attr.gid);
@@ -1452,6 +1452,8 @@ static int config_non_roce_gid_cache(struct ib_device *device,
14521452
goto err;
14531453
}
14541454
gid_attr.index = i;
1455+
tprops->subnet_prefix =
1456+
be64_to_cpu(gid_attr.gid.global.subnet_prefix);
14551457
add_modify_gid(table, &gid_attr);
14561458
}
14571459
err:
@@ -1484,7 +1486,7 @@ ib_cache_update(struct ib_device *device, u32 port, bool update_gids,
14841486

14851487
if (!rdma_protocol_roce(device, port) && update_gids) {
14861488
ret = config_non_roce_gid_cache(device, port,
1487-
tprops->gid_tbl_len);
1489+
tprops);
14881490
if (ret)
14891491
goto err;
14901492
}
@@ -1619,8 +1621,6 @@ int ib_cache_setup_one(struct ib_device *device)
16191621
u32 p;
16201622
int err;
16211623

1622-
rwlock_init(&device->cache_lock);
1623-
16241624
err = gid_table_setup_one(device);
16251625
if (err)
16261626
return err;

drivers/infiniband/core/cma.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3132,6 +3132,9 @@ int rdma_resolve_route(struct rdma_cm_id *id, unsigned long timeout_ms)
31323132
struct rdma_id_private *id_priv;
31333133
int ret;
31343134

3135+
if (!timeout_ms)
3136+
return -EINVAL;
3137+
31353138
id_priv = container_of(id, struct rdma_id_private, id);
31363139
if (!cma_comp_exch(id_priv, RDMA_CM_ADDR_RESOLVED, RDMA_CM_ROUTE_QUERY))
31373140
return -EINVAL;

drivers/infiniband/core/core_priv.h

Lines changed: 7 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -316,45 +316,13 @@ struct ib_device *ib_device_get_by_index(const struct net *net, u32 index);
316316
void nldev_init(void);
317317
void nldev_exit(void);
318318

319-
static inline struct ib_qp *
320-
_ib_create_qp(struct ib_device *dev, struct ib_pd *pd,
321-
struct ib_qp_init_attr *attr, struct ib_udata *udata,
322-
struct ib_uqp_object *uobj, const char *caller)
323-
{
324-
struct ib_qp *qp;
325-
326-
if (!dev->ops.create_qp)
327-
return ERR_PTR(-EOPNOTSUPP);
328-
329-
qp = dev->ops.create_qp(pd, attr, udata);
330-
if (IS_ERR(qp))
331-
return qp;
332-
333-
qp->device = dev;
334-
qp->pd = pd;
335-
qp->uobject = uobj;
336-
qp->real_qp = qp;
337-
338-
qp->qp_type = attr->qp_type;
339-
qp->rwq_ind_tbl = attr->rwq_ind_tbl;
340-
qp->send_cq = attr->send_cq;
341-
qp->recv_cq = attr->recv_cq;
342-
qp->srq = attr->srq;
343-
qp->rwq_ind_tbl = attr->rwq_ind_tbl;
344-
qp->event_handler = attr->event_handler;
345-
qp->port = attr->port_num;
346-
347-
atomic_set(&qp->usecnt, 0);
348-
spin_lock_init(&qp->mr_lock);
349-
INIT_LIST_HEAD(&qp->rdma_mrs);
350-
INIT_LIST_HEAD(&qp->sig_mrs);
351-
352-
rdma_restrack_new(&qp->res, RDMA_RESTRACK_QP);
353-
WARN_ONCE(!udata && !caller, "Missing kernel QP owner");
354-
rdma_restrack_set_name(&qp->res, udata ? NULL : caller);
355-
rdma_restrack_add(&qp->res);
356-
return qp;
357-
}
319+
struct ib_qp *ib_create_qp_user(struct ib_device *dev, struct ib_pd *pd,
320+
struct ib_qp_init_attr *attr,
321+
struct ib_udata *udata,
322+
struct ib_uqp_object *uobj, const char *caller);
323+
324+
void ib_qp_usecnt_inc(struct ib_qp *qp);
325+
void ib_qp_usecnt_dec(struct ib_qp *qp);
358326

359327
struct rdma_dev_addr;
360328
int rdma_resolve_ip_route(struct sockaddr *src_addr,

drivers/infiniband/core/device.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,8 @@ struct ib_device *_ib_alloc_device(size_t size)
607607
for (i = 0; i < ARRAY_SIZE(device->cq_pools); i++)
608608
INIT_LIST_HEAD(&device->cq_pools[i]);
609609

610+
rwlock_init(&device->cache_lock);
611+
610612
device->uverbs_cmd_mask =
611613
BIT_ULL(IB_USER_VERBS_CMD_ALLOC_MW) |
612614
BIT_ULL(IB_USER_VERBS_CMD_ALLOC_PD) |
@@ -2050,7 +2052,6 @@ static int __ib_query_port(struct ib_device *device,
20502052
u32 port_num,
20512053
struct ib_port_attr *port_attr)
20522054
{
2053-
union ib_gid gid = {};
20542055
int err;
20552056

20562057
memset(port_attr, 0, sizeof(*port_attr));
@@ -2063,11 +2064,8 @@ static int __ib_query_port(struct ib_device *device,
20632064
IB_LINK_LAYER_INFINIBAND)
20642065
return 0;
20652066

2066-
err = device->ops.query_gid(device, port_num, 0, &gid);
2067-
if (err)
2068-
return err;
2069-
2070-
port_attr->subnet_prefix = be64_to_cpu(gid.global.subnet_prefix);
2067+
ib_get_cached_subnet_prefix(device, port_num,
2068+
&port_attr->subnet_prefix);
20712069
return 0;
20722070
}
20732071

@@ -2656,6 +2654,7 @@ void ib_set_device_ops(struct ib_device *dev, const struct ib_device_ops *ops)
26562654
SET_DEVICE_OP(dev_ops, get_hw_stats);
26572655
SET_DEVICE_OP(dev_ops, get_link_layer);
26582656
SET_DEVICE_OP(dev_ops, get_netdev);
2657+
SET_DEVICE_OP(dev_ops, get_numa_node);
26592658
SET_DEVICE_OP(dev_ops, get_port_immutable);
26602659
SET_DEVICE_OP(dev_ops, get_vector_affinity);
26612660
SET_DEVICE_OP(dev_ops, get_vf_config);
@@ -2712,6 +2711,7 @@ void ib_set_device_ops(struct ib_device *dev, const struct ib_device_ops *ops)
27122711
SET_OBJ_SIZE(dev_ops, ib_cq);
27132712
SET_OBJ_SIZE(dev_ops, ib_mw);
27142713
SET_OBJ_SIZE(dev_ops, ib_pd);
2714+
SET_OBJ_SIZE(dev_ops, ib_qp);
27152715
SET_OBJ_SIZE(dev_ops, ib_rwq_ind_table);
27162716
SET_OBJ_SIZE(dev_ops, ib_srq);
27172717
SET_OBJ_SIZE(dev_ops, ib_ucontext);

0 commit comments

Comments
 (0)