[ofa-general] [GIT PULL] ofed_1_2 - Chelsio bug fixes

Steve Wise swise at opengridcomputing.com
Thu Apr 12 10:59:44 PDT 2007


Vlad,

Please pull these Chelsio cxgb3 and iw_cxgb3 fixes from

git://git.openfabrics.org/~swise/ofed_1_2 ofed_1_2

Short log
--------- 
Divy Le Ray:
      Fix a deadlock when the interface s configured down and
      The MAC watchdog was failing if the peer interface was brought down.
      Remove specific CPL handler.

Steve Wise:
      Initialize cpu_idx field in cpl_close_listserv_req message.
      Backport rtnl_trylock() for Chelsio Driver.
      Add set_tcb_rpl_handler.


Log
--- 

commit f0aa52b40e1da13b06c8ed93f24cf55a905e906d
Author: Steve Wise <swise at opengridcomputing.com>
Date:   Wed Apr 11 14:44:45 2007 -0500

    Add set_tcb_rpl_handler.
    
    The Ethernet Driver no longer handles SET_TCB replies.
    
    Signed-off-by: Steve Wise <swise at opengridcomputing.com>

diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c
index 8c82226..36ab39e 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_cm.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c
@@ -2028,6 +2028,17 @@ static int sched(struct t3cdev *tdev, st
 	return 0;
 }
 
