• Lukasz Dorau's avatar
    libahci: fix turning on LEDs in ahci_start_port() · fa070ee6
    Lukasz Dorau authored
    If EM Transmit bit is busy during init ata_msleep() is called.  It is
    wrong - msleep() should be used instead of ata_msleep(), because if EM
    Transmit bit is busy for one port, it will be busy for all other ports
    too, so using ata_msleep() causes wasting tries for another ports.
    
    The most common scenario looks like that now
    (six ports try to transmit a LED meaasege):
    - port #0 tries for the 1st time and succeeds
    - ports #1-5 try for the 1st time and sleeps
    - port #1 tries for the 2nd time and succeeds
    - ports #2-5 try for the 2nd time and sleeps
    - port #2 tries for the 3rd time and succeeds
    - ports #3-5 try for the 3rd time and sleeps
    - port #3 tries for the 4th time and succeeds
    - ports #4-5 try for the 4th time and sleeps
    - port #4 tries for the 5th time and succeeds
    - port #5 tries for the 5th time and sleeps
    
    At this moment port #5 wasted all its five tries and failed to
    initialize.  Because there are only 5 (EM_MAX_RETRY) tries available
    usually only five ports succeed to initialize. The sixth port and next
    ones usually will fail.
    
    If msleep() is used instead of ata_msleep() the first port succeeds to
    initialize in the first try and next ones usually succeed to
    initialize in the second try.
    
    tj: updated comment
    Signed-off-by: default avatarLukasz Dorau <lukasz.dorau@intel.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    fa070ee6
libahci.c 62.5 KB