Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b4687ff753c2c5c330989efed7cdf1a6bc6b512e
Commit:     b4687ff753c2c5c330989efed7cdf1a6bc6b512e
Parent:     3eea3337a08a2ed2addac1551a9d446f2c16acd5
Author:     Divy Le Ray <[EMAIL PROTECTED]>
AuthorDate: Wed Sep 5 15:58:20 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Oct 10 16:51:04 2007 -0700

    cxgb3 - remove false positive in xgmac workaround
    
    Qualify toggling of xgmac tx enable with not getting pause frames,
    we might not make forward progress because the peer is sending
    lots of pause frames.
    
    Signed-off-by: Divy Le Ray <[EMAIL PROTECTED]>
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
---
 drivers/net/cxgb3/common.h |    1 +
 drivers/net/cxgb3/xgmac.c  |    4 +++-
 2 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/drivers/net/cxgb3/common.h b/drivers/net/cxgb3/common.h
index ada5e4b..7e9e43d 100644
--- a/drivers/net/cxgb3/common.h
+++ b/drivers/net/cxgb3/common.h
@@ -513,6 +513,7 @@ struct cmac {
        u64 rx_mcnt;
        unsigned int toggle_cnt;
        unsigned int txen;
+       u64 rx_pause;
        struct mac_stats stats;
 };
 
diff --git a/drivers/net/cxgb3/xgmac.c b/drivers/net/cxgb3/xgmac.c
index 1d1c391..ff9e9dc 100644
--- a/drivers/net/cxgb3/xgmac.c
+++ b/drivers/net/cxgb3/xgmac.c
@@ -452,6 +452,7 @@ int t3_mac_enable(struct cmac *mac, int which)
                                                A_XGM_TX_SPI4_SOP_EOP_CNT +
                                                oft)));
                mac->rx_mcnt = s->rx_frames;
+               mac->rx_pause = s->rx_pause;
                mac->rx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap,
                                                A_XGM_RX_SPI4_SOP_EOP_CNT +
                                                oft)));
@@ -504,7 +505,7 @@ int t3b2_mac_watchdog_task(struct cmac *mac)
        tx_xcnt = 1;            /* By default tx_xcnt is making progress */
        tx_tcnt = mac->tx_tcnt; /* If tx_mcnt is progressing ignore tx_tcnt */
        rx_xcnt = 1;            /* By default rx_xcnt is making progress */
-       if (tx_mcnt == mac->tx_mcnt) {
+       if (tx_mcnt == mac->tx_mcnt && mac->rx_pause == s->rx_pause) {
                tx_xcnt = (G_TXSPI4SOPCNT(t3_read_reg(adap,
                                                A_XGM_TX_SPI4_SOP_EOP_CNT +
                                                mac->offset)));
@@ -560,6 +561,7 @@ out:
        mac->tx_mcnt = s->tx_frames;
        mac->rx_xcnt = rx_xcnt;
        mac->rx_mcnt = s->rx_frames;
+       mac->rx_pause = s->rx_pause;
        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 */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to