Commit b806ef3b authored by Doug Ledford's avatar Doug Ledford

Merge branch 'for-4.2-misc' into k.o/for-4.2

parents 73cdaaee 11562568
...@@ -1619,6 +1619,7 @@ static int cma_iw_listen(struct rdma_id_private *id_priv, int backlog) ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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 { ...@@ -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 { ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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 { ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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 { ...@@ -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;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment