All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ravikiran G Thirumalai <kiran@scalex86.org>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Andrew Morton <akpm@osdl.org>, Andi Kleen <ak@suse.de>,
	linux-kernel@vger.kernel.org, discuss@x86-64.org,
	tglx@linutronix.de, shai@scalex86.org, alex.williamson@hp.com,
	y-goto@jp.fujitsu.com
Subject: Re: [discuss] Re: x86_64: 2.6.14-rc4 swiotlb broken
Date: Tue, 18 Oct 2005 12:54:23 -0700	[thread overview]
Message-ID: <20051018195423.GA6351@localhost.localdomain> (raw)
In-Reply-To: <Pine.LNX.4.64.0510180848540.3369@g5.osdl.org>

On Tue, Oct 18, 2005 at 08:50:18AM -0700, Linus Torvalds wrote:
> 
> 
> On Tue, 18 Oct 2005, Linus Torvalds wrote:
> > 
> > I vote for this one, assuming everybody who can test is happy.
> 
> Of course, just after sending the patch I noticed that there was a new 
> version, even simpler. Can people test that one?
> 

This version should work for everyone.  It falls back to the old 2.6.13
behaviour when it does not find suitable memory from any of the nodes.

Yasunori-san, Alex, can you confirm.  (Please use stock 2.6.14)

Thanks,
Kiran

--

Patch to ensure low32 mem allocation for x86_64 swiotlb

Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org>

Index: linux-2.6.14-rc4/arch/ia64/lib/swiotlb.c
===================================================================
--- linux-2.6.14-rc4.orig/arch/ia64/lib/swiotlb.c	2005-10-17 22:48:25.000000000 -0700
+++ linux-2.6.14-rc4/arch/ia64/lib/swiotlb.c	2005-10-18 12:44:17.000000000 -0700
@@ -106,6 +106,8 @@
 __setup("swiotlb=", setup_io_tlb_npages);
 /* make io_tlb_overflow tunable too? */
 
+#define IS_LOWPAGES(paddr, size) ((paddr < 0xffffffff) && ((paddr+size) < 0xffffffff))
+
 /*
  * Statically reserve bounce buffer space and initialize bounce buffer data
  * structures for the software IO TLB used to implement the PCI DMA API.
@@ -114,17 +116,43 @@
 swiotlb_init_with_default_size (size_t default_size)
 {
 	unsigned long i;
+	unsigned long iotlbsz;
+	int node;
 
 	if (!io_tlb_nslabs) {
 		io_tlb_nslabs = (default_size >> IO_TLB_SHIFT);
 		io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE);
 	}
 
+	iotlbsz = io_tlb_nslabs * (1 << IO_TLB_SHIFT);	
+
 	/*
-	 * Get IO TLB memory from the low pages
+	 * Get IO TLB memory from the 0-4G range
 	 */
