Message ID | 20230920135439.929695-20-dlemoal@kernel.org |
---|---|
State | New |
Headers | show |
Series | Fix libata suspend/resume handling and code cleanup | expand |
On 9/20/23 4:54 PM, Damien Le Moal wrote: > 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 for the PM state of the port to ACTIVE as the PM core code ^^^^^^ Can't parse this. :-) > 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> [...] MBR, Sergey
On 2023/09/21 0:32, Sergey Shtylyov wrote: > On 9/20/23 4:54 PM, Damien Le Moal wrote: > >> 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 for the PM state of the port to ACTIVE as the PM core code > ^^^^^^ > Can't parse this. :-) s/for/force Will fix that. > >> 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> > [...] > > MBR, Sergey
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 35112f9e482d..e0973f5614b0 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -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; }