1. 01 Jul, 2011 8 commits
  2. 28 Jun, 2011 7 commits
  3. 16 Jun, 2011 1 commit
  4. 14 Jun, 2011 2 commits
  5. 13 Jun, 2011 10 commits
  6. 12 Jun, 2011 8 commits
  7. 11 Jun, 2011 4 commits
    • Mika Westerberg's avatar
      net: ep93xx_eth: fix DMA API violations · f1c089e3
      Mika Westerberg authored
      Russell King said:
      >
      > So, to summarize what its doing:
      >
      > 1. It allocates buffers for rx and tx.
      > 2. It maps them with dma_map_single().
      >       This transfers ownership of the buffer to the DMA device.
      > 3. In ep93xx_xmit,
      > 3a. It copies the data into the buffer with skb_copy_and_csum_dev()
      >       This violates the DMA buffer ownership rules - the CPU should
      >       not be writing to this buffer while it is (in principle) owned
      >       by the DMA device.
      > 3b. It then calls dma_sync_single_for_cpu() for the buffer.
      >       This transfers ownership of the buffer to the CPU, which surely
      >       is the wrong direction.
      > 4. In ep93xx_rx,
      > 4a. It calls dma_sync_single_for_cpu() for the buffer.
      >       This at least transfers the DMA buffer ownership to the CPU
      >       before the CPU reads the buffer
      > 4b. It then uses skb_copy_to_linear_data() to copy the data out.
      >       At no point does it transfer ownership back to the DMA device.
      > 5. When the driver is removed, it dma_unmap_single()'s the buffer.
      >       This transfers ownership of the buffer to the CPU.
      > 6. It frees the buffer.
      >
      > While it may work on ep93xx, it's not respecting the DMA API rules,
      > and with DMA debugging enabled it will probably encounter quite a few
      > warnings.
      
      This patch fixes these violations.
      Signed-off-by: default avatarMika Westerberg <mika.westerberg@iki.fi>
      Acked-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      Acked-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
      Tested-by: default avatarPetr Stetiar <ynezz@true.cz>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f1c089e3
    • Mika Westerberg's avatar
      net: ep93xx_eth: drop GFP_DMA from call to dma_alloc_coherent() · 1f758a43
      Mika Westerberg authored
      Commit a197b59a (mm: fail GFP_DMA allocations when ZONE_DMA is not
      configured) made page allocator to return NULL if GFP_DMA is set but
      CONFIG_ZONE_DMA is disabled.
      
      This causes ep93xx_eth to fail:
      
       WARNING: at mm/page_alloc.c:2251 __alloc_pages_nodemask+0x11c/0x638()
       Modules linked in:
       [<c0035498>] (unwind_backtrace+0x0/0xf4) from [<c0043da4>] (warn_slowpath_common+0x48/0x60)
       [<c0043da4>] (warn_slowpath_common+0x48/0x60) from [<c0043dd8>] (warn_slowpath_null+0x1c/0x24)
       [<c0043dd8>] (warn_slowpath_null+0x1c/0x24) from [<c0083b6c>] (__alloc_pages_nodemask+0x11c/0x638)
       [<c0083b6c>] (__alloc_pages_nodemask+0x11c/0x638) from [<c00366fc>] (__dma_alloc+0x8c/0x3ec)
       [<c00366fc>] (__dma_alloc+0x8c/0x3ec) from [<c0036adc>] (dma_alloc_coherent+0x54/0x60)
       [<c0036adc>] (dma_alloc_coherent+0x54/0x60) from [<c0227808>] (ep93xx_open+0x20/0x864)
       [<c0227808>] (ep93xx_open+0x20/0x864) from [<c0283144>] (__dev_open+0xb8/0x108)
       [<c0283144>] (__dev_open+0xb8/0x108) from [<c0280528>] (__dev_change_flags+0x70/0x128)
       [<c0280528>] (__dev_change_flags+0x70/0x128) from [<c0283054>] (dev_change_flags+0x10/0x48)
       [<c0283054>] (dev_change_flags+0x10/0x48) from [<c001a720>] (ip_auto_config+0x190/0xf68)
       [<c001a720>] (ip_auto_config+0x190/0xf68) from [<c00233b0>] (do_one_initcall+0x34/0x18c)
       [<c00233b0>] (do_one_initcall+0x34/0x18c) from [<c0008400>] (kernel_init+0x94/0x134)
       [<c0008400>] (kernel_init+0x94/0x134) from [<c0030858>] (kernel_thread_exit+0x0/0x8)
      
      Since there is no restrictions for DMA on ep93xx, we can fix this by just
      removing the GFP_DMA flag from the call.
      Signed-off-by: default avatarMika Westerberg <mika.westerberg@iki.fi>
      Acked-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      Acked-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
      Tested-by: default avatarPetr Stetiar <ynezz@true.cz>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1f758a43
    • Mika Westerberg's avatar
      net: ep93xx_eth: allocate buffers using kmalloc() · 3247a1fc
      Mika Westerberg authored
      We can use simply kmalloc() to allocate the buffers. This also simplifies the
      code and allows us to perform DMA sync operations more easily.
      
      Memory is allocated with only GFP_KERNEL since there are no DMA allocation
      restrictions on this platform.
      Signed-off-by: default avatarMika Westerberg <mika.westerberg@iki.fi>
      Acked-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      Acked-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
      Tested-by: default avatarPetr Stetiar <ynezz@true.cz>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3247a1fc
    • Mika Westerberg's avatar
      net: ep93xx_eth: pass struct device to DMA API functions · fc9b4910
      Mika Westerberg authored
      We shouldn't use NULL for any DMA API functions, unless we are dealing with
      ISA or EISA device. So pass correct struct dev pointer to these functions.
      Signed-off-by: default avatarMika Westerberg <mika.westerberg@iki.fi>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fc9b4910