• Ezequiel Garcia's avatar
    net: mv643xx_eth: Fix highmem support in non-TSO egress path · 9e911414
    Ezequiel Garcia authored
    Commit 69ad0dd7
    Author: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
    Date:   Mon May 19 13:59:59 2014 -0300
    
        net: mv643xx_eth: Use dma_map_single() to map the skb fragments
    
    caused a nasty regression by removing the support for highmem skb
    fragments. By using page_address() to get the address of a fragment's
    page, we are assuming a lowmem page. However, such assumption is incorrect,
    as fragments can be in highmem pages, resulting in very nasty issues.
    
    This commit fixes this by using the skb_frag_dma_map() helper,
    which takes care of mapping the skb fragment properly. Additionally,
    the type of mapping is now tracked, so it can be unmapped using
    dma_unmap_page or dma_unmap_single when appropriate.
    
    This commit also fixes the error path in txq_init() to release the
    resources properly.
    
    Fixes: 69ad0dd7 ("net: mv643xx_eth: Use dma_map_single() to map the skb fragments")
    Reported-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    Signed-off-by: default avatarEzequiel Garcia <ezequiel.garcia@free-electrons.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9e911414
mv643xx_eth.c 77.3 KB