diff mbox

net/tg3: Release IRQs on permanent error

Message ID 1429852943-28953-1-git-send-email-gwshan@linux.vnet.ibm.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Gavin Shan April 24, 2015, 5:22 a.m. UTC
When having permanent EEH error, the PCI device will be removed
from the system. For this case, we shouldn't set pcierr_recovery
to true wrongly, which blocks the driver to release the allocated
interrupts and their handlers. Eventually, we can't disable MSI
or MSIx successfully because of the MSI or MSIx interrupts still
have associated interrupt actions, which is turned into following
stack dump.

Oops: Exception in kernel mode, sig: 5 [#1]
        :
[c0000000003b76a8] .free_msi_irqs+0x80/0x1a0 (unreliable)
[c00000000039f388] .pci_remove_bus_device+0x98/0x110
[c0000000000790f4] .pcibios_remove_pci_devices+0x9c/0x128
[c000000000077b98] .handle_eeh_events+0x2d8/0x4b0
[c0000000000782d0] .eeh_event_handler+0x130/0x1c0
[c000000000022bd4] .kernel_thread+0x54/0x70

Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 drivers/net/ethernet/broadcom/tg3.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Prashant Sreedharan April 24, 2015, 9:59 p.m. UTC | #1
On Fri, 2015-04-24 at 15:22 +1000, Gavin Shan wrote:
> When having permanent EEH error, the PCI device will be removed
> from the system. For this case, we shouldn't set pcierr_recovery
> to true wrongly, which blocks the driver to release the allocated
> interrupts and their handlers. Eventually, we can't disable MSI
> or MSIx successfully because of the MSI or MSIx interrupts still
> have associated interrupt actions, which is turned into following
> stack dump.
> 
> Oops: Exception in kernel mode, sig: 5 [#1]
>         :
> [c0000000003b76a8] .free_msi_irqs+0x80/0x1a0 (unreliable)
> [c00000000039f388] .pci_remove_bus_device+0x98/0x110
> [c0000000000790f4] .pcibios_remove_pci_devices+0x9c/0x128
> [c000000000077b98] .handle_eeh_events+0x2d8/0x4b0
> [c0000000000782d0] .eeh_event_handler+0x130/0x1c0
> [c000000000022bd4] .kernel_thread+0x54/0x70
> 
> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
> ---
>  drivers/net/ethernet/broadcom/tg3.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
> index 1270b18..069952f 100644
> --- a/drivers/net/ethernet/broadcom/tg3.c
> +++ b/drivers/net/ethernet/broadcom/tg3.c
> @@ -18129,7 +18129,9 @@ static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
>  
>  	rtnl_lock();
>  
> -	tp->pcierr_recovery = true;
> +	/* We needn't recover from permanent error */
> +	if (state == pci_channel_io_frozen)
> +		tp->pcierr_recovery = true;
>  
>  	/* We probably don't have netdev yet */
>  	if (!netdev || !netif_running(netdev))

Acked-by: Prashant Sreedharan <prashant@broadcom.com>


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller April 25, 2015, 6:42 p.m. UTC | #2
From: Gavin Shan <gwshan@linux.vnet.ibm.com>
Date: Fri, 24 Apr 2015 15:22:23 +1000

> When having permanent EEH error, the PCI device will be removed
> from the system. For this case, we shouldn't set pcierr_recovery
> to true wrongly, which blocks the driver to release the allocated
> interrupts and their handlers. Eventually, we can't disable MSI
> or MSIx successfully because of the MSI or MSIx interrupts still
> have associated interrupt actions, which is turned into following
> stack dump.
> 
> Oops: Exception in kernel mode, sig: 5 [#1]
>         :
> [c0000000003b76a8] .free_msi_irqs+0x80/0x1a0 (unreliable)
> [c00000000039f388] .pci_remove_bus_device+0x98/0x110
> [c0000000000790f4] .pcibios_remove_pci_devices+0x9c/0x128
> [c000000000077b98] .handle_eeh_events+0x2d8/0x4b0
> [c0000000000782d0] .eeh_event_handler+0x130/0x1c0
> [c000000000022bd4] .kernel_thread+0x54/0x70
> 
> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>

Applied.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 1270b18..069952f 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -18129,7 +18129,9 @@  static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
 
 	rtnl_lock();
 
-	tp->pcierr_recovery = true;
+	/* We needn't recover from permanent error */
+	if (state == pci_channel_io_frozen)
+		tp->pcierr_recovery = true;
 
 	/* We probably don't have netdev yet */
 	if (!netdev || !netif_running(netdev))