-	io_tlb_start = alloc_bootmem_low_pages(io_tlb_nslabs *
-					       (1 << IO_TLB_SHIFT));
+	
+	for_each_online_node(node) {
+		io_tlb_start = alloc_bootmem_node(NODE_DATA(node), iotlbsz);
+		if (io_tlb_start) {
+			if (IS_LOWPAGES(virt_to_phys(io_tlb_start), iotlbsz))
+				break;
+			free_bootmem_node(NODE_DATA(node), 
+					  virt_to_phys(io_tlb_start), iotlbsz);
+			io_tlb_start = NULL;
+		}
+	}
+
+	/* 
+	 * FIXME: This should go away when the bootmem allocator is fixed to
+	 * guarantee lowmem32 allocations somehow, and the swiotlb mess is 
+	 * cleaned.  The alloc_bootmem_low_pages fall back is to ensure 
+         * boxes like amd64  which donot use swiotlb but still have 
+	 * swiotlb compiled in, falls back to the 2.6.13 behaviour instead
+	 * of panicking, when proper low32 pages are not available
+	 */
+	if (!io_tlb_start)
+		io_tlb_start = alloc_bootmem_low_pages(io_tlb_nslabs *
+							(1 << IO_TLB_SHIFT));
+
 	if (!io_tlb_start)
 		panic("Cannot allocate SWIOTLB buffer");
 	io_tlb_end = io_tlb_start + io_tlb_nslabs * (1 << IO_TLB_SHIFT);

  reply	other threads:[~2005-10-18 19:54 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-10-17  9:36 x86_64: 2.6.14-rc4 swiotlb broken Ravikiran G Thirumalai
2005-10-17  9:50 ` Andrew Morton
2005-10-17  9:53   ` Andi Kleen
2005-10-17 10:54     ` Yasunori Goto
2005-10-17 15:27     ` Linus Torvalds
2005-10-17 15:37       ` Ravikiran G Thirumalai
2005-10-17 15:40       ` Andi Kleen
2005-10-17 15:56         ` Muli Ben-Yehuda
2005-10-17 16:02           ` Andi Kleen
2005-10-17 18:53             ` [discuss] " Russell King
2005-10-17 16:02         ` Linus Torvalds
2005-10-17 16:26           ` Andi Kleen
2005-10-17 16:42             ` Linus Torvalds
2005-10-17 17:09               ` Andi Kleen
2005-10-17 17:52         ` Ravikiran G Thirumalai
2005-10-17 18:08           ` [discuss] " Andi Kleen
2005-10-17 18:27             ` Muli Ben-Yehuda
2005-10-17 18:32               ` Andi Kleen
2005-10-17 18:45                 ` Muli Ben-Yehuda
2005-10-17 19:04                   ` Linus Torvalds
2005-10-17 19:09                     ` Andi Kleen
2005-10-17 19:15                       ` Arjan van de Ven
2005-10-17 19:47                       ` Ravikiran G Thirumalai
2005-10-17 23:50                     ` David Lang
2005-10-18  2:29                     ` Yasunori Goto
2005-10-18  3:20                       ` Ravikiran G Thirumalai
2005-10-18  4:28                         ` Yasunori Goto
2005-10-18  6:13                           ` Ravikiran G Thirumalai
2005-10-18 10:09                             ` Yasunori Goto
2005-10-18 18:51                               ` Ravikiran G Thirumalai
2005-10-19 17:18                   ` Jon Mason
2005-10-20  7:27                     ` Andi Kleen
2005-10-17 18:38             ` Ravikiran G Thirumalai
2005-10-17 18:20           ` Christoph Lameter
2005-10-17 19:04             ` Alex Williamson
2005-10-17 19:26               ` Ravikiran G Thirumalai
2005-10-17 19:52                 ` Alex Williamson
2005-10-17 15:30     ` Ravikiran G Thirumalai
2005-10-17 15:43       ` Andi Kleen
2005-10-17 20:44         ` Andrew Morton
2005-10-17 21:11           ` Linus Torvalds
2005-10-18  0:16             ` Ravikiran G Thirumalai
2005-10-18  8:23               ` Andi Kleen
2005-10-18 19:07                 ` [discuss] " Ravikiran G Thirumalai
2005-10-18 15:48               ` Linus Torvalds
2005-10-18 15:50                 ` Linus Torvalds
2005-10-18 19:54                   ` Ravikiran G Thirumalai [this message]
2005-10-18 21:28                     ` [discuss] " Alex Williamson
2005-10-18 21:53                       ` Ravikiran G Thirumalai
2005-10-18 22:04                         ` Alex Williamson
2005-10-18 22:37                           ` Alex Williamson
2005-10-18 23:22                             ` Ravikiran G Thirumalai
2005-10-19  1:22                               ` Alex Williamson
2005-10-19  2:02                                 ` Alex Williamson
2005-10-19 12:47                                 ` Yasunori Goto
2005-10-19 14:19                                   ` Alex Williamson
2005-10-19 18:07                                   ` Ravikiran G Thirumalai
2005-10-19 20:45                                     ` Linus Torvalds
2005-10-19 22:52                                       ` Ravikiran G Thirumalai
2005-10-20  0:51                                         ` Yasunori Goto
2005-10-20  7:45                                   ` Andi Kleen
2005-10-18 22:47                           ` Ravikiran G Thirumalai
2005-10-17 10:02   ` Muli Ben-Yehuda
2005-10-17 19:07     ` Tony Luck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20051018195423.GA6351@localhost.localdomain \
    --to=kiran@scalex86.org \
    --cc=ak@suse.de \
    --cc=akpm@osdl.org \
    --cc=alex.williamson@hp.com \
    --cc=discuss@x86-64.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=shai@scalex86.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@osdl.org \
    --cc=y-goto@jp.fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.