• Oliver O'Halloran's avatar
    powerpc/eeh: Use a goto for recovery failures · 157616f3
    Oliver O'Halloran authored
    The EEH recovery logic in eeh_handle_normal_event() has some pretty strange
    flow control. If we remove all the actual recovery logic we're left with
    the following skeleton:
    
    	if (result != PCI_ERS_RESULT_DISCONNECT) {
    		...
    	}
    
    	if (result != PCI_ERS_RESULT_DISCONNECT) {
    		...
    	}
    
    	if (result == PCI_ERS_RESULT_NONE) {
    		...
    	}
    
    	if (result == PCI_ERS_RESULT_CAN_RECOVER) {
    		...
    	}
    
    	if (result == PCI_ERS_RESULT_CAN_RECOVER) {
    		...
    	}
    
    	if (result == PCI_ERS_RESULT_NEED_RESET) {
    		...
    	}
    
    	if ((result == PCI_ERS_RESULT_RECOVERED) ||
    	    (result == PCI_ERS_RESULT_NONE)) {
    		...
    		goto out;
    	}
    
    	/*
    	 * unsuccessful recovery / PCI_ERS_RESULT_DISCONECTED
    	 * handling is here.
    	 */
    	...
    
    	out:
    	...
    
    Most of the "if () { ... }" blocks above change "result" to
    PCI_ERS_RESULT_DISCONNECTED if an error occurs in that recovery step. This
    makes the control flow a bit confusing since it breaks the early-exit
    pattern that is generally used in Linux. In any case we end up handling the
    error in the final else block so why not just jump there directly? Doing so
    also allows us to de-indent a bunch of code.
    
    No functional changes.
    
    [dja: rebase on top of linux-next + my preceeding refactor,
          move clearing the EEH_DEV_NO_HANDLER bit above the first goto so that
          it is always clear in the error handler code as it was before.]
    Signed-off-by: default avatarOliver O'Halloran <oohall@gmail.com>
    Signed-off-by: default avatarDaniel Axtens <dja@axtens.net>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20211015070628.1331635-2-dja@axtens.net
    157616f3
eeh_driver.c 32.2 KB