ata: libata-core: Do not resume runtime suspended ports
authorDamien Le Moal <dlemoal@kernel.org>
Sat, 2 Sep 2023 07:32:21 +0000 (16:32 +0900)
committerDamien Le Moal <dlemoal@kernel.org>
Tue, 3 Oct 2023 00:39:50 +0000 (09:39 +0900)
The scsi disk driver does not resume disks that have been runtime
suspended by the user. To be consistent with this behavior, do the same
for ata ports and skip the PM request in ata_port_pm_resume() if the
port was already runtime suspended. With this change, it is no longer
necessary to force the PM state of the port to ACTIVE as the PM core
code will take care of that when handling runtime resume.

Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Tested-by: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ata/libata-core.c

index c9db2da582b70bc80dfe8899cba59b4357517ab8..83613280928b43f8ac1ea6428f5d03e12869c437 100644 (file)
@@ -5230,10 +5230,8 @@ static void ata_port_resume(struct ata_port *ap, pm_message_t mesg,
 
 static int ata_port_pm_resume(struct device *dev)
 {
-       ata_port_resume(to_ata_port(dev), PMSG_RESUME, true);
-       pm_runtime_disable(dev);
-       pm_runtime_set_active(dev);
-       pm_runtime_enable(dev);
+       if (!pm_runtime_suspended(dev))
+               ata_port_resume(to_ata_port(dev), PMSG_RESUME, true);
        return 0;
 }