diff options
author | David S. Miller <davem@davemloft.net> | 2018-08-02 13:55:32 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-08-02 13:55:32 -0400 |
commit | 89b1698c93a9dee043154f33d96bca9964e705f1 (patch) | |
tree | dd9dcb1965baae8edcf0b496aaa6a70609b6fc11 /net/rds | |
parent | ffd7ce3cd9c294f1ff49ec02cdbd1bc7cb913db6 (diff) | |
parent | e30cb13c5a09ff5f043a6570c32e49b063bea6a1 (diff) |
Merge ra.kernel.org:/pub/scm/linux/kernel/git/davem/net
The BTF conflicts were simple overlapping changes.
The virtio_net conflict was an overlap of a fix of statistics counter,
happening alongisde a move over to a bonafide statistics structure
rather than counting value on the stack.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/rds')
-rw-r--r-- | net/rds/ib_frmr.c | 5 | ||||
-rw-r--r-- | net/rds/ib_mr.h | 3 | ||||
-rw-r--r-- | net/rds/ib_rdma.c | 21 | ||||
-rw-r--r-- | net/rds/rdma.c | 13 | ||||
-rw-r--r-- | net/rds/rds.h | 5 | ||||
-rw-r--r-- | net/rds/send.c | 12 |
6 files changed, 39 insertions, 20 deletions
diff --git a/net/rds/ib_frmr.c b/net/rds/ib_frmr.c index 48332a6ed738..d152e48ea371 100644 --- a/net/rds/ib_frmr.c +++ b/net/rds/ib_frmr.c | |||
@@ -344,6 +344,11 @@ struct rds_ib_mr *rds_ib_reg_frmr(struct rds_ib_device *rds_ibdev, | |||
344 | struct rds_ib_frmr *frmr; | 344 | struct rds_ib_frmr *frmr; |
345 | int ret; | 345 | int ret; |
346 | 346 | ||
347 | if (!ic) { | ||
348 | /* TODO: Add FRWR support for RDS_GET_MR using proxy qp*/ | ||
349 | return ERR_PTR(-EOPNOTSUPP); | ||
350 | } | ||
351 | |||
347 | do { | 352 | do { |
348 | if (ibmr) | 353 | if (ibmr) |
349 | rds_ib_free_frmr(ibmr, true); | 354 | rds_ib_free_frmr(ibmr, true); |
diff --git a/net/rds/ib_mr.h b/net/rds/ib_mr.h index f440ace584c8..5da12c248431 100644 --- a/net/rds/ib_mr.h +++ b/net/rds/ib_mr.h | |||
@@ -117,7 +117,8 @@ void rds6_ib_get_mr_info(struct rds_ib_device *rds_ibdev, | |||
117 | struct rds6_info_rdma_connection *iinfo6); | 117 | struct rds6_info_rdma_connection *iinfo6); |
118 | void rds_ib_destroy_mr_pool(struct rds_ib_mr_pool *); | 118 | void rds_ib_destroy_mr_pool(struct rds_ib_mr_pool *); |
119 | void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents, | 119 | void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents, |
120 | struct rds_sock *rs, u32 *key_ret); | 120 | struct rds_sock *rs, u32 *key_ret, |
121 | struct rds_connection *conn); | ||
121 | void rds_ib_sync_mr(void *trans_private, int dir); | 122 | void rds_ib_sync_mr(void *trans_private, int dir); |
122 | void rds_ib_free_mr(void *trans_private, int invalidate); | 123 | void rds_ib_free_mr(void *trans_private, int invalidate); |
123 | void rds_ib_flush_mrs(void); | 124 | void rds_ib_flush_mrs(void); |
diff --git a/net/rds/ib_rdma.c b/net/rds/ib_rdma.c index 99ccafb90410..63c8d107adcf 100644 --- a/net/rds/ib_rdma.c +++ b/net/rds/ib_rdma.c | |||
@@ -549,11 +549,12 @@ void rds_ib_flush_mrs(void) | |||
549 | } | 549 | } |
550 | 550 | ||
551 | void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents, | 551 | void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents, |
552 | struct rds_sock *rs, u32 *key_ret) | 552 | struct rds_sock *rs, u32 *key_ret, |
553 | struct rds_connection *conn) | ||
553 | { | 554 | { |
554 | struct rds_ib_device *rds_ibdev; | 555 | struct rds_ib_device *rds_ibdev; |
555 | struct rds_ib_mr *ibmr = NULL; | 556 | struct rds_ib_mr *ibmr = NULL; |
556 | struct rds_ib_connection *ic = rs->rs_conn->c_transport_data; | 557 | struct rds_ib_connection *ic = NULL; |
557 | int ret; | 558 | int ret; |
558 | 559 | ||
559 | rds_ibdev = rds_ib_get_device(rs->rs_bound_addr.s6_addr32[3]); | 560 | rds_ibdev = rds_ib_get_device(rs->rs_bound_addr.s6_addr32[3]); |
@@ -562,6 +563,9 @@ void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents, | |||
562 | goto out; | 563 | goto out; |
563 | } | 564 | } |
564 | 565 | ||
566 | if (conn) | ||
567 | ic = conn->c_transport_data; | ||
568 | |||
565 | if (!rds_ibdev->mr_8k_pool || !rds_ibdev->mr_1m_pool) { | 569 | if (!rds_ibdev->mr_8k_pool || !rds_ibdev->mr_1m_pool) { |
566 | ret = -ENODEV; | 570 | ret = -ENODEV; |
567 | goto out; | 571 | goto out; |
@@ -571,17 +575,18 @@ void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents, | |||
571 | ibmr = rds_ib_reg_frmr(rds_ibdev, ic, sg, nents, key_ret); | 575 | ibmr = rds_ib_reg_frmr(rds_ibdev, ic, sg, nents, key_ret); |
572 | else | 576 | else |
573 | ibmr = rds_ib_reg_fmr(rds_ibdev, sg, nents, key_ret); | 577 | ibmr = rds_ib_reg_fmr(rds_ibdev, sg, nents, key_ret); |
574 | if (ibmr) | 578 | if (IS_ERR(ibmr)) { |
575 | rds_ibdev = NULL; | 579 | ret = PTR_ERR(ibmr); |
576 | |||
577 | out: | ||
578 | if (!ibmr) | ||
579 | pr_warn("RDS/IB: rds_ib_get_mr failed (errno=%d)\n", ret); | 580 | pr_warn("RDS/IB: rds_ib_get_mr failed (errno=%d)\n", ret); |
581 | } else { | ||
582 | return ibmr; | ||
583 | } | ||
580 | 584 | ||
585 | out: | ||
581 | if (rds_ibdev) | 586 | if (rds_ibdev) |
582 | rds_ib_dev_put(rds_ibdev); | 587 | rds_ib_dev_put(rds_ibdev); |
583 | 588 | ||
584 | return ibmr; | 589 | return ERR_PTR(ret); |
585 | } | 590 | } |
586 | 591 | ||
587 | void rds_ib_destroy_mr_pool(struct rds_ib_mr_pool *pool) | 592 | void rds_ib_destroy_mr_pool(struct rds_ib_mr_pool *pool) |
diff --git a/net/rds/rdma.c b/net/rds/rdma.c index 7b3998026825..98237feb607a 100644 --- a/net/rds/rdma.c +++ b/net/rds/rdma.c | |||
@@ -170,7 +170,8 @@ static int rds_pin_pages(unsigned long user_addr, unsigned int nr_pages, | |||
170 | } | 170 | } |
171 | 171 | ||
172 | static int __rds_rdma_map(struct rds_sock *rs, struct rds_get_mr_args *args, | 172 | static int __rds_rdma_map(struct rds_sock *rs, struct rds_get_mr_args *args, |
173 | u64 *cookie_ret, struct rds_mr **mr_ret) | 173 | u64 *cookie_ret, struct rds_mr **mr_ret, |
174 | struct rds_conn_path *cp) | ||
174 | { | 175 | { |
175 | struct rds_mr *mr = NULL, *found; | 176 | struct rds_mr *mr = NULL, *found; |
176 | unsigned int nr_pages; | 177 | unsigned int nr_pages; |
@@ -269,7 +270,8 @@ static int __rds_rdma_map(struct rds_sock *rs, struct rds_get_mr_args *args, | |||
269 | * Note that dma_map() implies that pending writes are | 270 | * Note that dma_map() implies that pending writes are |
270 | * flushed to RAM, so no dma_sync is needed here. */ | 271 | * flushed to RAM, so no dma_sync is needed here. */ |
271 | trans_private = rs->rs_transport->get_mr(sg, nents, rs, | 272 | trans_private = rs->rs_transport->get_mr(sg, nents, rs, |
272 | &mr->r_key); | 273 | &mr->r_key, |
274 | cp ? cp->cp_conn : NULL); | ||
273 | 275 | ||
274 | if (IS_ERR(trans_private)) { | 276 | if (IS_ERR(trans_private)) { |
275 | for (i = 0 ; i < nents; i++) | 277 | for (i = 0 ; i < nents; i++) |
@@ -330,7 +332,7 @@ int rds_get_mr(struct rds_sock *rs, char __user *optval, int optlen) | |||
330 | sizeof(struct rds_get_mr_args))) | 332 | sizeof(struct rds_get_mr_args))) |
331 | return -EFAULT; | 333 | return -EFAULT; |
332 | 334 | ||
333 | return __rds_rdma_map(rs, &args, NULL, NULL); | 335 | return __rds_rdma_map(rs, &args, NULL, NULL, NULL); |
334 | } | 336 | } |
335 | 337 | ||
336 | int rds_get_mr_for_dest(struct rds_sock *rs, char __user *optval, int optlen) | 338 | int rds_get_mr_for_dest(struct rds_sock *rs, char __user *optval, int optlen) |
@@ -354,7 +356,7 @@ int rds_get_mr_for_dest(struct rds_sock *rs, char __user *optval, int optlen) | |||
354 | new_args.cookie_addr = args.cookie_addr; | 356 | new_args.cookie_addr = args.cookie_addr; |
355 | new_args.flags = args.flags; | 357 | new_args.flags = args.flags; |
356 | 358 | ||
357 | return __rds_rdma_map(rs, &new_args, NULL, NULL); | 359 | return __rds_rdma_map(rs, &new_args, NULL, NULL, NULL); |
358 | } | 360 | } |
359 | 361 | ||
360 | /* | 362 | /* |
@@ -782,7 +784,8 @@ int rds_cmsg_rdma_map(struct rds_sock *rs, struct rds_message *rm, | |||
782 | rm->m_rdma_cookie != 0) | 784 | rm->m_rdma_cookie != 0) |
783 | return -EINVAL; | 785 | return -EINVAL; |
784 | 786 | ||
785 | return __rds_rdma_map(rs, CMSG_DATA(cmsg), &rm->m_rdma_cookie, &rm->rdma.op_rdma_mr); | 787 | return __rds_rdma_map(rs, CMSG_DATA(cmsg), &rm->m_rdma_cookie, |
788 | &rm->rdma.op_rdma_mr, rm->m_conn_path); | ||
786 | } | 789 | } |
787 | 790 | ||
788 | /* | 791 | /* |
diff --git a/net/rds/rds.h b/net/rds/rds.h index ff537bb11411..c4dcf654d8fe 100644 --- a/net/rds/rds.h +++ b/net/rds/rds.h | |||
@@ -470,6 +470,8 @@ struct rds_message { | |||
470 | struct scatterlist *op_sg; | 470 | struct scatterlist *op_sg; |
471 | } data; | 471 | } data; |
472 | }; | 472 | }; |
473 | |||
474 | struct rds_conn_path *m_conn_path; | ||
473 | }; | 475 | }; |
474 | 476 | ||
475 | /* | 477 | /* |
@@ -551,7 +553,8 @@ struct rds_transport { | |||
551 | unsigned int avail); | 553 | unsigned int avail); |
552 | void (*exit)(void); | 554 | void (*exit)(void); |
553 | void *(*get_mr)(struct scatterlist *sg, unsigned long nr_sg, | 555 | void *(*get_mr)(struct scatterlist *sg, unsigned long nr_sg, |
554 | struct rds_sock *rs, u32 *key_ret); | 556 | struct rds_sock *rs, u32 *key_ret, |
557 | struct rds_connection *conn); | ||
555 | void (*sync_mr)(void *trans_private, int direction); | 558 | void (*sync_mr)(void *trans_private, int direction); |
556 | void (*free_mr)(void *trans_private, int invalidate); | 559 | void (*free_mr)(void *trans_private, int invalidate); |
557 | void (*flush_mrs)(void); | 560 | void (*flush_mrs)(void); |
diff --git a/net/rds/send.c b/net/rds/send.c index 36a5dba56a43..57b3d5a8b2db 100644 --- a/net/rds/send.c +++ b/net/rds/send.c | |||
@@ -1255,6 +1255,13 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len) | |||
1255 | rs->rs_conn = conn; | 1255 | rs->rs_conn = conn; |
1256 | } | 1256 | } |
1257 | 1257 | ||
1258 | if (conn->c_trans->t_mp_capable) | ||
1259 | cpath = &conn->c_path[rds_send_mprds_hash(rs, conn)]; | ||
1260 | else | ||
1261 | cpath = &conn->c_path[0]; | ||
1262 | |||
1263 | rm->m_conn_path = cpath; | ||
1264 | |||
1258 | /* Parse any control messages the user may have included. */ | 1265 | /* Parse any control messages the user may have included. */ |
1259 | ret = rds_cmsg_send(rs, rm, msg, &allocated_mr); | 1266 | ret = rds_cmsg_send(rs, rm, msg, &allocated_mr); |
1260 | if (ret) { | 1267 | if (ret) { |
@@ -1278,11 +1285,6 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len) | |||
1278 | goto out; | 1285 | goto out; |
1279 | } | 1286 | } |
1280 | 1287 | ||
1281 | if (conn->c_trans->t_mp_capable) | ||
1282 | cpath = &conn->c_path[rds_send_mprds_hash(rs, conn)]; | ||
1283 | else | ||
1284 | cpath = &conn->c_path[0]; | ||
1285 | |||
1286 | if (rds_destroy_pending(conn)) { | 1288 | if (rds_destroy_pending(conn)) { |
1287 | ret = -EAGAIN; | 1289 | ret = -EAGAIN; |
1288 | goto out; | 1290 | goto out; |