cxgb3 - remove false positive in xgmac workaround
Subsystems (2)
PATCH RESEND 3/7 cxgb3 - remove false positive in xgmac workaround
From: Divy Le Ray <[email protected]>
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]>
---
drivers/net/cxgb3/common.h | 1 + drivers/net/cxgb3/xgmac.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletions(-)
drivers/net/cxgb3/common.h +1 -0
@@ -513,6 +513,7 @@ struct cmac {u64 rx_mcnt;unsigned int toggle_cnt;unsigned int txen; +u64 rx_pause;struct mac_stats stats; };
drivers/net/cxgb3/xgmac.c +3 -1
@@ -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 */