Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

+47 -18
+2
drivers/infiniband/core/cma.c
··· 1619 1619 if (IS_ERR(id)) 1620 1620 return PTR_ERR(id); 1621 1621 1622 + id->tos = id_priv->tos; 1622 1623 id_priv->cm_id.iw = id; 1623 1624 1624 1625 memcpy(&id_priv->cm_id.iw->local_addr, cma_src_addr(id_priv), ··· 2852 2851 if (IS_ERR(cm_id)) 2853 2852 return PTR_ERR(cm_id); 2854 2853 2854 + cm_id->tos = id_priv->tos; 2855 2855 id_priv->cm_id.iw = cm_id; 2856 2856 2857 2857 memcpy(&cm_id->local_addr, cma_src_addr(id_priv),
+3 -2
drivers/infiniband/hw/mlx4/main.c
··· 1185 1185 &mflow->reg_id[i].id); 1186 1186 if (err) 1187 1187 goto err_create_flow; 1188 - i++; 1189 1188 if (is_bonded) { 1190 1189 /* Application always sees one port so the mirror rule 1191 1190 * must be on port #2 ··· 1199 1200 j++; 1200 1201 } 1201 1202 1203 + i++; 1202 1204 } 1203 1205 1204 1206 if (i < ARRAY_SIZE(type) && flow_attr->type == IB_FLOW_ATTR_NORMAL) { ··· 1207 1207 &mflow->reg_id[i].id); 1208 1208 if (err) 1209 1209 goto err_create_flow; 1210 - i++; 1210 + 1211 1211 if (is_bonded) { 1212 1212 flow_attr->port = 2; 1213 1213 err = mlx4_ib_tunnel_steer_add(qp, flow_attr, ··· 1218 1218 j++; 1219 1219 } 1220 1220 /* function to create mirror rule */ 1221 + i++; 1221 1222 } 1222 1223 1223 1224 return &mflow->ibflow;
+7
drivers/infiniband/hw/nes/nes_cm.c
··· 1616 1616 &cm_node->loc_addr, cm_node->loc_port, 1617 1617 &cm_node->rem_addr, cm_node->rem_port); 1618 1618 cm_node->listener = listener; 1619 + if (listener) 1620 + cm_node->tos = listener->tos; 1619 1621 cm_node->netdev = nesvnic->netdev; 1620 1622 cm_node->cm_id = cm_info->cm_id; 1621 1623 memcpy(cm_node->loc_mac, nesvnic->netdev->dev_addr, ETH_ALEN); ··· 2940 2938 2941 2939 nesqp->nesqp_context->misc2 |= cpu_to_le32(64 << NES_QPCONTEXT_MISC2_TTL_SHIFT); 2942 2940 2941 + nesqp->nesqp_context->misc2 |= cpu_to_le32( 2942 + cm_node->tos << NES_QPCONTEXT_MISC2_TOS_SHIFT); 2943 + 2943 2944 nesqp->nesqp_context->mss |= cpu_to_le32(((u32)cm_node->tcp_cntxt.mss) << 16); 2944 2945 2945 2946 nesqp->nesqp_context->tcp_state_flow_label |= cpu_to_le32( ··· 3617 3612 cm_node->ord_size = 1; 3618 3613 3619 3614 cm_node->apbvt_set = apbvt_set; 3615 + cm_node->tos = cm_id->tos; 3620 3616 nesqp->cm_node = cm_node; 3621 3617 cm_node->nesqp = nesqp; 3622 3618 nes_add_ref(&nesqp->ibqp); ··· 3672 3666 } 3673 3667 3674 3668 cm_id->provider_data = cm_node; 3669 + cm_node->tos = cm_id->tos; 3675 3670 3676 3671 if (!cm_node->reused_node) { 3677 3672 if (nes_create_mapinfo(&cm_info))
+2
drivers/infiniband/hw/nes/nes_cm.h
··· 303 303 int backlog; 304 304 enum nes_cm_listener_state listener_state; 305 305 u32 reused_node; 306 + u8 tos; 306 307 }; 307 308 308 309 /* per connection node and node state information */ ··· 353 352 struct list_head reset_entry; 354 353 struct nes_qp *nesqp; 355 354 atomic_t passive_state; 355 + u8 tos; 356 356 }; 357 357 358 358 /* structure for client or CM to fill when making CM api calls. */
+6 -1
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
··· 375 375 376 376 if (dev->pd_mgr->pd_prealloc_valid) { 377 377 status = ocrdma_get_pd_num(dev, pd); 378 - return (status == 0) ? pd : ERR_PTR(status); 378 + if (status == 0) { 379 + return pd; 380 + } else { 381 + kfree(pd); 382 + return ERR_PTR(status); 383 + } 379 384 } 380 385 381 386 retry:
+2 -2
drivers/infiniband/ulp/ipoib/ipoib_main.c
··· 1128 1128 { 1129 1129 struct ipoib_neigh_table *ntbl = &priv->ntbl; 1130 1130 struct ipoib_neigh_hash *htbl; 1131 - struct ipoib_neigh **buckets; 1131 + struct ipoib_neigh __rcu **buckets; 1132 1132 u32 size; 1133 1133 1134 1134 clear_bit(IPOIB_NEIGH_TBL_FLUSH, &priv->flags); ··· 1146 1146 htbl->size = size; 1147 1147 htbl->mask = (size - 1); 1148 1148 htbl->buckets = buckets; 1149 - ntbl->htbl = htbl; 1149 + RCU_INIT_POINTER(ntbl->htbl, htbl); 1150 1150 htbl->ntbl = ntbl; 1151 1151 atomic_set(&ntbl->entries, 0); 1152 1152
+1
include/rdma/iw_cm.h
··· 91 91 /* Used by provider to add and remove refs on IW cm_id */ 92 92 void (*add_ref)(struct iw_cm_id *); 93 93 void (*rem_ref)(struct iw_cm_id *); 94 + u8 tos; 94 95 }; 95 96 96 97 struct iw_cm_conn_param {
+11 -6
net/rds/ib_send.c
··· 571 571 } 572 572 573 573 rds_message_addref(rm); 574 + rm->data.op_dmasg = 0; 575 + rm->data.op_dmaoff = 0; 574 576 ic->i_data_op = &rm->data; 575 577 576 578 /* Finalize the header */ ··· 626 624 send = &ic->i_sends[pos]; 627 625 first = send; 628 626 prev = NULL; 629 - scat = &ic->i_data_op->op_sg[sg]; 627 + scat = &ic->i_data_op->op_sg[rm->data.op_dmasg]; 630 628 i = 0; 631 629 do { 632 630 unsigned int len = 0; ··· 648 646 /* Set up the data, if present */ 649 647 if (i < work_alloc 650 648 && scat != &rm->data.op_sg[rm->data.op_count]) { 651 - len = min(RDS_FRAG_SIZE, ib_sg_dma_len(dev, scat) - off); 649 + len = min(RDS_FRAG_SIZE, 650 + ib_sg_dma_len(dev, scat) - rm->data.op_dmaoff); 652 651 send->s_wr.num_sge = 2; 653 652 654 - send->s_sge[1].addr = ib_sg_dma_address(dev, scat) + off; 653 + send->s_sge[1].addr = ib_sg_dma_address(dev, scat); 654 + send->s_sge[1].addr += rm->data.op_dmaoff; 655 655 send->s_sge[1].length = len; 656 656 657 657 bytes_sent += len; 658 - off += len; 659 - if (off == ib_sg_dma_len(dev, scat)) { 658 + rm->data.op_dmaoff += len; 659 + if (rm->data.op_dmaoff == ib_sg_dma_len(dev, scat)) { 660 660 scat++; 661 - off = 0; 661 + rm->data.op_dmasg++; 662 + rm->data.op_dmaoff = 0; 662 663 } 663 664 } 664 665
+11 -7
net/rds/iw_send.c
··· 581 581 ic->i_unsignaled_wrs = rds_iw_sysctl_max_unsig_wrs; 582 582 ic->i_unsignaled_bytes = rds_iw_sysctl_max_unsig_bytes; 583 583 rds_message_addref(rm); 584 + rm->data.op_dmasg = 0; 585 + rm->data.op_dmaoff = 0; 584 586 ic->i_rm = rm; 585 587 586 588 /* Finalize the header */ ··· 624 622 send = &ic->i_sends[pos]; 625 623 first = send; 626 624 prev = NULL; 627 - scat = &rm->data.op_sg[sg]; 625 + scat = &rm->data.op_sg[rm->data.op_dmasg]; 628 626 sent = 0; 629 627 i = 0; 630 628 ··· 658 656 659 657 send = &ic->i_sends[pos]; 660 658 661 - len = min(RDS_FRAG_SIZE, ib_sg_dma_len(dev, scat) - off); 659 + len = min(RDS_FRAG_SIZE, 660 + ib_sg_dma_len(dev, scat) - rm->data.op_dmaoff); 662 661 rds_iw_xmit_populate_wr(ic, send, pos, 663 - ib_sg_dma_address(dev, scat) + off, len, 664 - send_flags); 662 + ib_sg_dma_address(dev, scat) + rm->data.op_dmaoff, len, 663 + send_flags); 665 664 666 665 /* 667 666 * We want to delay signaling completions just enough to get ··· 690 687 &send->s_wr, send->s_wr.num_sge, send->s_wr.next); 691 688 692 689 sent += len; 693 - off += len; 694 - if (off == ib_sg_dma_len(dev, scat)) { 690 + rm->data.op_dmaoff += len; 691 + if (rm->data.op_dmaoff == ib_sg_dma_len(dev, scat)) { 695 692 scat++; 696 - off = 0; 693 + rm->data.op_dmaoff = 0; 694 + rm->data.op_dmasg++; 697 695 } 698 696 699 697 add_header:
+2
net/rds/rds.h
··· 363 363 unsigned int op_active:1; 364 364 unsigned int op_nents; 365 365 unsigned int op_count; 366 + unsigned int op_dmasg; 367 + unsigned int op_dmaoff; 366 368 struct scatterlist *op_sg; 367 369 } data; 368 370 };