Merge branch 'for-4.2-misc' into k.o/for-4.2
This commit is contained in:
commit
b806ef3bbe
10 changed files with 47 additions and 18 deletions
|
@ -1619,6 +1619,7 @@ static int cma_iw_listen(struct rdma_id_private *id_priv, int backlog)
|
||||||
if (IS_ERR(id))
|
if (IS_ERR(id))
|
||||||
return PTR_ERR(id);
|
return PTR_ERR(id);
|
||||||
|
|
||||||
|
id->tos = id_priv->tos;
|
||||||
id_priv->cm_id.iw = id;
|
id_priv->cm_id.iw = id;
|
||||||
|
|
||||||
memcpy(&id_priv->cm_id.iw->local_addr, cma_src_addr(id_priv),
|
memcpy(&id_priv->cm_id.iw->local_addr, cma_src_addr(id_priv),
|
||||||
|
@ -2851,6 +2852,7 @@ static int cma_connect_iw(struct rdma_id_private *id_priv,
|
||||||
if (IS_ERR(cm_id))
|
if (IS_ERR(cm_id))
|
||||||
return PTR_ERR(cm_id);
|
return PTR_ERR(cm_id);
|
||||||
|
|
||||||
|
cm_id->tos = id_priv->tos;
|
||||||
id_priv->cm_id.iw = cm_id;
|
id_priv->cm_id.iw = cm_id;
|
||||||
|
|
||||||
memcpy(&cm_id->local_addr, cma_src_addr(id_priv),
|
memcpy(&cm_id->local_addr, cma_src_addr(id_priv),
|
||||||
|
|
|
@ -1185,7 +1185,6 @@ static struct ib_flow *mlx4_ib_create_flow(struct ib_qp *qp,
|
||||||
&mflow->reg_id[i].id);
|
&mflow->reg_id[i].id);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_create_flow;
|
goto err_create_flow;
|
||||||
i++;
|
|
||||||
if (is_bonded) {
|
if (is_bonded) {
|
||||||
/* Application always sees one port so the mirror rule
|
/* Application always sees one port so the mirror rule
|
||||||
* must be on port #2
|
* must be on port #2
|
||||||
|
@ -1200,6 +1199,7 @@ static struct ib_flow *mlx4_ib_create_flow(struct ib_qp *qp,
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i < ARRAY_SIZE(type) && flow_attr->type == IB_FLOW_ATTR_NORMAL) {
|
if (i < ARRAY_SIZE(type) && flow_attr->type == IB_FLOW_ATTR_NORMAL) {
|
||||||
|
@ -1207,7 +1207,7 @@ static struct ib_flow *mlx4_ib_create_flow(struct ib_qp *qp,
|
||||||
&mflow->reg_id[i].id);
|
&mflow->reg_id[i].id);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_create_flow;
|
goto err_create_flow;
|
||||||
i++;
|
|
||||||
if (is_bonded) {
|
if (is_bonded) {
|
||||||
flow_attr->port = 2;
|
flow_attr->port = 2;
|
||||||
err = mlx4_ib_tunnel_steer_add(qp, flow_attr,
|
err = mlx4_ib_tunnel_steer_add(qp, flow_attr,
|
||||||
|
@ -1218,6 +1218,7 @@ static struct ib_flow *mlx4_ib_create_flow(struct ib_qp *qp,
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
/* function to create mirror rule */
|
/* function to create mirror rule */
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return &mflow->ibflow;
|
return &mflow->ibflow;
|
||||||
|
|
|
@ -1616,6 +1616,8 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core,
|
||||||
&cm_node->loc_addr, cm_node->loc_port,
|
&cm_node->loc_addr, cm_node->loc_port,
|
||||||
&cm_node->rem_addr, cm_node->rem_port);
|
&cm_node->rem_addr, cm_node->rem_port);
|
||||||
cm_node->listener = listener;
|
cm_node->listener = listener;
|
||||||
|
if (listener)
|
||||||
|
cm_node->tos = listener->tos;
|
||||||
cm_node->netdev = nesvnic->netdev;
|
cm_node->netdev = nesvnic->netdev;
|
||||||
cm_node->cm_id = cm_info->cm_id;
|
cm_node->cm_id = cm_info->cm_id;
|
||||||
memcpy(cm_node->loc_mac, nesvnic->netdev->dev_addr, ETH_ALEN);
|
memcpy(cm_node->loc_mac, nesvnic->netdev->dev_addr, ETH_ALEN);
|
||||||
|
@ -2938,6 +2940,9 @@ static int nes_cm_init_tsa_conn(struct nes_qp *nesqp, struct nes_cm_node *cm_nod
|
||||||
|
|
||||||
nesqp->nesqp_context->misc2 |= cpu_to_le32(64 << NES_QPCONTEXT_MISC2_TTL_SHIFT);
|
nesqp->nesqp_context->misc2 |= cpu_to_le32(64 << NES_QPCONTEXT_MISC2_TTL_SHIFT);
|
||||||
|
|
||||||
|
nesqp->nesqp_context->misc2 |= cpu_to_le32(
|
||||||
|
cm_node->tos << NES_QPCONTEXT_MISC2_TOS_SHIFT);
|
||||||
|
|
||||||
nesqp->nesqp_context->mss |= cpu_to_le32(((u32)cm_node->tcp_cntxt.mss) << 16);
|
nesqp->nesqp_context->mss |= cpu_to_le32(((u32)cm_node->tcp_cntxt.mss) << 16);
|
||||||
|
|
||||||
nesqp->nesqp_context->tcp_state_flow_label |= cpu_to_le32(
|
nesqp->nesqp_context->tcp_state_flow_label |= cpu_to_le32(
|
||||||
|
@ -3612,6 +3617,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
|
||||||
cm_node->ord_size = 1;
|
cm_node->ord_size = 1;
|
||||||
|
|
||||||
cm_node->apbvt_set = apbvt_set;
|
cm_node->apbvt_set = apbvt_set;
|
||||||
|
cm_node->tos = cm_id->tos;
|
||||||
nesqp->cm_node = cm_node;
|
nesqp->cm_node = cm_node;
|
||||||
cm_node->nesqp = nesqp;
|
cm_node->nesqp = nesqp;
|
||||||
nes_add_ref(&nesqp->ibqp);
|
nes_add_ref(&nesqp->ibqp);
|
||||||
|
@ -3666,6 +3672,7 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog)
|
||||||
}
|
}
|
||||||
|
|
||||||
cm_id->provider_data = cm_node;
|
cm_id->provider_data = cm_node;
|
||||||
|
cm_node->tos = cm_id->tos;
|
||||||
|
|
||||||
if (!cm_node->reused_node) {
|
if (!cm_node->reused_node) {
|
||||||
if (nes_create_mapinfo(&cm_info))
|
if (nes_create_mapinfo(&cm_info))
|
||||||
|
|
|
@ -303,6 +303,7 @@ struct nes_cm_listener {
|
||||||
int backlog;
|
int backlog;
|
||||||
enum nes_cm_listener_state listener_state;
|
enum nes_cm_listener_state listener_state;
|
||||||
u32 reused_node;
|
u32 reused_node;
|
||||||
|
u8 tos;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* per connection node and node state information */
|
/* per connection node and node state information */
|
||||||
|
@ -352,6 +353,7 @@ struct nes_cm_node {
|
||||||
struct list_head reset_entry;
|
struct list_head reset_entry;
|
||||||
struct nes_qp *nesqp;
|
struct nes_qp *nesqp;
|
||||||
atomic_t passive_state;
|
atomic_t passive_state;
|
||||||
|
u8 tos;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* structure for client or CM to fill when making CM api calls. */
|
/* structure for client or CM to fill when making CM api calls. */
|
||||||
|
|
|
@ -375,7 +375,12 @@ static struct ocrdma_pd *_ocrdma_alloc_pd(struct ocrdma_dev *dev,
|
||||||
|
|
||||||
if (dev->pd_mgr->pd_prealloc_valid) {
|
if (dev->pd_mgr->pd_prealloc_valid) {
|
||||||
status = ocrdma_get_pd_num(dev, pd);
|
status = ocrdma_get_pd_num(dev, pd);
|
||||||
return (status == 0) ? pd : ERR_PTR(status);
|
if (status == 0) {
|
||||||
|
return pd;
|
||||||
|
} else {
|
||||||
|
kfree(pd);
|
||||||
|
return ERR_PTR(status);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
|
|
|
@ -1128,7 +1128,7 @@ static int ipoib_neigh_hash_init(struct ipoib_dev_priv *priv)
|
||||||
{
|
{
|
||||||
struct ipoib_neigh_table *ntbl = &priv->ntbl;
|
struct ipoib_neigh_table *ntbl = &priv->ntbl;
|
||||||
struct ipoib_neigh_hash *htbl;
|
struct ipoib_neigh_hash *htbl;
|
||||||
struct ipoib_neigh **buckets;
|
struct ipoib_neigh __rcu **buckets;
|
||||||
u32 size;
|
u32 size;
|
||||||
|
|
||||||
clear_bit(IPOIB_NEIGH_TBL_FLUSH, &priv->flags);
|
clear_bit(IPOIB_NEIGH_TBL_FLUSH, &priv->flags);
|
||||||
|
@ -1146,7 +1146,7 @@ static int ipoib_neigh_hash_init(struct ipoib_dev_priv *priv)
|
||||||
htbl->size = size;
|
htbl->size = size;
|
||||||
htbl->mask = (size - 1);
|
htbl->mask = (size - 1);
|
||||||
htbl->buckets = buckets;
|
htbl->buckets = buckets;
|
||||||
ntbl->htbl = htbl;
|
RCU_INIT_POINTER(ntbl->htbl, htbl);
|
||||||
htbl->ntbl = ntbl;
|
htbl->ntbl = ntbl;
|
||||||
atomic_set(&ntbl->entries, 0);
|
atomic_set(&ntbl->entries, 0);
|
||||||
|
|
||||||
|
|
|
@ -91,6 +91,7 @@ struct iw_cm_id {
|
||||||
/* Used by provider to add and remove refs on IW cm_id */
|
/* Used by provider to add and remove refs on IW cm_id */
|
||||||
void (*add_ref)(struct iw_cm_id *);
|
void (*add_ref)(struct iw_cm_id *);
|
||||||
void (*rem_ref)(struct iw_cm_id *);
|
void (*rem_ref)(struct iw_cm_id *);
|
||||||
|
u8 tos;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iw_cm_conn_param {
|
struct iw_cm_conn_param {
|
||||||
|
|
|
@ -571,6 +571,8 @@ int rds_ib_xmit(struct rds_connection *conn, struct rds_message *rm,
|
||||||
}
|
}
|
||||||
|
|
||||||
rds_message_addref(rm);
|
rds_message_addref(rm);
|
||||||
|
rm->data.op_dmasg = 0;
|
||||||
|
rm->data.op_dmaoff = 0;
|
||||||
ic->i_data_op = &rm->data;
|
ic->i_data_op = &rm->data;
|
||||||
|
|
||||||
/* Finalize the header */
|
/* Finalize the header */
|
||||||
|
@ -624,7 +626,7 @@ int rds_ib_xmit(struct rds_connection *conn, struct rds_message *rm,
|
||||||
send = &ic->i_sends[pos];
|
send = &ic->i_sends[pos];
|
||||||
first = send;
|
first = send;
|
||||||
prev = NULL;
|
prev = NULL;
|
||||||
scat = &ic->i_data_op->op_sg[sg];
|
scat = &ic->i_data_op->op_sg[rm->data.op_dmasg];
|
||||||
i = 0;
|
i = 0;
|
||||||
do {
|
do {
|
||||||
unsigned int len = 0;
|
unsigned int len = 0;
|
||||||
|
@ -646,17 +648,20 @@ int rds_ib_xmit(struct rds_connection *conn, struct rds_message *rm,
|
||||||
/* Set up the data, if present */
|
/* Set up the data, if present */
|
||||||
if (i < work_alloc
|
if (i < work_alloc
|
||||||
&& scat != &rm->data.op_sg[rm->data.op_count]) {
|
&& scat != &rm->data.op_sg[rm->data.op_count]) {
|
||||||
len = min(RDS_FRAG_SIZE, ib_sg_dma_len(dev, scat) - off);
|
len = min(RDS_FRAG_SIZE,
|
||||||
|
ib_sg_dma_len(dev, scat) - rm->data.op_dmaoff);
|
||||||
send->s_wr.num_sge = 2;
|
send->s_wr.num_sge = 2;
|
||||||
|
|
||||||
send->s_sge[1].addr = ib_sg_dma_address(dev, scat) + off;
|
send->s_sge[1].addr = ib_sg_dma_address(dev, scat);
|
||||||
|
send->s_sge[1].addr += rm->data.op_dmaoff;
|
||||||
send->s_sge[1].length = len;
|
send->s_sge[1].length = len;
|
||||||
|
|
||||||
bytes_sent += len;
|
bytes_sent += len;
|
||||||
off += len;
|
rm->data.op_dmaoff += len;
|
||||||
if (off == ib_sg_dma_len(dev, scat)) {
|
if (rm->data.op_dmaoff == ib_sg_dma_len(dev, scat)) {
|
||||||
scat++;
|
scat++;
|
||||||
off = 0;
|
rm->data.op_dmasg++;
|
||||||
|
rm->data.op_dmaoff = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -581,6 +581,8 @@ int rds_iw_xmit(struct rds_connection *conn, struct rds_message *rm,
|
||||||
ic->i_unsignaled_wrs = rds_iw_sysctl_max_unsig_wrs;
|
ic->i_unsignaled_wrs = rds_iw_sysctl_max_unsig_wrs;
|
||||||
ic->i_unsignaled_bytes = rds_iw_sysctl_max_unsig_bytes;
|
ic->i_unsignaled_bytes = rds_iw_sysctl_max_unsig_bytes;
|
||||||
rds_message_addref(rm);
|
rds_message_addref(rm);
|
||||||
|
rm->data.op_dmasg = 0;
|
||||||
|
rm->data.op_dmaoff = 0;
|
||||||
ic->i_rm = rm;
|
ic->i_rm = rm;
|
||||||
|
|
||||||
/* Finalize the header */
|
/* Finalize the header */
|
||||||
|
@ -622,7 +624,7 @@ int rds_iw_xmit(struct rds_connection *conn, struct rds_message *rm,
|
||||||
send = &ic->i_sends[pos];
|
send = &ic->i_sends[pos];
|
||||||
first = send;
|
first = send;
|
||||||
prev = NULL;
|
prev = NULL;
|
||||||
scat = &rm->data.op_sg[sg];
|
scat = &rm->data.op_sg[rm->data.op_dmasg];
|
||||||
sent = 0;
|
sent = 0;
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
|
@ -656,10 +658,11 @@ int rds_iw_xmit(struct rds_connection *conn, struct rds_message *rm,
|
||||||
|
|
||||||
send = &ic->i_sends[pos];
|
send = &ic->i_sends[pos];
|
||||||
|
|
||||||
len = min(RDS_FRAG_SIZE, ib_sg_dma_len(dev, scat) - off);
|
len = min(RDS_FRAG_SIZE,
|
||||||
|
ib_sg_dma_len(dev, scat) - rm->data.op_dmaoff);
|
||||||
rds_iw_xmit_populate_wr(ic, send, pos,
|
rds_iw_xmit_populate_wr(ic, send, pos,
|
||||||
ib_sg_dma_address(dev, scat) + off, len,
|
ib_sg_dma_address(dev, scat) + rm->data.op_dmaoff, len,
|
||||||
send_flags);
|
send_flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We want to delay signaling completions just enough to get
|
* We want to delay signaling completions just enough to get
|
||||||
|
@ -687,10 +690,11 @@ int rds_iw_xmit(struct rds_connection *conn, struct rds_message *rm,
|
||||||
&send->s_wr, send->s_wr.num_sge, send->s_wr.next);
|
&send->s_wr, send->s_wr.num_sge, send->s_wr.next);
|
||||||
|
|
||||||
sent += len;
|
sent += len;
|
||||||
off += len;
|
rm->data.op_dmaoff += len;
|
||||||
if (off == ib_sg_dma_len(dev, scat)) {
|
if (rm->data.op_dmaoff == ib_sg_dma_len(dev, scat)) {
|
||||||
scat++;
|
scat++;
|
||||||
off = 0;
|
rm->data.op_dmaoff = 0;
|
||||||
|
rm->data.op_dmasg++;
|
||||||
}
|
}
|
||||||
|
|
||||||
add_header:
|
add_header:
|
||||||
|
|
|
@ -363,6 +363,8 @@ struct rds_message {
|
||||||
unsigned int op_active:1;
|
unsigned int op_active:1;
|
||||||
unsigned int op_nents;
|
unsigned int op_nents;
|
||||||
unsigned int op_count;
|
unsigned int op_count;
|
||||||
|
unsigned int op_dmasg;
|
||||||
|
unsigned int op_dmaoff;
|
||||||
struct scatterlist *op_sg;
|
struct scatterlist *op_sg;
|
||||||
} data;
|
} data;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue