Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757130AbYH1Uf0 (ORCPT ); Thu, 28 Aug 2008 16:35:26 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754754AbYH1UfP (ORCPT ); Thu, 28 Aug 2008 16:35:15 -0400 Received: from yx-out-2324.google.com ([74.125.44.29]:14624 "EHLO yx-out-2324.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753194AbYH1UfO (ORCPT ); Thu, 28 Aug 2008 16:35:14 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; b=Ee9OfUafMH+kIgL4iuPvVZfud4VHS7ejWb9ZTy/1hBtotaW6DyVED65Cft0mdZRKEI BzJ+hCfWKopEHHaBv8knZyHiIq27knm0wB3gBWNG236Wxlh22mL5OtuD913TWenZyDaP 8XI9BKXv1XFzAapWvW+3v+AvYvioIwtMXGRRU= From: Yinghai Lu To: Ingo Molnar , Thomas Gleixner , "H. Peter Anvin" , Andrew Morton , Jesse Barnes , Linus Torvalds Cc: linux-kernel@vger.kernel.org, Yinghai Lu Subject: [PATCH] x86: split e820 reserved entries record to late v2 Date: Thu, 28 Aug 2008 13:34:15 -0700 Message-Id: <1219955655-18357-1-git-send-email-yhlu.kernel@gmail.com> X-Mailer: git-send-email 1.5.4.5 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3113 Lines: 101 so could let BAR res register at first, or even pnp? v2: insert e820 reserve resources before pnp_system_init Signed-off-by: Yinghai Lu --- arch/x86/kernel/e820.c | 20 ++++++++++++++++++-- arch/x86/pci/i386.c | 3 +++ include/asm-x86/e820.h | 1 + 3 files changed, 22 insertions(+), 2 deletions(-) Index: linux-2.6/arch/x86/kernel/e820.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/e820.c +++ linux-2.6/arch/x86/kernel/e820.c @@ -1271,13 +1271,15 @@ static inline const char *e820_type_to_s /* * Mark e820 reserved areas as busy for the resource manager. */ +struct resource __initdata *e820_res; void __init e820_reserve_resources(void) { int i; - struct resource *res; u64 end; + struct resource *res; res = alloc_bootmem_low(sizeof(struct resource) * e820.nr_map); + e820_res = res; for (i = 0; i < e820.nr_map; i++) { end = e820.map[i].addr + e820.map[i].size - 1; #ifndef CONFIG_RESOURCES_64BIT @@ -1291,7 +1293,8 @@ void __init e820_reserve_resources(void) res->end = end; res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; - insert_resource(&iomem_resource, res); + if (e820.map[i].type != E820_RESERVED || res->start < (1ULL<<20)) + insert_resource(&iomem_resource, res); res++; } @@ -1303,6 +1306,19 @@ void __init e820_reserve_resources(void) } } +void __init e820_reserve_resources_late(void) +{ + int i; + struct resource *res; + + res = e820_res; + for (i = 0; i < e820.nr_map; i++) { + if (e820.map[i].type == E820_RESERVED && res->start >= (1ULL<<20)) + insert_resource(&iomem_resource, res); + res++; + } +} + char *__init default_machine_specific_memory_setup(void) { char *who = "BIOS-e820"; Index: linux-2.6/arch/x86/pci/i386.c =================================================================== --- linux-2.6.orig/arch/x86/pci/i386.c +++ linux-2.6/arch/x86/pci/i386.c @@ -36,6 +36,7 @@ #include #include #include +#include #include "pci.h" @@ -308,6 +309,8 @@ void __init pcibios_resource_survey(void pcibios_allocate_bus_resources(&pci_root_buses); pcibios_allocate_resources(0); pcibios_allocate_resources(1); + + e820_reserve_resources_late(); } /** Index: linux-2.6/include/asm-x86/e820.h =================================================================== --- linux-2.6.orig/include/asm-x86/e820.h +++ linux-2.6/include/asm-x86/e820.h @@ -122,6 +122,7 @@ extern void e820_register_active_regions extern u64 e820_hole_size(u64 start, u64 end); extern void finish_e820_parsing(void); extern void e820_reserve_resources(void); +extern void e820_reserve_resources_late(void); extern void setup_memory_map(void); extern char *default_machine_specific_memory_setup(void); extern char *machine_specific_memory_setup(void); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/