From: Yinghai Lu <yinghai@kernel.org>
To: Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
"H. Peter Anvin" <hpa@zytor.com>,
Andrew Morton <akpm@linux-foundation.org>
Cc: David Miller <davem@davemloft.net>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Johannes Weiner <hannes@cmpxchg.org>,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
Yinghai Lu <yinghai@kernel.org>
Subject: [PATCH 01/35] lmb: prepare x86 to use lmb to replace early_res
Date: Thu, 13 May 2010 17:19:22 -0700 [thread overview]
Message-ID: <1273796396-29649-2-git-send-email-yinghai@kernel.org> (raw)
In-Reply-To: <1273796396-29649-1-git-send-email-yinghai@kernel.org>
1. expose lmb_debug
2. expose lmb_reserved_init_regions
3. expose lmb_add_region
4. prection for include linux/lmb.h in mm/page_alloc.c and mm/bootmem.c
5. lmb_find_base() should return LMB_ERROR in one failing path.
(this one cost me 3 hours !)
6. move LMB_ERROR to lmb.h
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
include/linux/lmb.h | 4 ++++
lib/lmb.c | 21 +++++++++------------
2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/include/linux/lmb.h b/include/linux/lmb.h
index 6f8c4bd..7987766 100644
--- a/include/linux/lmb.h
+++ b/include/linux/lmb.h
@@ -19,6 +19,7 @@
#include <asm/lmb.h>
#define INIT_LMB_REGIONS 128
+#define LMB_ERROR (~(phys_addr_t)0)
struct lmb_region {
phys_addr_t base;
@@ -39,6 +40,8 @@ struct lmb {
};
extern struct lmb lmb;
+extern int lmb_debug;
+extern struct lmb_region lmb_reserved_init_regions[];
extern void __init lmb_init(void);
extern void __init lmb_analyze(void);
@@ -61,6 +64,7 @@ extern phys_addr_t __init lmb_alloc(phys_addr_t size, phys_addr_t align);
#define LMB_ALLOC_ANYWHERE (~(phys_addr_t)0)
#define LMB_ALLOC_ACCESSIBLE 0
+long lmb_add_region(struct lmb_type *type, phys_addr_t base, phys_addr_t size);
extern phys_addr_t __init lmb_alloc_base(phys_addr_t size,
phys_addr_t align,
phys_addr_t max_addr);
diff --git a/lib/lmb.c b/lib/lmb.c
index 2cd5aaa..fddd72c 100644
--- a/lib/lmb.c
+++ b/lib/lmb.c
@@ -22,11 +22,9 @@
struct lmb lmb;
-static int lmb_debug;
+int lmb_debug;
static struct lmb_region lmb_memory_init_regions[INIT_LMB_REGIONS + 1];
-static struct lmb_region lmb_reserved_init_regions[INIT_LMB_REGIONS + 1];
-
-#define LMB_ERROR (~(phys_addr_t)0)
+struct lmb_region lmb_reserved_init_regions[INIT_LMB_REGIONS + 1];
/* inline so we don't get a warning when pr_debug is compiled out */
static inline const char *lmb_type_name(struct lmb_type *type)
@@ -154,7 +152,7 @@ static phys_addr_t __init lmb_find_base(phys_addr_t size, phys_addr_t align,
if (found != LMB_ERROR)
return found;
}
- return 0;
+ return LMB_ERROR;
}
static void lmb_remove_region(struct lmb_type *type, unsigned long r)
@@ -176,17 +174,12 @@ static void lmb_coalesce_regions(struct lmb_type *type,
lmb_remove_region(type, r2);
}
-/* Defined below but needed now */
-static long lmb_add_region(struct lmb_type *type, phys_addr_t base, phys_addr_t size);
-
static int lmb_double_array(struct lmb_type *type)
{
struct lmb_region *new_array, *old_array;
phys_addr_t old_size, new_size, addr;
int use_slab = slab_is_available();
- pr_debug("lmb: %s array full, doubling...", lmb_type_name(type));
-
/* Calculate new doubled size */
old_size = type->max * sizeof(struct lmb_region);
new_size = old_size << 1;
@@ -206,7 +199,7 @@ static int lmb_double_array(struct lmb_type *type)
new_array = kmalloc(new_size, GFP_KERNEL);
addr = new_array == NULL ? LMB_ERROR : __pa(new_array);
} else
- addr = lmb_find_base(new_size, sizeof(phys_addr_t), 0, LMB_ALLOC_ACCESSIBLE);
+ addr = lmb_find_base(new_size, sizeof(struct lmb_region), 0, LMB_ALLOC_ACCESSIBLE);
if (addr == LMB_ERROR) {
pr_err("lmb: Failed to double %s array from %ld to %ld entries !\n",
lmb_type_name(type), type->max, type->max * 2);
@@ -214,6 +207,10 @@ static int lmb_double_array(struct lmb_type *type)
}
new_array = __va(addr);
+ if (lmb_debug)
+ pr_info("lmb: %s array is doubled to %ld at %llx - %llx",
+ lmb_type_name(type), type->max * 2, (u64)addr, (u64)addr + new_size);
+
/* Found space, we now need to move the array over before
* we add the reserved region since it may be our reserved
* array itself that is full.
@@ -249,7 +246,7 @@ extern int __weak lmb_memory_can_coalesce(phys_addr_t addr1, phys_addr_t size1,
return 1;
}
-static long lmb_add_region(struct lmb_type *type, phys_addr_t base, phys_addr_t size)
+long lmb_add_region(struct lmb_type *type, phys_addr_t base, phys_addr_t size)
{
unsigned long coalesced = 0;
long adjacent, i;
--
1.6.4.2
next prev parent reply other threads:[~2010-05-14 0:19 UTC|newest]
Thread overview: 125+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-14 0:19 [PATCH -v16 00/35] Use lmb with x86 Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu [this message]
2010-05-14 0:19 ` [PATCH 01/35] lmb: prepare x86 to use lmb to replace early_res Yinghai Lu
2010-05-14 2:12 ` Benjamin Herrenschmidt
2010-05-14 2:12 ` Benjamin Herrenschmidt
2010-05-14 6:19 ` Yinghai
2010-05-14 8:09 ` Benjamin Herrenschmidt
2010-05-14 16:23 ` Yinghai Lu
2010-05-17 18:03 ` H. Peter Anvin
2010-05-17 22:02 ` Benjamin Herrenschmidt
2010-05-17 22:12 ` H. Peter Anvin
2010-05-14 7:03 ` Yinghai
2010-05-14 0:19 ` [PATCH 02/35] lmb: Prepare to include linux/lmb.h in core file Yinghai Lu
2010-05-14 0:19 ` [PATCH 03/35] lmb: Add ARCH_DISCARD_LMB to put lmb code to .init Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 2:14 ` Benjamin Herrenschmidt
2010-05-14 6:21 ` Yinghai
2010-05-14 8:10 ` Benjamin Herrenschmidt
2010-05-14 8:10 ` Benjamin Herrenschmidt
2010-05-14 16:24 ` Yinghai Lu
2010-05-14 0:19 ` [PATCH 04/35] lmb: Add lmb_find_area() Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 2:16 ` Benjamin Herrenschmidt
2010-05-14 6:25 ` Yinghai
2010-05-14 8:12 ` Benjamin Herrenschmidt
2010-05-14 16:28 ` Yinghai Lu
2010-05-14 16:28 ` Yinghai Lu
2010-05-14 0:19 ` [PATCH 05/35] x86, lmb: Add lmb_find_area_size() Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 2:20 ` Benjamin Herrenschmidt
2010-05-14 6:28 ` Yinghai
2010-05-14 8:13 ` Benjamin Herrenschmidt
2010-05-14 16:33 ` Yinghai Lu
2010-05-14 22:20 ` Benjamin Herrenschmidt
2010-05-14 22:20 ` Benjamin Herrenschmidt
2010-05-14 0:19 ` [PATCH 06/35] bootmem, x86: Add weak version of reserve_bootmem_generic Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 0:19 ` [PATCH 07/35] x86, lmb: Add lmb_to_bootmem() Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 0:19 ` [PATCH 08/35] x86,lmb: Add lmb_reserve_area/lmb_free_area Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 2:26 ` Benjamin Herrenschmidt
2010-05-14 6:30 ` Yinghai
2010-05-14 8:15 ` Benjamin Herrenschmidt
2010-05-14 0:19 ` [PATCH 09/35] x86, lmb: Add get_free_all_memory_range() Yinghai Lu
2010-05-14 0:19 ` [PATCH 10/35] x86, lmb: Add lmb_register_active_regions() and lmb_hole_size() Yinghai Lu
2010-05-14 0:19 ` [PATCH 11/35] lmb: Add find_memory_core_early() Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 2:29 ` Benjamin Herrenschmidt
2010-05-14 6:34 ` Yinghai
2010-05-14 8:16 ` Benjamin Herrenschmidt
2010-05-14 2:30 ` Benjamin Herrenschmidt
2010-05-14 6:39 ` Yinghai
2010-05-14 8:19 ` Benjamin Herrenschmidt
2010-05-14 8:30 ` David Miller
2010-05-14 16:44 ` Yinghai Lu
2010-05-14 22:34 ` Benjamin Herrenschmidt
2010-05-14 22:34 ` Benjamin Herrenschmidt
2010-05-14 23:51 ` lmb type features Yinghai
2010-05-17 0:46 ` Benjamin Herrenschmidt
2010-05-17 6:06 ` Yinghai
2010-05-14 0:19 ` [PATCH 12/35] x86, lmb: Add lmb_find_area_node() Yinghai Lu
2010-05-14 0:19 ` [PATCH 13/35] x86, lmb: Add lmb_free_memory_size() Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 2:31 ` Benjamin Herrenschmidt
2010-05-14 6:42 ` Yinghai
2010-05-14 8:21 ` Benjamin Herrenschmidt
2010-05-14 16:37 ` Yinghai Lu
2010-05-14 22:20 ` Benjamin Herrenschmidt
2010-05-14 0:19 ` [PATCH 14/35] x86, lmb: Add lmb_memory_size() Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 2:31 ` Benjamin Herrenschmidt
2010-05-14 0:19 ` [PATCH 15/35] x86, lmb: Add lmb_reserve_area_overlap_ok() Yinghai Lu
2010-05-14 2:32 ` Benjamin Herrenschmidt
2010-05-14 6:44 ` Yinghai
2010-05-14 8:30 ` Benjamin Herrenschmidt
2010-05-14 16:40 ` Yinghai Lu
2010-05-14 22:30 ` Benjamin Herrenschmidt
2010-05-15 7:32 ` Ingo Molnar
2010-05-15 7:32 ` Ingo Molnar
2010-05-17 0:39 ` Benjamin Herrenschmidt
2010-05-17 6:11 ` Yinghai
2010-05-17 6:40 ` H. Peter Anvin
2010-05-17 7:24 ` Benjamin Herrenschmidt
2010-05-17 17:18 ` Yinghai
2010-05-17 18:53 ` H. Peter Anvin
2010-05-17 22:01 ` Benjamin Herrenschmidt
2010-05-17 22:01 ` Benjamin Herrenschmidt
2010-05-17 22:19 ` Yinghai
2010-05-17 22:26 ` H. Peter Anvin
2010-05-17 22:26 ` H. Peter Anvin
2010-05-14 0:19 ` [PATCH 16/35] x86, lmb: Use lmb_debug to control debug message print out Yinghai Lu
2010-05-14 0:19 ` [PATCH 17/35] x86, lmb: Add x86 version of __lmb_find_area() Yinghai Lu
2010-05-14 2:34 ` Benjamin Herrenschmidt
2010-05-14 6:47 ` Yinghai
2010-05-14 8:31 ` Benjamin Herrenschmidt
2010-05-14 16:41 ` Yinghai Lu
2010-05-14 0:19 ` [PATCH 18/35] x86: Use lmb to replace early_res Yinghai Lu
2010-05-14 0:19 ` [PATCH 19/35] x86: Replace e820_/_early string with lmb_ Yinghai Lu
2010-05-14 0:19 ` [PATCH 20/35] x86: Remove not used early_res code Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 0:19 ` [PATCH 21/35] x86, lmb: Use lmb_memory_size()/lmb_free_memory_size() to get correct dma_reserve Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 0:19 ` [PATCH 22/35] bootmem: Add nobootmem.c to reduce the #ifdef Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 0:19 ` [PATCH 23/35] mm: move contig_page_data define to bootmem.c/nobootmem.c Yinghai Lu
2010-05-14 0:19 ` [PATCH 24/35] lmb: Move __alloc_memory_core_early() to nobootmem.c Yinghai Lu
2010-05-14 2:36 ` Benjamin Herrenschmidt
2010-05-14 0:19 ` [PATCH 25/35] x86: Have nobootmem version setup_bootmem_allocator() Yinghai Lu
2010-05-14 0:19 ` [PATCH 26/35] x86: Put 64 bit numa node memmap above 16M Yinghai Lu
2010-05-14 0:19 ` [PATCH 27/35] swiotlb: Use page alignment for early buffer allocation Yinghai Lu
2010-05-14 0:19 ` [PATCH 28/35] x86: Add sanitize_e820_map() Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 0:19 ` [PATCH 29/35] x86: Change e820_saved to __initdata Yinghai Lu
2010-05-14 0:19 ` [PATCH 30/35] x86: Align e820 ram range to page Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 0:19 ` [PATCH 31/35] x86: Use wake_system_ram_range() instead of e820_any_mapped() in agp path Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 0:19 ` [PATCH 32/35] x86: Add get_centaur_ram_top() Yinghai Lu
2010-05-14 0:19 ` [PATCH 33/35] x86: Change e820_any_mapped() to __init Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
2010-05-14 0:19 ` [PATCH 34/35] x86: Use walk_system_ream_range() instead of referring e820.map directly for tboot Yinghai Lu
2010-05-14 0:19 ` [PATCH 35/35] x86: make e820 to be __initdata Yinghai Lu
2010-05-14 0:19 ` Yinghai Lu
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=1273796396-29649-2-git-send-email-yinghai@kernel.org \
--to=yinghai@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=benh@kernel.crashing.org \
--cc=davem@davemloft.net \
--cc=hannes@cmpxchg.org \
--cc=hpa@zytor.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/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 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).