• Tejun Heo's avatar
    libata: issue DIPM enable commands with LPM state updated · e5005b15
    Tejun Heo authored
    Low level drivers may behave differently depending on the current
    link->lpm_policy.  During ata_eh_set_lpm(), DIPM enable commands are
    issued after the successful completion of ap->ops->set_lpm(), which
    means that the controller is already in the target state.  This causes
    DIPM enable commands to be processed with mismatching controller power
    state and link->lpm_policy value.
    
    In ahci, link->lpm_policy is used to ignore certain PHY events if LPM
    is enabled; however, as DIPM commands are issued with stale
    link->lpm_policy, they sometimes end up triggering these conditions
    and get aborted leading to LPM configuration failure.
    
    Fix it by updating link->lpm_policy before issuing DIPM enable
    commands.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-by: default avatarKyle McMartin <kyle@mcmartin.ca>
    Cc: stable@kernel.org
    Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
    e5005b15
libata-eh.c 104 KB