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/subr.c | 64 +++++++++---------------------- 1 files changed, 19 insertions(+), 45 deletions(-) diff --git a/kernel/drivers/net/ethernet/chelsio/cxgb/subr.c b/kernel/drivers/net/ethernet/chelsio/cxgb/subr.c index 310add2..ea0f874 100644 --- a/kernel/drivers/net/ethernet/chelsio/cxgb/subr.c +++ b/kernel/drivers/net/ethernet/chelsio/cxgb/subr.c @@ -170,7 +170,7 @@ t1_link_negotiated(adapter, port_id, link_ok, speed, duplex, fc); } -static bool t1_pci_intr_handler(adapter_t *adapter) +static int t1_pci_intr_handler(adapter_t *adapter) { u32 pcix_cause; @@ -179,13 +179,9 @@ if (pcix_cause) { pci_write_config_dword(adapter->pdev, A_PCICFG_INTR_CAUSE, pcix_cause); - /* PCI errors are fatal */ - t1_interrupts_disable(adapter); - adapter->pending_thread_intr |= F_PL_INTR_SGE_ERR; - pr_alert("%s: PCI error encountered.\n", adapter->name); - return true; + t1_fatal_err(adapter); /* PCI errors are fatal */ } - return false; + return 0; } #ifdef CONFIG_CHELSIO_T1_1G @@ -214,16 +210,13 @@ /* * Slow path interrupt handler for FPGAs. */ -static irqreturn_t fpga_slow_intr(adapter_t *adapter) +static int fpga_slow_intr(adapter_t *adapter) { u32 cause = readl(adapter->regs + A_PL_CAUSE); - irqreturn_t ret = IRQ_NONE; cause &= ~F_PL_INTR_SGE_DATA; - if (cause & F_PL_INTR_SGE_ERR) { - if (t1_sge_intr_error_handler(adapter->sge)) - ret = IRQ_WAKE_THREAD; - } + if (cause & F_PL_INTR_SGE_ERR) + t1_sge_intr_error_handler(adapter->sge); if (cause & FPGA_PCIX_INTERRUPT_GMAC) fpga_phy_intr_handler(adapter); @@ -238,19 +231,14 @@ /* Clear TP interrupt */ writel(tp_cause, adapter->regs + FPGA_TP_ADDR_INTERRUPT_CAUSE); } - if (cause & FPGA_PCIX_INTERRUPT_PCIX) { - if (t1_pci_intr_handler(adapter)) - ret = IRQ_WAKE_THREAD; - } + if (cause & FPGA_PCIX_INTERRUPT_PCIX) + t1_pci_intr_handler(adapter); /* Clear the interrupts just processed. */ if (cause) writel(cause, adapter->regs + A_PL_CAUSE); - if (ret != IRQ_NONE) - return ret; - - return cause == 0 ? IRQ_NONE : IRQ_HANDLED; + return cause != 0; } #endif @@ -854,45 +842,31 @@ /* * Slow path interrupt handler for ASICs. */ -static irqreturn_t asic_slow_intr(adapter_t *adapter) +static int asic_slow_intr(adapter_t *adapter) { u32 cause = readl(adapter->regs + A_PL_CAUSE); - irqreturn_t ret = IRQ_HANDLED; cause &= adapter->slow_intr_mask; if (!cause) - return IRQ_NONE; - if (cause & F_PL_INTR_SGE_ERR) { - if (t1_sge_intr_error_handler(adapter->sge)) - ret = IRQ_WAKE_THREAD; - } + return 0; + if (cause & F_PL_INTR_SGE_ERR) + t1_sge_intr_error_handler(adapter->sge); if (cause & F_PL_INTR_TP) t1_tp_intr_handler(adapter->tp); if (cause & F_PL_INTR_ESPI) t1_espi_intr_handler(adapter->espi); - if (cause & F_PL_INTR_PCIX) { - if (t1_pci_intr_handler(adapter)) - ret = IRQ_WAKE_THREAD; - } - if (cause & F_PL_INTR_EXT) { - /* Wake the threaded interrupt to handle external interrupts as - * we require a process context. We disable EXT interrupts in - * the interim and let the thread reenable them when it's done. - */ - adapter->pending_thread_intr |= F_PL_INTR_EXT; - adapter->slow_intr_mask &= ~F_PL_INTR_EXT; - writel(adapter->slow_intr_mask | F_PL_INTR_SGE_DATA, - adapter->regs + A_PL_ENABLE); - ret = IRQ_WAKE_THREAD; - } + if (cause & F_PL_INTR_PCIX) + t1_pci_intr_handler(adapter); + if (cause & F_PL_INTR_EXT) + t1_elmer0_ext_intr(adapter); /* Clear the interrupts just processed. */ writel(cause, adapter->regs + A_PL_CAUSE); readl(adapter->regs + A_PL_CAUSE); /* flush writes */ - return ret; + return 1; } -irqreturn_t t1_slow_intr_handler(adapter_t *adapter) +int t1_slow_intr_handler(adapter_t *adapter) { #ifdef CONFIG_CHELSIO_T1_1G if (!t1_is_asic(adapter)) -- Gitblit v1.6.2