From 6778948f9de86c3cfaf36725a7c87dcff9ba247f Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 11 Dec 2023 08:20:59 +0000 Subject: [PATCH] kernel_5.10 no rt --- kernel/drivers/net/ethernet/chelsio/cxgb/sge.c | 53 +++++++---------------------------------------------- 1 files changed, 7 insertions(+), 46 deletions(-) diff --git a/kernel/drivers/net/ethernet/chelsio/cxgb/sge.c b/kernel/drivers/net/ethernet/chelsio/cxgb/sge.c index cda01f2..2d9c2b5 100644 --- a/kernel/drivers/net/ethernet/chelsio/cxgb/sge.c +++ b/kernel/drivers/net/ethernet/chelsio/cxgb/sge.c @@ -940,11 +940,10 @@ /* * SGE 'Error' interrupt handler */ -bool t1_sge_intr_error_handler(struct sge *sge) +int t1_sge_intr_error_handler(struct sge *sge) { struct adapter *adapter = sge->adapter; u32 cause = readl(adapter->regs + A_SG_INT_CAUSE); - bool wake = false; if (adapter->port[0].dev->hw_features & NETIF_F_TSO) cause &= ~F_PACKET_TOO_BIG; @@ -968,14 +967,11 @@ sge->stats.pkt_mismatch++; pr_alert("%s: SGE packet mismatch\n", adapter->name); } - if (cause & SGE_INT_FATAL) { - t1_interrupts_disable(adapter); - adapter->pending_thread_intr |= F_PL_INTR_SGE_ERR; - wake = true; - } + if (cause & SGE_INT_FATAL) + t1_fatal_err(adapter); writel(cause, adapter->regs + A_SG_INT_CAUSE); - return wake; + return 0; } const struct sge_intr_counts *t1_sge_get_intr_counts(const struct sge *sge) @@ -1623,46 +1619,11 @@ return work_done; } -irqreturn_t t1_interrupt_thread(int irq, void *data) -{ - struct adapter *adapter = data; - u32 pending_thread_intr; - - spin_lock_irq(&adapter->async_lock); - pending_thread_intr = adapter->pending_thread_intr; - adapter->pending_thread_intr = 0; - spin_unlock_irq(&adapter->async_lock); - - if (!pending_thread_intr) - return IRQ_NONE; - - if (pending_thread_intr & F_PL_INTR_EXT) - t1_elmer0_ext_intr_handler(adapter); - - /* This error is fatal, interrupts remain off */ - if (pending_thread_intr & F_PL_INTR_SGE_ERR) { - pr_alert("%s: encountered fatal error, operation suspended\n", - adapter->name); - t1_sge_stop(adapter->sge); - return IRQ_HANDLED; - } - - spin_lock_irq(&adapter->async_lock); - adapter->slow_intr_mask |= F_PL_INTR_EXT; - - writel(F_PL_INTR_EXT, adapter->regs + A_PL_CAUSE); - writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA, - adapter->regs + A_PL_ENABLE); - spin_unlock_irq(&adapter->async_lock); - - return IRQ_HANDLED; -} - irqreturn_t t1_interrupt(int irq, void *data) { struct adapter *adapter = data; struct sge *sge = adapter->sge; - irqreturn_t handled; + int handled; if (likely(responses_pending(adapter))) { writel(F_PL_INTR_SGE_DATA, adapter->regs + A_PL_CAUSE); @@ -1684,10 +1645,10 @@ handled = t1_slow_intr_handler(adapter); spin_unlock(&adapter->async_lock); - if (handled == IRQ_NONE) + if (!handled) sge->stats.unhandled_irqs++; - return handled; + return IRQ_RETVAL(handled != 0); } /* -- Gitblit v1.6.2