1. 09 12月, 2009 2 次提交
    • M
      block,xd: Delay allocation of DMA buffers until device is known · a3b8d92d
      Mel Gorman 提交于
      Loading the XD module triggers a warning like
      
       WARNING: at mm/page_alloc.c:1805
       __alloc_pages_nodemask+0x127/0x48f()
       Hardware name: System Product Name
       Modules linked in:
       Pid: 1, comm: swapper Not tainted 2.6.32-rc8-git5 #1
       Call Trace:
        [<c103d94b>] warn_slowpath_common+0x65/0x95
        [<c103d98d>] warn_slowpath_null+0x12/0x15
        [<c109550c>] __alloc_pages_nodemask+0x127/0x48f
        [<c10be964>] ? get_slab+0x8/0x50
        [<c10b8979>] alloc_page_interleave+0x2e/0x6e
        [<c10b8a10>] alloc_pages_current+0x57/0x99
        [<c2083a4a>] ? xd_init+0x0/0x482
        [<c1094c38>] __get_free_pages+0xd/0x1e
        [<c2083a94>] xd_init+0x4a/0x482
        [<c2082df0>] ? loop_init+0x104/0x16a
        [<c169162d>] ? loop_probe+0x0/0xaf
        [<c2083a4a>] ? xd_init+0x0/0x482
        [<c1001143>] do_one_initcall+0x51/0x13f
        [<c204a307>] kernel_init+0x10b/0x15f
        [<c204a1fc>] ? kernel_init+0x0/0x15f
        [<c1004347>] kernel_thread_helper+0x7/0x10
       ---[ end trace 686db6333ade6e7a ]---
       xd: Out of memory.
      
      The warning is because the alloc_pages is called with an
      order >= MAX_ORDER. The simplistic reason is that get_order(0) returns garbage
      values when given 0 as a size. The more complex reason is that the XD driver
      initialisation is broken.
      
      It's not clear why this ever worked. XD allocates a buffer for DMA based
      on the value of xd_maxsectors. This value is determined by the exact
      type of controller in use but the value is determined *after* an attempt
      has been made to allocate the buffer. i.e. the requested size of the DMA
      buffer will always be 0.
      
      This patch alters how XD is initialised slightly by allocating the
      buffer when and if a device has actually been detected. The error paths
      are updated to suit the new logic.
      Signed-off-by: NMel Gorman <mel@csn.ul.ie>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      a3b8d92d
    • P
  2. 08 12月, 2009 1 次提交
    • J
      Revert "pata_sis: Implement MWDMA for the UDMA 133 capable chips" · 1b52f2a4
      Jeff Garzik 提交于
      This reverts commit f20941f3.
      
      Sergei Shtylyov notes "You call min() on uncomparables [in
      mwdma_clip_to_pio()], i.e. mwdma_to_pio[] contains XFER_PIO_* and
      adev->pio_mode - XFER_PIO_0 yields you a mode number.  Thus the second
      argument will always "win" as a minimal one"
      
      Bartlomiej Zolnierkiewicz adds "There are more issues with the patch related
      to mwdma_clip_to_pio().  The function can return values between 0 and
      4 which obviously won't work well for the new code below for values
      >2 (i.e. resulting in out-of-bounds array access for the common-case
      of dev->pio_mode == XFER_PIO_4)."
      
      Bartlomiej Zolnierkiewicz also notes the patch is incomplete, failing to
      update MWDMA mode masks.
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      1b52f2a4
  3. 07 12月, 2009 23 次提交
  4. 06 12月, 2009 7 次提交
  5. 05 12月, 2009 7 次提交