cxgb3 - reset the adapter on fatal error
Subsystems (2)
PATCH 1/7 cxgb3 - reset the adapter on fatal error
From: Divy Le Ray <[email protected]>
when a fatal error occurs, bring ports down, reset the chip, and bring ports back up.
Factorize code used for both EEH and fatal error recovery. Fix timer usage when bringing up/resetting sge queue sets.
Signed-off-by Divy Le Ray <[email protected]>
---
drivers/net/cxgb3/adapter.h | 1 drivers/net/cxgb3/common.h | 1 drivers/net/cxgb3/cxgb3_main.c | 164 +++++++++++++++++++++++++++------------- drivers/net/cxgb3/sge.c | 9 +- drivers/net/cxgb3/t3_hw.c | 4 - 5 files changed, 119 insertions(+), 60 deletions(-)
drivers/net/cxgb3/adapter.h +1 -0
@@ -240,6 +240,7 @@ struct adapter {unsigned int check_task_cnt;struct delayed_work adap_check_task;struct work_struct ext_intr_handler_task; +struct work_struct fatal_error_handler_task;struct dentry *debugfs_root;
drivers/net/cxgb3/common.h +1 -0
@@ -698,6 +698,7 @@ int t3_check_fw_version(struct adapter *adapter, int *must_load);int t3_init_hw (struct adapter *adapter,u32 fw_params);void mac_prep (struct cmac *mac,struct adapter *adapter,int index);void early_hw_init (struct adapter *adapter,const struct adapter_info *ai); +int t3_reset_adapter (struct adapter *adapter);int t3_prep_adapter (struct adapter *adapter,const struct adapter_info *ai,int reset);int t3_replay_prep_adapter (struct adapter *adapter);
drivers/net/cxgb3/cxgb3_main.c +111 -53
225 lines not on this page · raw message
drivers/net/cxgb3/sge.c +4 -5
@@ -351,7 +351,8 @@ static void free_rx_bufs(struct pci_dev *pdev, struct sge_fl *q)pci_unmap_single (pdev,pci_unmap_addr (d, dma_addr), q->buf_size,PCI_DMA_FROMDEVICE );if (q->use_pages) { -put_page (d->pg_chunk.page); +if (d->pg_chunk.page) +put_page (d->pg_chunk.page); d->pg_chunk.page =NULL ; }else {kfree_skb (d->skb);
@@ -583,7 +584,7 @@ static void t3_reset_qset(struct sge_qset *q)memset (q->fl,0 ,sizeof (struct sge_fl ) *SGE_RXQ_PER_SET );memset (q->txq,0 ,sizeof (struct sge_txq ) *SGE_TXQ_PER_SET ); q->txq_stopped =0 ; -memset (&q->tx_reclaim_timer,0 ,sizeof (q->tx_reclaim_timer)); + q->tx_reclaim_timer.function =NULL ;/* for t3_stop_sge_timers() */ kfree (q->lro_frag_tbl); q->lro_nfrags = q->lro_frag_len =0 ; }
@@ -2840,9 +2841,7 @@ int t3_sge_alloc_qset(struct adapter *adapter, unsigned int id, int nports,struct net_lro_mgr *lro_mgr = &q->lro_mgr;init_qset_cntxt (q, id); -init_timer (&q->tx_reclaim_timer); - q->tx_reclaim_timer.data = (unsigned long )q; - q->tx_reclaim_timer.function = sge_timer_cb; +setup_timer (&q->tx_reclaim_timer, sge_timer_cb, (unsigned long )q); q->fl[0].desc = alloc_ring(adapter->pdev, p->fl_size, sizeof(struct rx_desc),
drivers/net/cxgb3/t3_hw.c +2 -2
@@ -1221,7 +1221,7 @@ struct intr_info {unsigned int mask;/* bits to check in interrupt status */ const char *msg;/* message to print or NULL */ short stat_idx;/* stat counter to increment or -1 */ - unsigned short fatal:1; /* whether the condition reported is fatal */ +unsigned short fatal;/* whether the condition reported is fatal */ };/**
@@ -3488,7 +3488,7 @@ void early_hw_init(struct adapter *adapter, const struct adapter_info *ai)* Older PCIe cards lose their config space during reset, PCI-X * ones don't. */ -static int t3_reset_adapter (struct adapter *adapter) +int t3_reset_adapter (struct adapter *adapter) {int i, save_and_restore_pcie = adapter->params.rev <T3_REV_B2 &&is_pcie (adapter);
From: Divy Le Ray <[email protected]>
Date: Wed, 08 Oct 2008 17:33:57 -0700
Quoted 7 lines
when a fatal error occurs, bring ports down, reset the chip, and bring ports back up.
Factorize code used for both EEH and fatal error recovery. Fix timer usage when bringing up/resetting sge queue sets.
Signed-off-by Divy Le Ray <[email protected]>
Applied.