Patch "powerpc/eeh: Set channel state after notifying the drivers" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    powerpc/eeh: Set channel state after notifying the drivers

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     powerpc-eeh-set-channel-state-after-notifying-the-dr.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 526c417da48eb033454759c4a3ac3fc9b4fe5e6a
Author: Ganesh Goudar <ganeshgr@xxxxxxxxxxxxx>
Date:   Thu Feb 9 16:26:49 2023 +0530

    powerpc/eeh: Set channel state after notifying the drivers
    
    [ Upstream commit 9efcdaac36e1643a1b7f5337e6143ce142d381b1 ]
    
    When a PCI error is encountered 6th time in an hour we
    set the channel state to perm_failure and notify the
    driver about the permanent failure.
    
    However, after upstream commit 38ddc011478e ("powerpc/eeh:
    Make permanently failed devices non-actionable"), EEH handler
    stops calling any routine once the device is marked as
    permanent failure. This issue can lead to fatal consequences
    like kernel hang with certain PCI devices.
    
    Following log is observed with lpfc driver, with and without
    this change, Without this change kernel hangs, If PCI error
    is encountered 6 times for a device in an hour.
    
    Without the change
    
     EEH: Beginning: 'error_detected(permanent failure)'
     PCI 0132:60:00.0#600000: EEH: not actionable (1,1,1)
     PCI 0132:60:00.1#600000: EEH: not actionable (1,1,1)
     EEH: Finished:'error_detected(permanent failure)'
    
    With the change
    
     EEH: Beginning: 'error_detected(permanent failure)'
     EEH: Invoking lpfc->error_detected(permanent failure)
     EEH: lpfc driver reports: 'disconnect'
     EEH: Invoking lpfc->error_detected(permanent failure)
     EEH: lpfc driver reports: 'disconnect'
     EEH: Finished:'error_detected(permanent failure)'
    
    To fix the issue, set channel state to permanent failure after
    notifying the drivers.
    
    Fixes: 38ddc011478e ("powerpc/eeh: Make permanently failed devices non-actionable")
    Suggested-by: Mahesh Salgaonkar <mahesh@xxxxxxxxxxxxx>
    Signed-off-by: Ganesh Goudar <ganeshgr@xxxxxxxxxxxxx>
    Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20230209105649.127707-1-ganeshgr@xxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
index ee12e335fed8f..68decc2bf42bc 100644
--- a/arch/powerpc/kernel/eeh_driver.c
+++ b/arch/powerpc/kernel/eeh_driver.c
@@ -1087,10 +1087,10 @@ void eeh_handle_normal_event(struct eeh_pe *pe)
 	eeh_slot_error_detail(pe, EEH_LOG_PERM);
 
 	/* Notify all devices that they're about to go down. */
-	eeh_set_channel_state(pe, pci_channel_io_perm_failure);
 	eeh_set_irq_state(pe, false);
 	eeh_pe_report("error_detected(permanent failure)", pe,
 		      eeh_report_failure, NULL);
+	eeh_set_channel_state(pe, pci_channel_io_perm_failure);
 
 	/* Mark the PE to be removed permanently */
 	eeh_pe_state_mark(pe, EEH_PE_REMOVED);
@@ -1207,10 +1207,10 @@ void eeh_handle_special_event(void)
 
 			/* Notify all devices to be down */
 			eeh_pe_state_clear(pe, EEH_PE_PRI_BUS, true);
-			eeh_set_channel_state(pe, pci_channel_io_perm_failure);
 			eeh_pe_report(
 				"error_detected(permanent failure)", pe,
 				eeh_report_failure, NULL);
+			eeh_set_channel_state(pe, pci_channel_io_perm_failure);
 
 			pci_lock_rescan_remove();
 			list_for_each_entry(hose, &hose_list, list_node) {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux