• Damien Le Moal's avatar
    scsi: sd: Fix system start for ATA devices · b09d7f8f
    Damien Le Moal authored
    It is not always possible to keep a device in the runtime suspended state
    when a system level suspend/resume cycle is executed. E.g. for ATA devices
    connected to AHCI adapters, system resume resets the ATA ports, which
    causes connected devices to spin up. In such case, a runtime suspended disk
    will incorrectly be seen with a suspended runtime state because the device
    is not resumed by sd_resume_system(). The power state seen by the user is
    different than the actual device physical power state.
    
    Fix this issue by introducing the struct scsi_device flag
    force_runtime_start_on_system_start. When set, this flag causes
    sd_resume_system() to request a runtime resume operation for runtime
    suspended devices. This results in the user seeing the device runtime_state
    as active after a system resume, thus correctly reflecting the device
    physical power state.
    
    Fixes: 9131bff6 ("scsi: core: pm: Only runtime resume if necessary")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarDamien Le Moal <dlemoal@kernel.org>
    Link: https://lore.kernel.org/r/20231120225631.37938-3-dlemoal@kernel.orgSigned-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    b09d7f8f
libata-scsi.c 118 KB