• Lennert Buytenhek's avatar
    mv643xx_eth: fix SMI bus access timeouts · ee04448d
    Lennert Buytenhek authored
    The mv643xx_eth mii bus implementation uses wait_event_timeout() to
    wait for SMI completion interrupts.
    
    If wait_event_timeout() would return zero, mv643xx_eth would conclude
    that the SMI access timed out, but this is not necessarily true --
    wait_event_timeout() can also return zero in the case where the SMI
    completion interrupt did happen in time but where it took longer than
    the requested timeout for the process performing the SMI access to be
    scheduled again.  This would lead to occasional SMI access timeouts
    when the system would be under heavy load.
    
    The fix is to ignore the return value of wait_event_timeout(), and
    to re-check the SMI done bit after wait_event_timeout() returns to
    determine whether or not the SMI access timed out.
    Signed-off-by: default avatarLennert Buytenhek <buytenh@marvell.com>
    Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
    ee04448d
mv643xx_eth.c 66.2 KB