+static int set_tcb_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
+{
+	struct cpl_set_tcb_rpl *rpl = cplhdr(skb);
+	
+	if (rpl->status != CPL_ERR_NONE) {
+		printk(KERN_ERR MOD "Unexpected SET_TCB_RPL status %u "
+		       "for tid %u\n", rpl->status, GET_TID(rpl));
+	}
+	return CPL_RET_BUF_DONE;
+}
+
 int __init iwch_cm_init(void)
 {
 	skb_queue_head_init(&rxq);
@@ -2055,6 +2066,7 @@ int __init iwch_cm_init(void)
 	t3c_handlers[CPL_ABORT_REQ_RSS] = sched;
 	t3c_handlers[CPL_RDMA_TERMINATE] = sched;
 	t3c_handlers[CPL_RDMA_EC_STATUS] = sched;
+	t3c_handlers[CPL_SET_TCB_RPL] = set_tcb_rpl;
 
 	/*
 	 * These are the real handlers that are called from a

commit ce30b4b75ac210fb5b6857897e10112bbff194e1
Author: Divy Le Ray <divy at chelsio.com>
Date:   Wed Apr 11 14:44:45 2007 -0500

    Remove specific CPL handler.
    Add missing CPL handler.
    Add missing register setting when the interface is brought up.
    
    Signed-off-by: Divy Le Ray <divy at chelsio.com>

diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index 859cfe3..475c428 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -766,6 +766,8 @@ static int cxgb_up(struct adapter *adap)
 		if (err)
 			goto out;
 
+		t3_write_reg(adap, A_ULPRX_TDDP_PSZ, V_HPZ0(PAGE_SHIFT - 12));
+		
 		err = setup_sge_qsets(adap);
 		if (err)
 			goto out;
diff --git a/drivers/net/cxgb3/cxgb3_offload.c b/drivers/net/cxgb3/cxgb3_offload.c
index b56e679..3353171 100644
--- a/drivers/net/cxgb3/cxgb3_offload.c
+++ b/drivers/net/cxgb3/cxgb3_offload.c
@@ -741,17 +741,6 @@ static int do_act_establish(struct t3cde
 	}
 }
 
-static int do_set_tcb_rpl(struct t3cdev *dev, struct sk_buff *skb)
-{
-	struct cpl_set_tcb_rpl *rpl = cplhdr(skb);
-
-	if (rpl->status != CPL_ERR_NONE)
-		printk(KERN_ERR
-		       "Unexpected SET_TCB_RPL status %u for tid %u\n",
-		       rpl->status, GET_TID(rpl));
-	return CPL_RET_BUF_DONE;
-}
-
 static int do_trace(struct t3cdev *dev, struct sk_buff *skb)
 {
 	struct cpl_trace_pkt *p = cplhdr(skb);
@@ -1213,7 +1202,8 @@ void __init cxgb3_offload_init(void)
 	t3_register_cpl_handler(CPL_CLOSE_CON_RPL, do_hwtid_rpl);
 	t3_register_cpl_handler(CPL_ABORT_REQ_RSS, do_abort_req_rss);
 	t3_register_cpl_handler(CPL_ACT_ESTABLISH, do_act_establish);
-	t3_register_cpl_handler(CPL_SET_TCB_RPL, do_set_tcb_rpl);
+	t3_register_cpl_handler(CPL_SET_TCB_RPL, do_hwtid_rpl);
+	t3_register_cpl_handler(CPL_GET_TCB_RPL, do_hwtid_rpl);
 	t3_register_cpl_handler(CPL_RDMA_TERMINATE, do_term);
 	t3_register_cpl_handler(CPL_RDMA_EC_STATUS, do_hwtid_rpl);
 	t3_register_cpl_handler(CPL_TRACE_PKT, do_trace);
diff --git a/drivers/net/cxgb3/regs.h b/drivers/net/cxgb3/regs.h
index f8be41c..e5a5534 100644
--- a/drivers/net/cxgb3/regs.h
+++ b/drivers/net/cxgb3/regs.h
@@ -1234,9 +1234,15 @@ #define A_ULPRX_ISCSI_ULIMIT 0x510
 
 #define A_ULPRX_ISCSI_TAGMASK 0x514
 
+#define S_HPZ0    0
+#define M_HPZ0    0xf
+#define V_HPZ0(x) ((x) << S_HPZ0)
+#define G_HPZ0(x) (((x) >> S_HPZ0) & M_HPZ0)
+
 #define A_ULPRX_TDDP_LLIMIT 0x51c
 
 #define A_ULPRX_TDDP_ULIMIT 0x520
+#define A_ULPRX_TDDP_PSZ 0x528
 
 #define A_ULPRX_STAG_LLIMIT 0x52c
 

commit 5a20a3c872ba59675db2bf895806f794506b5692
Author: Divy Le Ray <divy at chelsio.com>
Date:   Wed Apr 11 14:44:44 2007 -0500

    The MAC watchdog was failing if the peer interface was brought down.
    
    Signed-off-by: Divy Le Ray <divy at chelsio.com>

diff --git a/drivers/net/cxgb3/common.h b/drivers/net/cxgb3/common.h
index 97128d8..8d13796 100644
--- a/drivers/net/cxgb3/common.h
+++ b/drivers/net/cxgb3/common.h
@@ -478,8 +478,11 @@ struct cmac {
 	struct adapter *adapter;
 	unsigned int offset;
 	unsigned int nucast;	/* # of address filters for unicast MACs */
-	unsigned int tcnt;
-	unsigned int xcnt;
+	unsigned int tx_tcnt;
+	unsigned int tx_xcnt;
+	u64 tx_mcnt;
+	unsigned int rx_xcnt;
+	u64 rx_mcnt;
 	unsigned int toggle_cnt;
 	unsigned int txen;
 	struct mac_stats stats;
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index 7358016..859cfe3 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -196,15 +196,13 @@ void t3_os_link_changed(struct adapter *
 
 	if (link_stat != netif_carrier_ok(dev)) {
 		if (link_stat) {
-			t3_set_reg_field(adapter,
-					 A_XGM_TXFIFO_CFG + mac->offset,
-					 F_ENDROPPKT, 0);
+			t3_mac_enable(mac, MAC_DIRECTION_RX);
 			netif_carrier_on(dev);
 		} else {
 			netif_carrier_off(dev);
-			t3_set_reg_field(adapter,
-					 A_XGM_TXFIFO_CFG + mac->offset,
-					 F_ENDROPPKT, F_ENDROPPKT);
+			pi->phy.ops->power_down(&pi->phy, 1);
+			t3_mac_disable(mac, MAC_DIRECTION_RX);
+			t3_link_start(&pi->phy, mac, &pi->link_config);
 		}
 
 		link_report(dev);
diff --git a/drivers/net/cxgb3/xgmac.c b/drivers/net/cxgb3/xgmac.c
index 94aaff0..a506792 100644
--- a/drivers/net/cxgb3/xgmac.c
+++ b/drivers/net/cxgb3/xgmac.c
@@ -367,7 +367,8 @@ int t3_mac_enable(struct cmac *mac, int 
 	int idx = macidx(mac);
 	struct adapter *adap = mac->adapter;
 	unsigned int oft = mac->offset;
-
+	struct mac_stats *s = &mac->stats;
+	
 	if (which & MAC_DIRECTION_TX) {
 		t3_write_reg(adap, A_XGM_TX_CTRL + oft, F_TXEN);
 		t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_CFG_CH0 + idx);
@@ -376,10 +377,16 @@ int t3_mac_enable(struct cmac *mac, int 
 		t3_set_reg_field(adap, A_TP_PIO_DATA, 1 << idx, 1 << idx);
 
 		t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_CNT_CH0 + idx);
-		mac->tcnt = (G_TXDROPCNTCH0RCVD(t3_read_reg(adap,
-							    A_TP_PIO_DATA)));
-		mac->xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap,
-						A_XGM_TX_SPI4_SOP_EOP_CNT)));
+		mac->tx_mcnt = s->tx_frames;
+		mac->tx_tcnt = (G_TXDROPCNTCH0RCVD(t3_read_reg(adap,
+							A_TP_PIO_DATA)));
+		mac->tx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap,
+						A_XGM_TX_SPI4_SOP_EOP_CNT +
+						oft)));
+		mac->rx_mcnt = s->rx_frames;
+		mac->rx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap,
+						A_XGM_RX_SPI4_SOP_EOP_CNT +
+						oft)));
 		mac->txen = F_TXEN;
 		mac->toggle_cnt = 0;
 	}
@@ -392,6 +399,7 @@ int t3_mac_disable(struct cmac *mac, int
 {
 	int idx = macidx(mac);
 	struct adapter *adap = mac->adapter;
+	int val;
 
 	if (which & MAC_DIRECTION_TX) {
 		t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset, 0);
@@ -401,44 +409,89 @@ int t3_mac_disable(struct cmac *mac, int
 		t3_set_reg_field(adap, A_TP_PIO_DATA, 1 << idx, 1 << idx);
 		mac->txen = 0;
 	}
-	if (which & MAC_DIRECTION_RX)
+	if (which & MAC_DIRECTION_RX) {
+		t3_set_reg_field(mac->adapter, A_XGM_RESET_CTRL + mac->offset,
+				 F_PCS_RESET_, 0);
+		msleep(100);
 		t3_write_reg(adap, A_XGM_RX_CTRL + mac->offset, 0);
+		val = F_MAC_RESET_;
+		if (is_10G(adap))
+			val |= F_PCS_RESET_;
+		else if (uses_xaui(adap))
+			val |= F_PCS_RESET_ | F_XG2G_RESET_;
+		else
+			val |= F_RGMII_RESET_ | F_XG2G_RESET_;
+		t3_write_reg(mac->adapter, A_XGM_RESET_CTRL + mac->offset, val);
+	}
 	return 0;
 }
 
 int t3b2_mac_watchdog_task(struct cmac *mac)
 {
 	struct adapter *adap = mac->adapter;
-	unsigned int tcnt, xcnt;
+	struct mac_stats *s = &mac->stats;
+	unsigned int tx_tcnt, tx_xcnt;
+	unsigned int tx_mcnt = s->tx_frames;
+	unsigned int rx_mcnt = s->rx_frames;
+	unsigned int rx_xcnt;
 	int status;
 
-	t3_write_reg(adap, A_TP_PIO_ADDR, A_TP_TX_DROP_CNT_CH0 + macidx(mac));
-	tcnt = (G_TXDROPCNTCH0RCVD(t3_read_reg(adap, A_TP_PIO_DATA)));
-	xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap, 
-					   A_XGM_TX_SPI4_SOP_EOP_CNT +
-					   mac->offset)));
-
-	if (tcnt != mac->tcnt && xcnt == 0 && mac->xcnt == 0) {
-		if (mac->toggle_cnt > 4) {
-			t3b2_mac_reset(mac);
+	if (tx_mcnt == mac->tx_mcnt) {
+		tx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap,
+						A_XGM_TX_SPI4_SOP_EOP_CNT +
+					       	mac->offset)));
+		if (tx_xcnt == 0) {
+			t3_write_reg(adap, A_TP_PIO_ADDR,
+				     A_TP_TX_DROP_CNT_CH0 + macidx(mac));
+			tx_tcnt = (G_TXDROPCNTCH0RCVD(t3_read_reg(adap,
+						      A_TP_PIO_DATA)));
+		} else {
 			mac->toggle_cnt = 0;
+			return 0;
+		}
+	} else {
+		mac->toggle_cnt = 0;
+		return 0;
+	}
+
+	if (((tx_tcnt != mac->tx_tcnt) &&
+	     (tx_xcnt == 0) && (mac->tx_xcnt == 0)) ||
+	    ((mac->tx_mcnt == tx_mcnt) &&
+	     (tx_xcnt != 0) && (mac->tx_xcnt != 0))) {
+		if (mac->toggle_cnt > 4)
 			status = 2;
-		} else {
-			t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset, 0);
-			t3_read_reg(adap, A_XGM_TX_CTRL + mac->offset);
-			t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset,
-				     mac->txen);
-			t3_read_reg(adap, A_XGM_TX_CTRL + mac->offset);
-			mac->toggle_cnt++;
+		else 
 			status = 1;
-		}	
 	} else {
 		mac->toggle_cnt = 0;
-		status = 0;
+		return 0;
 	}
-	mac->tcnt = tcnt;
-	mac->xcnt = xcnt;
 
+	if (rx_mcnt != mac->rx_mcnt)
+		rx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap,
+						A_XGM_RX_SPI4_SOP_EOP_CNT +
+						mac->offset)));
+	else 
+		return 0;
+
+	if (mac->rx_mcnt != s->rx_frames && rx_xcnt == 0 && mac->rx_xcnt == 0) 
+		status = 2;
+	
+	mac->tx_tcnt = tx_tcnt;
+	mac->tx_xcnt = tx_xcnt;
+	mac->tx_mcnt = s->tx_frames;
+	mac->rx_xcnt = rx_xcnt;
+	mac->rx_mcnt = s->rx_frames;
+	if (status == 1) {
+		t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset, 0);
+		t3_read_reg(adap, A_XGM_TX_CTRL + mac->offset);  /* flush */
+		t3_write_reg(adap, A_XGM_TX_CTRL + mac->offset, mac->txen);
+		t3_read_reg(adap, A_XGM_TX_CTRL + mac->offset);  /* flush */
+		mac->toggle_cnt++;
+	} else if (status == 2) {
+		t3b2_mac_reset(mac);
+		mac->toggle_cnt = 0;
+	}
 	return status;
 }
 

commit 567e6ee8d3c62d1f505dc0a2d92d12859e8c68e1
Author: Divy Le Ray <divy at chelsio.com>
Date:   Wed Apr 11 14:44:44 2007 -0500

    Fix a deadlock when the interface s configured down and
    the watchdog tack is sleeping on rtnl_lock.
    
    Signed-off-by: Divy Le Ray <divy at chelsio.com>

diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index 81262e5..7358016 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -2114,7 +2114,9 @@ static void check_t3b2_mac(struct adapte
 {
 	int i;
 
-	rtnl_lock();                      /* synchronize with ifdown */
+	if (!rtnl_trylock())	/* synchronize with ifdown */
+		return;
+
 	for_each_port(adapter, i) {
 		struct net_device *dev = adapter->port[i];
 		struct port_info *p = netdev_priv(dev);

commit 4a117060a593ecc3f3c6e321437362f2882b0159
Author: Steve Wise <swise at opengridcomputing.com>
Date:   Wed Apr 11 14:44:41 2007 -0500

    Backport rtnl_trylock() for Chelsio Driver.
    
    Signed-off-by: Steve Wise <swise at opengridcomputing.com>

diff --git a/kernel_addons/backport/2.6.11/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.11/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.11/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.11_FC4/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.11_FC4/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.11_FC4/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.12/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.12/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.12/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.13/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.13/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.13/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.13_suse10_0_u/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.13_suse10_0_u/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.13_suse10_0_u/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.14/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.14/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.14/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.15/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.15/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.15/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.15_ubuntu606/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.15_ubuntu606/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.15_ubuntu606/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.16/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.16/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.16/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.16_sles10/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.16_sles10/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.16_sles10/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.16_sles10_sp1/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.16_sles10_sp1/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.16_sles10_sp1/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.5_sles9_sp3/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.5_sles9_sp3/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.5_sles9_sp3/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.9_U2/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.9_U2/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.9_U2/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.9_U3/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.9_U3/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.9_U3/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif
diff --git a/kernel_addons/backport/2.6.9_U4/include/linux/rtnetlink.h b/kernel_addons/backport/2.6.9_U4/include/linux/rtnetlink.h
new file mode 100644
index 0000000..36344d7
--- /dev/null
+++ b/kernel_addons/backport/2.6.9_U4/include/linux/rtnetlink.h
@@ -0,0 +1,10 @@
+#ifndef BACKPORT_RTNETLINK_2_6_16
+#define BACKPORT_RTNETLINK_2_6_16
+#include_next <linux/rtnetlink.h>
+
+static inline int rtnl_trylock(void)
+{
+	return !rtnl_shlock_nowait();
+}
+
+#endif

commit cd78b9f2815ca4e8aa99f1eb4d198f5aa5f8fd37
Author: Steve Wise <swise at opengridcomputing.com>
Date:   Wed Apr 11 11:44:46 2007 -0500

    Initialize cpu_idx field in cpl_close_listserv_req message.
    
    Signed-off-by: Steve Wise <swise at opengridcomputing.com>

diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c
index ac91a96..8c82226 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_cm.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c
@@ -1188,6 +1188,7 @@ static int listen_stop(struct iwch_liste
 	}
 	req = (struct cpl_close_listserv_req *) skb_put(skb, sizeof(*req));
 	req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
+	req->cpu_idx = 0;
 	OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_CLOSE_LISTSRV_REQ, ep->stid));
 	skb->priority = 1;
 	ep->com.tdev->send(ep->com.tdev, skb);





More information about the general mailing list