Re: [PATCH V3 2/2] scsi: hpsa: drop shutdown callback

From: okaya
Date: Wed May 30 2018 - 21:08:55 EST


On 2018-05-30 15:25, Don Brace wrote:
-----Original Message-----
From: Ryan Finnie [mailto:ryan@xxxxxxxxxx]
Sent: Tuesday, May 29, 2018 8:50 PM
To: Sinan Kaya <okaya@xxxxxxxxxxxxxx>; linux-pci@xxxxxxxxxxxxxxx;
timur@xxxxxxxxxxxxxx
Cc: linux-arm-msm@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx;
stable@xxxxxxxxxxxxxxx; Don Brace <don.brace@xxxxxxxxxxxxx>; James E.J.
Bottomley <jejb@xxxxxxxxxxxxxxxxxx>; Martin K. Petersen
<martin.petersen@xxxxxxxxxx>; esc.storagedev
<esc.storagedev@xxxxxxxxxxxxx>; open list:HEWLETT-PACKARD SMART ARRAY
RAID DRIVER (hpsa) <linux-scsi@xxxxxxxxxxxxxxx>; open list <linux-
kernel@xxxxxxxxxxxxxxx>
Subject: Re: [PATCH V3 2/2] scsi: hpsa: drop shutdown callback

EXTERNAL EMAIL


On 05/28/2018 02:21 PM, Sinan Kaya wrote:
> '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().
>
> Drop the shutdown API and do an orderly clean up by using the remove.
>
> Signed-off-by: Sinan Kaya <okaya@xxxxxxxxxxxxxx>
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=199779
> Fixes: cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during shutdown")
> Cc: stable@xxxxxxxxxxxxxxx
> Reported-by: Ryan Finnie <ryan@xxxxxxxxxx>

Tested successfully on DL360 Gen9 and DL380 Gen9.

Tested-by: Ryan Finnie <ryan@xxxxxxxxxx>

The shutdown path issues a cache flush to the controller.
Without this flush, you will see "Dirty Cache" messages at POST.
It is best to keep the shutdown path.


I have seen that shutdown() is also called from remove().

remove() is supposed to do a safe cleanup too. If it is leaving the hw in inconsistent state even though it is c lling shutdown , it is yet another bug.

Thanks,
Don Brace
ESC - Smart Storage
Microsemi Corporation