• Niklas Cassel's avatar
    ata: libata: avoid superfluous disk spin down + spin up during hibernation · a38719e3
    Niklas Cassel authored
    A user reported that commit aa3998db ("ata: libata-scsi: Disable scsi
    device manage_system_start_stop") introduced a spin down + immediate spin
    up of the disk both when entering and when resuming from hibernation.
    This behavior was not there before, and causes an increased latency both
    when entering and when resuming from hibernation.
    
    Hibernation is done by three consecutive PM events, in the following order:
    1) PM_EVENT_FREEZE
    2) PM_EVENT_THAW
    3) PM_EVENT_HIBERNATE
    
    Commit aa3998db ("ata: libata-scsi: Disable scsi device
    manage_system_start_stop") modified ata_eh_handle_port_suspend() to call
    ata_dev_power_set_standby() (which spins down the disk), for both event
    PM_EVENT_FREEZE and event PM_EVENT_HIBERNATE.
    
    Documentation/driver-api/pm/devices.rst, section "Entering Hibernation",
    explicitly mentions that PM_EVENT_FREEZE does not have to be put the device
    in a low-power state, and actually recommends not doing so. Thus, let's not
    spin down the disk on PM_EVENT_FREEZE. (The disk will instead be spun down
    during the subsequent PM_EVENT_HIBERNATE event.)
    
    This way, PM_EVENT_FREEZE will behave as it did before commit aa3998db
    ("ata: libata-scsi: Disable scsi device manage_system_start_stop"), while
    PM_EVENT_HIBERNATE will continue to spin down the disk.
    
    This will avoid the superfluous spin down + spin up when entering and
    resuming from hibernation, while still making sure that the disk is spun
    down before actually entering hibernation.
    
    Cc: stable@vger.kernel.org # v6.6+
    Fixes: aa3998db ("ata: libata-scsi: Disable scsi device manage_system_start_stop")
    Reviewed-by: default avatarDamien Le Moal <dlemoal@kernel.org>
    Link: https://lore.kernel.org/r/20241008135843.1266244-2-cassel@kernel.orgSigned-off-by: default avatarNiklas Cassel <cassel@kernel.org>
    a38719e3
libata-eh.c 112 KB