linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] block: set the bounce_pfn to the actual DMA limit rather than to max memory
@ 2010-09-21 22:22 Malahal Naineni
  2010-09-22 23:06 ` Malahal Naineni
  2010-09-24 13:58 ` Jens Axboe
  0 siblings, 2 replies; 16+ messages in thread
From: Malahal Naineni @ 2010-09-21 22:22 UTC (permalink / raw)
  To: jaxboe, dm-devel, linux-scsi

The bounce_pfn of the request queue in 64 bit systems is set to the
current max_low_pfn. Adding more memory later makes this incorrect.
Memory allocated beyond this boot time max_low_pfn appear to require
bounce buffers (bounce buffers are actually not allocated but used in
calculating segments that may result in "over max segments limit"
errors).

Signed-off-by: Malahal Naineni (malahal@us.ibm.com)

diff -r 09daf852c1c5 -r c9516154fabc block/blk-settings.c
--- a/block/blk-settings.c	Thu Sep 09 12:10:43 2010 -0700
+++ b/block/blk-settings.c	Mon Sep 13 10:15:24 2010 -0700
@@ -214,16 +214,14 @@ void blk_queue_bounce_limit(struct reque
 	 */
 	if (b_pfn < (min_t(u64, 0xffffffffUL, BLK_BOUNCE_HIGH) >> PAGE_SHIFT))
 		dma = 1;
-	q->limits.bounce_pfn = max_low_pfn;
 #else
 	if (b_pfn < blk_max_low_pfn)
 		dma = 1;
+#endif
 	q->limits.bounce_pfn = b_pfn;
-#endif
 	if (dma) {
 		init_emergency_isa_pool();
 		q->limits.bounce_gfp = GFP_NOIO | GFP_DMA;
-		q->limits.bounce_pfn = b_pfn;
 	}
 }
 EXPORT_SYMBOL(blk_queue_bounce_limit);

^ permalink raw reply	[flat|nested] 16+ messages in thread
* Re: [PATCH] block: set the bounce_pfn to the actual DMA limit rather than to max memory
@ 2010-09-28 22:13 Luck, Tony
  2010-09-28 22:59 ` Malahal Naineni
  0 siblings, 1 reply; 16+ messages in thread
From: Luck, Tony @ 2010-09-28 22:13 UTC (permalink / raw)
  To: Malahal Naineni; +Cc: Jens Axboe, linux-scsi, linux-next

Starting with the next-20100927 tag of linux-next I saw this error
while booting ia64:

  Unable to handle kernel NULL pointer dereference (address 0000000000000020)
  usb-stor-scan[5915]: Oops 8813272891392 [1]
  Modules linked in: dm_mod usb_storage sg container button usbhid uhci_hcd ehci_hcd usbcore fan processor thermal thermal_sys

  Pid: 5915, CPU 0, comm:        usb-stor-scan
  psr : 00001010085a6010 ifs : 8000000000000894 ip  : [<a00000010012a630>]    Not tainted (2.6.36-rc5-generic-smp-next-20100927)
  ip is at mempool_alloc+0x70/0x200

The problem was that "page_pool" was NULL, but blk_queue_bounce()
had decided to use it!  The code in mm/bounce.c looks quite
fragile here as there are several places where page_pool is used, but
it is only initialized inside #ifdef CONFIG_HIGHMEM (which is not
set on ia64).

Reverting this patch so that the old rules for setting
q->limits.bounce_pfn are used cures the immediate problem.
But I think there must be some deeper issues involved.

I think that reverting means that I take the fast exit
from blk_queue_bounce():

	if (queue_bounce_pfn(q) >= blk_max_pfn)
		return;

which is probably just avoiding the problem, rather than
doing the right thing.

-Tony

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2010-10-01 12:46 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-21 22:22 [PATCH] block: set the bounce_pfn to the actual DMA limit rather than to max memory Malahal Naineni
2010-09-22 23:06 ` Malahal Naineni
2010-09-24 13:58 ` Jens Axboe
2010-09-24 17:05   ` Malahal Naineni
2010-09-24 18:28     ` Jens Axboe
2010-09-24 19:20       ` Malahal Naineni
2010-09-24 19:26         ` Jens Axboe
2010-10-01  2:30           ` Malahal Naineni
2010-10-01 12:46             ` Jens Axboe
  -- strict thread matches above, loose matches on Subject: below --
2010-09-28 22:13 Luck, Tony
2010-09-28 22:59 ` Malahal Naineni
2010-09-28 23:40   ` Luck, Tony
2010-09-29  0:42     ` Malahal Naineni
2010-09-29  4:47       ` Luck, Tony
2010-09-29  5:55         ` Malahal Naineni
2010-09-29 16:00           ` Luck, Tony

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).