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>
This commit is contained in:
@@ -344,6 +344,11 @@ struct rds_ib_mr *rds_ib_reg_frmr(struct rds_ib_device *rds_ibdev,
|
||||
struct rds_ib_frmr *frmr;
|
||||
int ret;
|
||||
|
||||
if (!ic) {
|
||||
/* TODO: Add FRWR support for RDS_GET_MR using proxy qp*/
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
}
|
||||
|
||||
do {
|
||||
if (ibmr)
|
||||
rds_ib_free_frmr(ibmr, true);
|
||||
|
@@ -117,7 +117,8 @@ void rds6_ib_get_mr_info(struct rds_ib_device *rds_ibdev,
|
||||
struct rds6_info_rdma_connection *iinfo6);
|
||||
void rds_ib_destroy_mr_pool(struct rds_ib_mr_pool *);
|
||||
void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents,
|
||||
struct rds_sock *rs, u32 *key_ret);
|
||||
struct rds_sock *rs, u32 *key_ret,
|
||||
struct rds_connection *conn);
|
||||
void rds_ib_sync_mr(void *trans_private, int dir);
|
||||
void rds_ib_free_mr(void *trans_private, int invalidate);
|
||||
void rds_ib_flush_mrs(void);
|
||||
|
@@ -549,11 +549,12 @@ void rds_ib_flush_mrs(void)
|
||||
}
|
||||
|
||||
void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents,
|
||||
struct rds_sock *rs, u32 *key_ret)
|
||||
struct rds_sock *rs, u32 *key_ret,
|
||||
struct rds_connection *conn)
|
||||
{
|
||||
struct rds_ib_device *rds_ibdev;
|
||||
struct rds_ib_mr *ibmr = NULL;
|
||||
struct rds_ib_connection *ic = rs->rs_conn->c_transport_data;
|
||||
struct rds_ib_connection *ic = NULL;
|
||||
int ret;
|
||||
|
||||
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,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (conn)
|
||||
ic = conn->c_transport_data;
|
||||
|
||||
if (!rds_ibdev->mr_8k_pool || !rds_ibdev->mr_1m_pool) {
|
||||
ret = -ENODEV;
|
||||
goto out;
|
||||
@@ -571,17 +575,18 @@ void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents,
|
||||
ibmr = rds_ib_reg_frmr(rds_ibdev, ic, sg, nents, key_ret);
|
||||
else
|
||||
ibmr = rds_ib_reg_fmr(rds_ibdev, sg, nents, key_ret);
|
||||
if (ibmr)
|
||||
rds_ibdev = NULL;
|
||||
if (IS_ERR(ibmr)) {
|
||||
ret = PTR_ERR(ibmr);
|
||||
pr_warn("RDS/IB: rds_ib_get_mr failed (errno=%d)\n", ret);
|
||||
} else {
|
||||
return ibmr;
|
||||
}
|
||||
|
||||
out:
|
||||
if (!ibmr)
|
||||
pr_warn("RDS/IB: rds_ib_get_mr failed (errno=%d)\n", ret);
|
||||
|
||||
if (rds_ibdev)
|
||||
rds_ib_dev_put(rds_ibdev);
|
||||
|
||||
return ibmr;
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
void rds_ib_destroy_mr_pool(struct rds_ib_mr_pool *pool)
|
||||
|
@@ -170,7 +170,8 @@ static int rds_pin_pages(unsigned long user_addr, unsigned int nr_pages,
|
||||
}
|
||||
|
||||
static int __rds_rdma_map(struct rds_sock *rs, struct rds_get_mr_args *args,
|
||||
u64 *cookie_ret, struct rds_mr **mr_ret)
|
||||
u64 *cookie_ret, struct rds_mr **mr_ret,
|
||||
struct rds_conn_path *cp)
|
||||
{
|
||||
struct rds_mr *mr = NULL, *found;
|
||||
unsigned int nr_pages;
|
||||
@@ -269,7 +270,8 @@ static int __rds_rdma_map(struct rds_sock *rs, struct rds_get_mr_args *args,
|
||||
* Note that dma_map() implies that pending writes are
|
||||
* flushed to RAM, so no dma_sync is needed here. */
|
||||
trans_private = rs->rs_transport->get_mr(sg, nents, rs,
|
||||
&mr->r_key);
|
||||
&mr->r_key,
|
||||
cp ? cp->cp_conn : NULL);
|
||||
|
||||
if (IS_ERR(trans_private)) {
|
||||
for (i = 0 ; i < nents; i++)
|
||||
@@ -330,7 +332,7 @@ int rds_get_mr(struct rds_sock *rs, char __user *optval, int optlen)
|
||||
sizeof(struct rds_get_mr_args)))
|
||||
return -EFAULT;
|
||||
|
||||
return __rds_rdma_map(rs, &args, NULL, NULL);
|
||||
return __rds_rdma_map(rs, &args, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
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)
|
||||
new_args.cookie_addr = args.cookie_addr;
|
||||
new_args.flags = args.flags;
|
||||
|
||||
return __rds_rdma_map(rs, &new_args, NULL, NULL);
|
||||
return __rds_rdma_map(rs, &new_args, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -782,7 +784,8 @@ int rds_cmsg_rdma_map(struct rds_sock *rs, struct rds_message *rm,
|
||||
rm->m_rdma_cookie != 0)
|
||||
return -EINVAL;
|
||||
|
||||
return __rds_rdma_map(rs, CMSG_DATA(cmsg), &rm->m_rdma_cookie, &rm->rdma.op_rdma_mr);
|
||||
return __rds_rdma_map(rs, CMSG_DATA(cmsg), &rm->m_rdma_cookie,
|
||||
&rm->rdma.op_rdma_mr, rm->m_conn_path);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -470,6 +470,8 @@ struct rds_message {
|
||||
struct scatterlist *op_sg;
|
||||
} data;
|
||||
};
|
||||
|
||||
struct rds_conn_path *m_conn_path;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -551,7 +553,8 @@ struct rds_transport {
|
||||
unsigned int avail);
|
||||
void (*exit)(void);
|
||||
void *(*get_mr)(struct scatterlist *sg, unsigned long nr_sg,
|
||||
struct rds_sock *rs, u32 *key_ret);
|
||||
struct rds_sock *rs, u32 *key_ret,
|
||||
struct rds_connection *conn);
|
||||
void (*sync_mr)(void *trans_private, int direction);
|
||||
void (*free_mr)(void *trans_private, int invalidate);
|
||||
void (*flush_mrs)(void);
|
||||
|
@@ -1255,6 +1255,13 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len)
|
||||
rs->rs_conn = conn;
|
||||
}
|
||||
|
||||
if (conn->c_trans->t_mp_capable)
|
||||
cpath = &conn->c_path[rds_send_mprds_hash(rs, conn)];
|
||||
else
|
||||
cpath = &conn->c_path[0];
|
||||
|
||||
rm->m_conn_path = cpath;
|
||||
|
||||
/* Parse any control messages the user may have included. */
|
||||
ret = rds_cmsg_send(rs, rm, msg, &allocated_mr);
|
||||
if (ret) {
|
||||
@@ -1278,11 +1285,6 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (conn->c_trans->t_mp_capable)
|
||||
cpath = &conn->c_path[rds_send_mprds_hash(rs, conn)];
|
||||
else
|
||||
cpath = &conn->c_path[0];
|
||||
|
||||
if (rds_destroy_pending(conn)) {
|
||||
ret = -EAGAIN;
|
||||
goto out;
|
||||
|
Reference in New Issue
Block a user