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 <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]>

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 <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]>

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 <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]>

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 <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]>

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 <[EMAIL PROTECTED]>
Date:   Wed Apr 11 14:44:41 2007 -0500

    Backport rtnl_trylock() for Chelsio Driver.
    
    Signed-off-by: Steve Wise <[EMAIL PROTECTED]>

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 <[EMAIL PROTECTED]>
Date:   Wed Apr 11 11:44:46 2007 -0500

    Initialize cpu_idx field in cpl_close_listserv_req message.
    
    Signed-off-by: Steve Wise <[EMAIL PROTECTED]>

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);


_______________________________________________
general mailing list
[EMAIL PROTECTED]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to