From patchwork Wed Mar 4 08:00:43 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yinghai Lu X-Patchwork-Id: 446134 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id C7D461400DD for ; Wed, 4 Mar 2015 19:04:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935892AbbCDIBh (ORCPT ); Wed, 4 Mar 2015 03:01:37 -0500 Received: from aserp1040.oracle.com ([141.146.126.69]:42624 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935885AbbCDIBg (ORCPT ); Wed, 4 Mar 2015 03:01:36 -0500 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t2481KYe032330 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 4 Mar 2015 08:01:20 GMT Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t2481Khi014164 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 4 Mar 2015 08:01:20 GMT Received: from abhmp0016.oracle.com (abhmp0016.oracle.com [141.146.116.22]) by userz7022.oracle.com (8.14.5+Sun/8.14.4) with ESMTP id t2481JlV015314; Wed, 4 Mar 2015 08:01:19 GMT Received: from linux-siqj.site (/10.154.130.125) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 04 Mar 2015 00:01:19 -0800 From: Yinghai Lu To: Matt Fleming , "H. Peter Anvin" , Bjorn Helgaas Cc: Thomas Gleixner , Ingo Molnar , Jiri Kosina , Borislav Petkov , Baoquan He , linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org, linux-pci@vger.kernel.org, Yinghai Lu , Rob Herring , David Vrabel Subject: [PATCH v2 10/15] x86, of: let add_dtb reserve by itself Date: Wed, 4 Mar 2015 00:00:43 -0800 Message-Id: <1425456048-16236-11-git-send-email-yinghai@kernel.org> X-Mailer: git-send-email 1.8.4.5 In-Reply-To: <1425456048-16236-1-git-send-email-yinghai@kernel.org> References: <1425456048-16236-1-git-send-email-yinghai@kernel.org> X-Source-IP: aserv0022.oracle.com [141.146.126.234] Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org We will not reserve setup_data in general code. Every handler need to reserve and copy. Current dtd handling already have code copying, just add reserve code ... also simplify code a bit with storing real dtb size. Cc: Rob Herring Cc: David Vrabel Signed-off-by: Yinghai Lu --- arch/x86/include/asm/prom.h | 9 ++++++--- arch/x86/kernel/devicetree.c | 39 +++++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/arch/x86/include/asm/prom.h b/arch/x86/include/asm/prom.h index 1d081ac..fb716eddc 100644 --- a/arch/x86/include/asm/prom.h +++ b/arch/x86/include/asm/prom.h @@ -24,17 +24,20 @@ #ifdef CONFIG_OF extern int of_ioapic; -extern u64 initial_dtb; -extern void add_dtb(u64 data); void x86_of_pci_init(void); void x86_dtb_init(void); #else -static inline void add_dtb(u64 data) { } static inline void x86_of_pci_init(void) { } static inline void x86_dtb_init(void) { } #define of_ioapic 0 #endif +#ifdef CONFIG_OF_FLATTREE +extern void add_dtb(u64 data); +#else +static inline void add_dtb(u64 data) { } +#endif + extern char cmd_line[COMMAND_LINE_SIZE]; #endif /* __ASSEMBLY__ */ diff --git a/arch/x86/kernel/devicetree.c b/arch/x86/kernel/devicetree.c index 3d35033..cc2fb61 100644 --- a/arch/x86/kernel/devicetree.c +++ b/arch/x86/kernel/devicetree.c @@ -2,6 +2,7 @@ * Architecture specific OF callbacks. */ #include +#include #include #include #include @@ -23,7 +24,6 @@ #include #include -__initdata u64 initial_dtb; char __initdata cmd_line[COMMAND_LINE_SIZE]; int __initdata of_ioapic; @@ -43,11 +43,23 @@ void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align) return __alloc_bootmem(size, align, __pa(MAX_DMA_ADDRESS)); } +#ifdef CONFIG_OF_FLATTREE +static u64 initial_dtb __initdata; +static u32 initial_dtb_size __initdata; void __init add_dtb(u64 data) { + u32 map_len; + initial_dtb = data + offsetof(struct setup_data, data); -} + map_len = max(PAGE_SIZE - (initial_dtb & ~PAGE_MASK), (u64)128); + initial_boot_params = early_memremap(initial_dtb, map_len); + initial_dtb_size = of_get_flat_dt_size(); + early_memunmap(initial_boot_params, map_len); + initial_boot_params = NULL; + memblock_reserve(initial_dtb, initial_dtb_size); +} +#endif /* * CE4100 ids. Will be moved to machine_device_initcall() once we have it. */ @@ -272,31 +284,22 @@ static void __init dtb_apic_setup(void) dtb_ioapic_setup(); } -#ifdef CONFIG_OF_FLATTREE static void __init x86_flattree_get_config(void) { - u32 size, map_len; +#ifdef CONFIG_OF_FLATTREE void *dt; if (!initial_dtb) return; - map_len = max(PAGE_SIZE - (initial_dtb & ~PAGE_MASK), (u64)128); - - initial_boot_params = dt = early_memremap(initial_dtb, map_len); - size = of_get_flat_dt_size(); - if (map_len < size) { - early_iounmap(dt, map_len); - initial_boot_params = dt = early_memremap(initial_dtb, size); - map_len = size; - } - + initial_boot_params = dt = early_memremap(initial_dtb, + initial_dtb_size); unflatten_and_copy_device_tree(); - early_iounmap(dt, map_len); -} -#else -static inline void x86_flattree_get_config(void) { } + early_memunmap(dt, initial_dtb_size); + + memblock_free(initial_dtb, initial_dtb_size); #endif +} void __init x86_dtb_init(void) {