ACK: [SRU][Bionic][v2][PATCH 1/1] scsi: hpsa: disable device during shutdown

Kleber Souza kleber.souza at canonical.com
Tue Aug 21 14:27:55 UTC 2018


On 08/10/18 22:45, Joseph Salisbury wrote:
> From: Sinan Kaya <okaya at codeaurora.org>
> 
> BugLink: http://bugs.launchpad.net/bugs/1771467
> 
> 'Commit cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during
> shutdown")' has been added to kernel to shutdown pending PCIe port service
> interrupts during reboot so that a newly started kexec kernel wouldn't
> observe pending interrupts.
> 
> pcie_port_device_remove() is disabling the root port and switches by
> calling pci_disable_device() after all PCIe service drivers are shutdown.
> 
> This has been found to cause crashes on HP DL360 Gen9 machines during
> reboot due to hpsa driver not clearing the bus master bit during the
> shutdown procedure by calling pci_disable_device().
> 
> Disable device as part of the shutdown sequence.
> 
> Signed-off-by: Sinan Kaya <okaya at codeaurora.org>
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=199779
> Fixes: cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during shutdown")
> Cc: stable at vger.kernel.org
> Reported-by: Ryan Finnie <ryan at finnie.org>
> Tested-by: Don Brace <don.brace at microsemi.com>
> Acked-by: Don Brace <don.brace at microsemi.com>
> Signed-off-by: Martin K. Petersen <martin.petersen at oracle.com>
> (cherry picked from commit 0d98ba8d70b0070ac117452ea0b663e26bbf46bf)
> Signed-off-by: Joseph Salisbury <joseph.salisbury at canonical.com>

Acked-by: Kleber Sacilotto de Souza <kleber.souza at canonical.com>

> ---
>  drivers/scsi/hpsa.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
> index b54d17b..d3dde05 100644
> --- a/drivers/scsi/hpsa.c
> +++ b/drivers/scsi/hpsa.c
> @@ -8844,7 +8844,7 @@ static void hpsa_disable_rld_caching(struct ctlr_info *h)
>  	kfree(options);
>  }
>  
> -static void hpsa_shutdown(struct pci_dev *pdev)
> +static void __hpsa_shutdown(struct pci_dev *pdev)
>  {
>  	struct ctlr_info *h;
>  
> @@ -8859,6 +8859,12 @@ static void hpsa_shutdown(struct pci_dev *pdev)
>  	hpsa_disable_interrupt_mode(h);		/* pci_init 2 */
>  }
>  
> +static void hpsa_shutdown(struct pci_dev *pdev)
> +{
> +	__hpsa_shutdown(pdev);
> +	pci_disable_device(pdev);
> +}
> +
>  static void hpsa_free_device_info(struct ctlr_info *h)
>  {
>  	int i;
> @@ -8902,7 +8908,7 @@ static void hpsa_remove_one(struct pci_dev *pdev)
>  		scsi_remove_host(h->scsi_host);		/* init_one 8 */
>  	/* includes hpsa_free_irqs - init_one 4 */
>  	/* includes hpsa_disable_interrupt_mode - pci_init 2 */
> -	hpsa_shutdown(pdev);
> +	__hpsa_shutdown(pdev);
>  
>  	hpsa_free_device_info(h);		/* scan */
>  
> 





More information about the kernel-team mailing list