• ODonnell, Michael's avatar
    [PATCH] corruption during e100 MDI register access · ac7c6669
    ODonnell, Michael authored
    We have identified two related bugs in the e100 driver.
    
    Both bugs are related to manipulation of the MDI control register.
    
    The first problem is that the Ready bit is being ignored when writing to
    the Control register; we noticed this because the Linux bonding driver
    would occasionally come to the spurious conclusion that the link was down
    when querying Link State.  It turned out that by failing to wait for a
    previous command to complete it was selecting what was essentially a random
    register in the MDI register set.  When we added code that waits for the
    Ready bit (as shown in the patch file below) all such problems ceased.
    
    The second problem is that, although access to the MDI registers involves
    multiple steps which must not be intermixed, nothing was defending against
    two or more threads attempting simultaneous access.  The most obvious
    situation where such interference could occur involves the watchdog versus
    ioctl paths, but there are probably others, so we recommend the locking
    shown in our patch file.
    Signed-off-by: default avatarMichael O'Donnell <Michael.ODonnell@stratus.com>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Jeff Garzik <jgarzik@pobox.com>
    Cc: John Ronciak <john.ronciak@intel.com>
    Cc: Ganesh Venkatesan <ganesh.venkatesan@intel.com>
    Cc: Jesse Brandeburg <jesse.brandeburg@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
    ac7c6669
e100.c 79.3 KB