aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-10-07 04:19:49 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-10-07 04:19:49 -0400
commitca4da6948bc6a7010ecf916dad528c177dcb9a81 (patch)
treedfc17d206fdeccb4ee532a19e5ee95161ed5ef77
parented5062ddaa71e9f8b2b3aacc264428ce6da93d9e (diff)
parent56040f07b26bb32f4b70ec2192ecddeb6cef3754 (diff)
Merge tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
Pull infiniband changes from Roland Dreier: "Second batch of changes for the 3.7 merge window: - Late-breaking fix for IPoIB on mlx4 SR-IOV VFs. - Fix for IPoIB build breakage with CONFIG_INFINIBAND_IPOIB_CM=n (new netlink config changes are to blame). - Make sure retry count values are in range in RDMA CM. - A few nes hardware driver fixes and cleanups. - Have iSER initiator use >1 interrupt vectors if available." * tag 'rdma-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: RDMA/cma: Check that retry count values are in range IB/iser: Add more RX CQs to scale out processing of SCSI responses RDMA/nes: Bump the version number of nes driver RDMA/nes: Remove unused module parameter "send_first" RDMA/nes: Remove unnecessary if-else statement RDMA/nes: Add missing break to switch. mlx4_core: Adjust flow steering attach wrapper so that IB works on SR-IOV VFs IPoIB: Fix build with CONFIG_INFINIBAND_IPOIB_CM=n
-rw-r--r--drivers/infiniband/core/cma.c6
-rw-r--r--drivers/infiniband/hw/nes/nes.c5
-rw-r--r--drivers/infiniband/hw/nes/nes.h3
-rw-r--r--drivers/infiniband/hw/nes/nes_verbs.c16
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib.h4
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_cm.c31
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_main.c31
-rw-r--r--drivers/infiniband/ulp/iser/iscsi_iser.h17
-rw-r--r--drivers/infiniband/ulp/iser/iser_verbs.c130
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/resource_tracker.c2
10 files changed, 146 insertions, 99 deletions
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 26b37603dcf1..1983adc19243 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -2648,8 +2648,8 @@ static int cma_connect_ib(struct rdma_id_private *id_priv,
2648 req.responder_resources = conn_param->responder_resources; 2648 req.responder_resources = conn_param->responder_resources;
2649 req.initiator_depth = conn_param->initiator_depth; 2649 req.initiator_depth = conn_param->initiator_depth;
2650 req.flow_control = conn_param->flow_control; 2650 req.flow_control = conn_param->flow_control;
2651 req.retry_count = conn_param->retry_count; 2651 req.retry_count = min_t(u8, 7, conn_param->retry_count);
2652 req.rnr_retry_count = conn_param->rnr_retry_count; 2652 req.rnr_retry_count = min_t(u8, 7, conn_param->rnr_retry_count);
2653 req.remote_cm_response_timeout = CMA_CM_RESPONSE_TIMEOUT; 2653 req.remote_cm_response_timeout = CMA_CM_RESPONSE_TIMEOUT;
2654 req.local_cm_response_timeout = CMA_CM_RESPONSE_TIMEOUT; 2654 req.local_cm_response_timeout = CMA_CM_RESPONSE_TIMEOUT;
2655 req.max_cm_retries = CMA_MAX_CM_RETRIES; 2655 req.max_cm_retries = CMA_MAX_CM_RETRIES;
@@ -2770,7 +2770,7 @@ static int cma_accept_ib(struct rdma_id_private *id_priv,
2770 rep.initiator_depth = conn_param->initiator_depth; 2770 rep.initiator_depth = conn_param->initiator_depth;
2771 rep.failover_accepted = 0; 2771 rep.failover_accepted = 0;
2772 rep.flow_control = conn_param->flow_control; 2772 rep.flow_control = conn_param->flow_control;
2773 rep.rnr_retry_count = conn_param->rnr_retry_count; 2773 rep.rnr_retry_count = min_t(u8, 7, conn_param->rnr_retry_count);
2774 rep.srq = id_priv->srq ? 1 : 0; 2774 rep.srq = id_priv->srq ? 1 : 0;
2775 2775
2776 ret = ib_send_cm_rep(id_priv->cm_id.ib, &rep); 2776 ret = ib_send_cm_rep(id_priv->cm_id.ib, &rep);
diff --git a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c
index 7140199f562e..748db2d3e465 100644
--- a/drivers/infiniband/hw/nes/nes.c
+++ b/drivers/infiniband/hw/nes/nes.c
@@ -79,11 +79,6 @@ int disable_mpa_crc = 0;
79module_param(disable_mpa_crc, int, 0644); 79module_param(disable_mpa_crc, int, 0644);
80MODULE_PARM_DESC(disable_mpa_crc, "Disable checking of MPA CRC"); 80MODULE_PARM_DESC(disable_mpa_crc, "Disable checking of MPA CRC");
81 81
82unsigned int send_first = 0;
83module_param(send_first, int, 0644);
84MODULE_PARM_DESC(send_first, "Send RDMA Message First on Active Connection");
85
86
87unsigned int nes_drv_opt = NES_DRV_OPT_DISABLE_INT_MOD | NES_DRV_OPT_ENABLE_PAU; 82unsigned int nes_drv_opt = NES_DRV_OPT_DISABLE_INT_MOD | NES_DRV_OPT_ENABLE_PAU;
88module_param(nes_drv_opt, int, 0644); 83module_param(nes_drv_opt, int, 0644);
89MODULE_PARM_DESC(nes_drv_opt, "Driver option parameters"); 84MODULE_PARM_DESC(nes_drv_opt, "Driver option parameters");
diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h
index 0da62b904d00..5cac29e6bc1c 100644
--- a/drivers/infiniband/hw/nes/nes.h
+++ b/drivers/infiniband/hw/nes/nes.h
@@ -57,7 +57,7 @@
57#define QUEUE_DISCONNECTS 57#define QUEUE_DISCONNECTS
58 58
59#define DRV_NAME "iw_nes" 59#define DRV_NAME "iw_nes"
60#define DRV_VERSION "1.5.0.0" 60#define DRV_VERSION "1.5.0.1"
61#define PFX DRV_NAME ": " 61#define PFX DRV_NAME ": "
62 62
63/* 63/*
@@ -172,7 +172,6 @@ extern int interrupt_mod_interval;
172extern int nes_if_count; 172extern int nes_if_count;
173extern int mpa_version; 173extern int mpa_version;
174extern int disable_mpa_crc; 174extern int disable_mpa_crc;
175extern unsigned int send_first;
176extern unsigned int nes_drv_opt; 175extern unsigned int nes_drv_opt;
177extern unsigned int nes_debug_level; 176extern unsigned int nes_debug_level;
178extern unsigned int wqm_quanta; 177extern unsigned int wqm_quanta;
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index 1dadcf388c02..cd0ecb215cca 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -3006,6 +3006,7 @@ int nes_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
3006 switch (nesqp->hw_iwarp_state) { 3006 switch (nesqp->hw_iwarp_state) {
3007 case NES_AEQE_IWARP_STATE_CLOSING: 3007 case NES_AEQE_IWARP_STATE_CLOSING:
3008 next_iwarp_state = NES_CQP_QP_IWARP_STATE_CLOSING; 3008 next_iwarp_state = NES_CQP_QP_IWARP_STATE_CLOSING;
3009 break;
3009 case NES_AEQE_IWARP_STATE_TERMINATE: 3010 case NES_AEQE_IWARP_STATE_TERMINATE:
3010 next_iwarp_state = NES_CQP_QP_IWARP_STATE_TERMINATE; 3011 next_iwarp_state = NES_CQP_QP_IWARP_STATE_TERMINATE;
3011 break; 3012 break;
@@ -3068,18 +3069,9 @@ int nes_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
3068 } 3069 }
3069 3070
3070 nesqp->ibqp_state = attr->qp_state; 3071 nesqp->ibqp_state = attr->qp_state;
3071 if (((nesqp->iwarp_state & NES_CQP_QP_IWARP_STATE_MASK) == 3072 nesqp->iwarp_state = next_iwarp_state & NES_CQP_QP_IWARP_STATE_MASK;
3072 (u32)NES_CQP_QP_IWARP_STATE_RTS) && 3073 nes_debug(NES_DBG_MOD_QP, "Change nesqp->iwarp_state=%08x\n",
3073 ((next_iwarp_state & NES_CQP_QP_IWARP_STATE_MASK) > 3074 nesqp->iwarp_state);
3074 (u32)NES_CQP_QP_IWARP_STATE_RTS)) {
3075 nesqp->iwarp_state = next_iwarp_state & NES_CQP_QP_IWARP_STATE_MASK;
3076 nes_debug(NES_DBG_MOD_QP, "Change nesqp->iwarp_state=%08x\n",
3077 nesqp->iwarp_state);
3078 } else {
3079 nesqp->iwarp_state = next_iwarp_state & NES_CQP_QP_IWARP_STATE_MASK;
3080 nes_debug(NES_DBG_MOD_QP, "Change nesqp->iwarp_state=%08x\n",
3081 nesqp->iwarp_state);
3082 }
3083 } 3075 }
3084 3076
3085 if (attr_mask & IB_QP_ACCESS_FLAGS) { 3077 if (attr_mask & IB_QP_ACCESS_FLAGS) {
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h
index 196eb52f0035..07ca6fd5546b 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -535,14 +535,14 @@ void ipoib_drain_cq(struct net_device *dev);
535void ipoib_set_ethtool_ops(struct net_device *dev); 535void ipoib_set_ethtool_ops(struct net_device *dev);
536int ipoib_set_dev_features(struct ipoib_dev_priv *priv, struct ib_device *hca); 536int ipoib_set_dev_features(struct ipoib_dev_priv *priv, struct ib_device *hca);
537 537
538#ifdef CONFIG_INFINIBAND_IPOIB_CM
539
540#define IPOIB_FLAGS_RC 0x80 538#define IPOIB_FLAGS_RC 0x80
541#define IPOIB_FLAGS_UC 0x40 539#define IPOIB_FLAGS_UC 0x40
542 540
543/* We don't support UC connections at the moment */ 541/* We don't support UC connections at the moment */
544#define IPOIB_CM_SUPPORTED(ha) (ha[0] & (IPOIB_FLAGS_RC)) 542#define IPOIB_CM_SUPPORTED(ha) (ha[0] & (IPOIB_FLAGS_RC))
545 543
544#ifdef CONFIG_INFINIBAND_IPOIB_CM
545
546extern int ipoib_max_conn_qp; 546extern int ipoib_max_conn_qp;
547 547
548static inline int ipoib_cm_admin_enabled(struct net_device *dev) 548static inline int ipoib_cm_admin_enabled(struct net_device *dev)
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 175581cf478c..72ae63f0072d 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -1448,37 +1448,6 @@ static ssize_t show_mode(struct device *d, struct device_attribute *attr,
1448 return sprintf(buf, "datagram\n"); 1448 return sprintf(buf, "datagram\n");
1449} 1449}
1450 1450
1451int ipoib_set_mode(struct net_device *dev, const char *buf)
1452{
1453 struct ipoib_dev_priv *priv = netdev_priv(dev);
1454
1455 /* flush paths if we switch modes so that connections are restarted */
1456 if (IPOIB_CM_SUPPORTED(dev->dev_addr) && !strcmp(buf, "connected\n")) {
1457 set_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags);
1458 ipoib_warn(priv, "enabling connected mode "
1459 "will cause multicast packet drops\n");
1460 netdev_update_features(dev);
1461 rtnl_unlock();
1462 priv->tx_wr.send_flags &= ~IB_SEND_IP_CSUM;
1463
1464 ipoib_flush_paths(dev);
1465 rtnl_lock();
1466 return 0;
1467 }
1468
1469 if (!strcmp(buf, "datagram\n")) {
1470 clear_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags);
1471 netdev_update_features(dev);
1472 dev_set_mtu(dev, min(priv->mcast_mtu, dev->mtu));
1473 rtnl_unlock();
1474 ipoib_flush_paths(dev);
1475 rtnl_lock();
1476 return 0;
1477 }