scsi: smartpqi: Eliminate drive spin down on warm boot
authorSagar Biradar <sagar.biradar@microchip.com>
Tue, 1 Feb 2022 21:48:08 +0000 (15:48 -0600)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 8 Feb 2022 04:38:34 +0000 (23:38 -0500)
Avoid drive spin down during a warm boot.

Call the BMIC Flush Cache command (0xc2) to indicate the reason for the
flush cache (shutdown, hibernate, suspend, or restart).

Link: https://lore.kernel.org/r/164375208810.440833.11254644025650871435.stgit@brunhilda.pdev.net
Reviewed-by: Mike McGowen <mike.mcgowen@microchip.com>
Reviewed-by: Scott Benesh <scott.benesh@microchip.com>
Reviewed-by: Scott Teel <scott.teel@microchip.com>
Signed-off-by: Sagar Biradar <sagar.biradar@microchip.com>
Signed-off-by: Don Brace <don.brace@microchip.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/smartpqi/smartpqi_init.c

index ad9fa16..f51605c 100644 (file)
@@ -8902,6 +8902,7 @@ static void pqi_shutdown(struct pci_dev *pci_dev)
 {
        int rc;
        struct pqi_ctrl_info *ctrl_info;
+       enum bmic_flush_cache_shutdown_event shutdown_event;
 
        ctrl_info = pci_get_drvdata(pci_dev);
        if (!ctrl_info) {
@@ -8917,11 +8918,16 @@ static void pqi_shutdown(struct pci_dev *pci_dev)
        pqi_ctrl_block_requests(ctrl_info);
        pqi_ctrl_wait_until_quiesced(ctrl_info);
 
+       if (system_state == SYSTEM_RESTART)
+               shutdown_event = RESTART;
+       else
+               shutdown_event = SHUTDOWN;
+
        /*
         * Write all data in the controller's battery-backed cache to
         * storage.
         */
-       rc = pqi_flush_cache(ctrl_info, SHUTDOWN);
+       rc = pqi_flush_cache(ctrl_info, shutdown_event);
        if (rc)
                dev_err(&pci_dev->dev,
                        "unable to flush controller cache\n");