• Johannes Berg's avatar
    iwlagn: fix RX skb alignment · 4018517a
    Johannes Berg authored
    So I dug deeper into the DMA problems I had with iwlagn and a kind soul
    helped me in that he said something about pci-e alignment and mentioned
    the iwl_rx_allocate function to check for crossing 4KB boundaries. Since
    there's 8KB A-MPDU support, crossing 4k boundaries didn't seem like
    something the device would fail with, but when I looked into the
    function for a minute anyway I stumbled over this little gem:
    
    	BUG_ON(rxb->dma_addr & (~DMA_BIT_MASK(36) & 0xff));
    
    Clearly, that is a totally bogus check, one would hope the compiler
    removes it entirely. (Think about it)
    
    After fixing it, I obviously ran into it, nothing guarantees the
    alignment the way you want it,  because of the way skbs and their
    headroom are allocated. I won't explain that here nor double-check that
    I'm right, that goes beyond what most of the CC'ed people care about.
    
    So then I came up with the patch below, and so far my system has
    survived minutes with 64K pages, when it would previously fail in
    seconds. And I haven't seen a single instance of the TX bug either. But
    when you see the patch it'll be pretty obvious to you why.
    
    This should fix the following reported kernel bugs:
    
    http://bugzilla.kernel.org/show_bug.cgi?id=11596
    http://bugzilla.kernel.org/show_bug.cgi?id=11393
    http://bugzilla.kernel.org/show_bug.cgi?id=11983
    
    I haven't checked if there are any elsewhere, but I suppose RHBZ will
    have a few instances too...
    
    I'd like to ask anyone who is CC'ed (those are people I know ran into
    the bug) to try this patch.
    
    I am convinced that this patch is correct in spirit, but I haven't
    understood why, for example, there are so many unmap calls. I'm not
    entirely convinced that this is the only bug leading to the TX reply
    errors.
    Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    4018517a
iwl-dev.h 29.2 KB