• Jon Cooper's avatar
    sfc: PIO:Restrict to 64bit arch and use 64-bit writes. · daf37b55
    Jon Cooper authored
    Fixes:ee45fd92
    ("sfc: Use TX PIO for sufficiently small packets")
    
    The linux net driver uses memcpy_toio() in order to copy into
    the PIO buffers.
    Even on a 64bit machine this causes 32bit accesses to a write-
    combined memory region.
    There are hardware limitations that mean that only 64bit
    naturally aligned accesses are safe in all cases.
    Due to being write-combined memory region two 32bit accesses
    may be coalesced to form a 64bit non 64bit aligned access.
    Solution was to open-code the memory copy routines using pointers
    and to only enable PIO for x86_64 machines.
    
    Not tested on platforms other than x86_64 because this patch
    disables the PIO feature on other platforms.
    Compile-tested on x86 to ensure that works.
    
    The WARN_ON_ONCE() code in the previous version of this patch
    has been moved into the internal sfc debug driver as the
    assertion was unnecessary in the upstream kernel code.
    
    This bug fix applies to v3.13 and v3.14 stable branches.
    Signed-off-by: default avatarShradha Shah <sshah@solarflare.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    daf37b55
io.h 9.82 KB