From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH for-xen-4.5 v4 14/18] x86: move MPS, ACPI and SMBIOS data to boot_info Date: Fri, 17 Oct 2014 23:51:23 +0100 Message-ID: <54419D6B.4000700@citrix.com> References: <1413555132-22138-1-git-send-email-daniel.kiper@oracle.com> <1413555132-22138-15-git-send-email-daniel.kiper@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1XfGMq-0000Ay-MV for xen-devel@lists.xenproject.org; Fri, 17 Oct 2014 22:51:28 +0000 In-Reply-To: <1413555132-22138-15-git-send-email-daniel.kiper@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Daniel Kiper , xen-devel@lists.xenproject.org Cc: jgross@suse.com, keir@xen.org, ian.campbell@citrix.com, stefano.stabellini@eu.citrix.com, roy.franz@linaro.org, ning.sun@intel.com, jbeulich@suse.com, ross.philipson@citrix.com, qiaowei.ren@intel.com, richard.l.maliszewski@intel.com, gang.wei@intel.com, fu.wei@linaro.org List-Id: xen-devel@lists.xenproject.org On 17/10/2014 15:12, Daniel Kiper wrote: > Signed-off-by: Daniel Kiper > --- > xen/arch/x86/boot_info.c | 5 +++++ > xen/arch/x86/dmi_scan.c | 11 ++++++++--- > xen/arch/x86/mpparse.c | 13 +++++++++---- > xen/common/efi/runtime.c | 18 +++++++++++------- > xen/drivers/acpi/osl.c | 13 +++++++++---- > xen/include/asm-x86/boot_info.h | 12 ++++++++++++ > xen/include/xen/efi.h | 7 +++++++ > 7 files changed, 61 insertions(+), 18 deletions(-) > > diff --git a/xen/arch/x86/boot_info.c b/xen/arch/x86/boot_info.c > index 77e9d5a..c1a4977 100644 > --- a/xen/arch/x86/boot_info.c > +++ b/xen/arch/x86/boot_info.c > @@ -23,6 +23,7 @@ > > #include > #include > +#include > #include > #include > > @@ -47,6 +48,10 @@ static boot_info_t __read_mostly boot_info_mb = { > .efi_mmap_size = 0, > .efi_mmap_desc_size = 0, > .efi_mmap = NULL, > + .mps = EFI_INVALID_TABLE_ADDR, > + .acpi = EFI_INVALID_TABLE_ADDR, > + .acpi20 = EFI_INVALID_TABLE_ADDR, > + .smbios = EFI_INVALID_TABLE_ADDR, > .mods_nr = 0, > .mods = NULL, > .warn_msg = NULL, > diff --git a/xen/arch/x86/dmi_scan.c b/xen/arch/x86/dmi_scan.c > index 500133a..94f81f3 100644 > --- a/xen/arch/x86/dmi_scan.c > +++ b/xen/arch/x86/dmi_scan.c > @@ -12,6 +12,11 @@ > #include > #include > #include > +#ifndef CONFIG_ARM /* TODO - boot_info is not implemented on ARM yet */ > +#include > +#else > +#define boot_info (&efi) > +#endif I *really* hope CONFIG_ARM is not enabled in the arch/x86 subtree... > > #define bt_ioremap(b,l) ((void *)__acpi_map_table(b,l)) > #define bt_iounmap(b,l) ((void)0) > @@ -215,10 +220,10 @@ static int __init dmi_efi_iterate(void (*decode)(struct dmi_header *)) > const struct smbios_eps __iomem *p; > int ret = -1; > > - if (efi.smbios == EFI_INVALID_TABLE_ADDR) > + if (boot_info->smbios == EFI_INVALID_TABLE_ADDR) > return -1; > > - p = bt_ioremap(efi.smbios, sizeof(eps)); > + p = bt_ioremap(boot_info->smbios, sizeof(eps)); > if (!p) > return -1; > memcpy_fromio(&eps, p, sizeof(eps)); > @@ -227,7 +232,7 @@ static int __init dmi_efi_iterate(void (*decode)(struct dmi_header *)) > if (memcmp(eps.anchor, "_SM_", 4)) > return -1; > > - p = bt_ioremap(efi.smbios, eps.length); > + p = bt_ioremap(boot_info->smbios, eps.length); > if (!p) > return -1; > if (dmi_checksum(p, eps.length) && > diff --git a/xen/arch/x86/mpparse.c b/xen/arch/x86/mpparse.c > index a38e016..8de39aa 100644 > --- a/xen/arch/x86/mpparse.c > +++ b/xen/arch/x86/mpparse.c > @@ -29,6 +29,11 @@ > #include > #include > #include > +#ifndef CONFIG_ARM /* TODO - boot_info is not implemented on ARM yet */ > +#include > +#else > +#define boot_info (&efi) > +#endif And here ~Andrew > > #include > #include > @@ -676,18 +681,18 @@ static void __init efi_check_config(void) > { > struct intel_mp_floating *mpf; > > - if (efi.mps == EFI_INVALID_TABLE_ADDR) > + if (boot_info->mps == EFI_INVALID_TABLE_ADDR) > return; > > - __set_fixmap(FIX_EFI_MPF, PFN_DOWN(efi.mps), __PAGE_HYPERVISOR); > - mpf = (void *)fix_to_virt(FIX_EFI_MPF) + ((long)efi.mps & (PAGE_SIZE-1)); > + __set_fixmap(FIX_EFI_MPF, PFN_DOWN(boot_info->mps), __PAGE_HYPERVISOR); > + mpf = (void *)fix_to_virt(FIX_EFI_MPF) + ((long)boot_info->mps & (PAGE_SIZE-1)); > > if (memcmp(mpf->mpf_signature, "_MP_", 4) == 0 && > mpf->mpf_length == 1 && > mpf_checksum((void *)mpf, 16) && > (mpf->mpf_specification == 1 || mpf->mpf_specification == 4)) { > smp_found_config = 1; > - printk(KERN_INFO "SMP MP-table at %08lx\n", efi.mps); > + printk(KERN_INFO "SMP MP-table at %08lx\n", boot_info->mps); > mpf_found = mpf; > } > else > diff --git a/xen/common/efi/runtime.c b/xen/common/efi/runtime.c > index 3a74e98..abaebd4 100644 > --- a/xen/common/efi/runtime.c > +++ b/xen/common/efi/runtime.c > @@ -40,13 +40,6 @@ UINT64 __read_mostly efi_boot_max_var_store_size; > UINT64 __read_mostly efi_boot_remain_var_store_size; > UINT64 __read_mostly efi_boot_max_var_size; > > -struct efi __read_mostly efi = { > - .acpi = EFI_INVALID_TABLE_ADDR, > - .acpi20 = EFI_INVALID_TABLE_ADDR, > - .mps = EFI_INVALID_TABLE_ADDR, > - .smbios = EFI_INVALID_TABLE_ADDR, > -}; > - > const struct efi_pci_rom *__read_mostly efi_pci_roms; > > #ifndef CONFIG_ARM /* TODO - disabled until implemented on ARM */ > @@ -64,6 +57,10 @@ boot_info_t __read_mostly boot_info_efi = { > .efi_mmap_size = 0, > .efi_mmap_desc_size = 0, > .efi_mmap = NULL, > + .mps = EFI_INVALID_TABLE_ADDR, > + .acpi = EFI_INVALID_TABLE_ADDR, > + .acpi20 = EFI_INVALID_TABLE_ADDR, > + .smbios = EFI_INVALID_TABLE_ADDR, > .mods_nr = 0, > .mods = boot_info_mods, > .warn_msg = NULL, > @@ -73,6 +70,13 @@ boot_info_t __read_mostly boot_info_efi = { > UINTN __read_mostly efi_memmap_size; > UINTN __read_mostly efi_mdesc_size; > void *__read_mostly efi_memmap; > + > +struct efi __read_mostly efi = { > + .acpi = EFI_INVALID_TABLE_ADDR, > + .acpi20 = EFI_INVALID_TABLE_ADDR, > + .mps = EFI_INVALID_TABLE_ADDR, > + .smbios = EFI_INVALID_TABLE_ADDR, > +}; > #endif > > #ifndef CONFIG_ARM /* TODO - disabled until implemented on ARM */ > diff --git a/xen/drivers/acpi/osl.c b/xen/drivers/acpi/osl.c > index 93c983c..ab48aad 100644 > --- a/xen/drivers/acpi/osl.c > +++ b/xen/drivers/acpi/osl.c > @@ -39,6 +39,11 @@ > #include > #include > #include > +#ifndef CONFIG_ARM /* TODO - boot_info is not implemented on ARM yet */ > +#include > +#else > +#define boot_info (&efi) > +#endif > > #define _COMPONENT ACPI_OS_SERVICES > ACPI_MODULE_NAME("osl") > @@ -67,10 +72,10 @@ void __init acpi_os_vprintf(const char *fmt, va_list args) > acpi_physical_address __init acpi_os_get_root_pointer(void) > { > if (efi_enabled) { > - if (efi.acpi20 != EFI_INVALID_TABLE_ADDR) > - return efi.acpi20; > - else if (efi.acpi != EFI_INVALID_TABLE_ADDR) > - return efi.acpi; > + if (boot_info->acpi20 != EFI_INVALID_TABLE_ADDR) > + return boot_info->acpi20; > + else if (boot_info->acpi != EFI_INVALID_TABLE_ADDR) > + return boot_info->acpi; > else { > printk(KERN_ERR PREFIX > "System description tables not found\n"); > diff --git a/xen/include/asm-x86/boot_info.h b/xen/include/asm-x86/boot_info.h > index 99ff93e..4d888ab 100644 > --- a/xen/include/asm-x86/boot_info.h > +++ b/xen/include/asm-x86/boot_info.h > @@ -68,6 +68,18 @@ typedef struct { > /* Pointer to EFI memory map provided by preloader. */ > void *efi_mmap; > > + /* MPS physical address. */ > + paddr_t mps; > + > + /* ACPI RSDP physical address. */ > + paddr_t acpi; > + > + /* ACPI 2.0 RSDP physical address. */ > + paddr_t acpi20; > + > + /* SMBIOS physical address. */ > + paddr_t smbios; > + > /* Number of modules. */ > unsigned int mods_nr; > > diff --git a/xen/include/xen/efi.h b/xen/include/xen/efi.h > index 8a2b788..75b14db 100644 > --- a/xen/include/xen/efi.h > +++ b/xen/include/xen/efi.h > @@ -3,12 +3,18 @@ > > #ifndef __ASSEMBLY__ > #include > +#ifndef CONFIG_ARM /* TODO - disabled until implemented on ARM */ > +#include > +#endif > #endif > > extern const bool_t efi_enabled; > > #define EFI_INVALID_TABLE_ADDR (~0UL) > > +#ifndef CONFIG_ARM /* TODO - boot_info is not implemented on ARM yet */ > +#define efi boot_info_efi > +#else > /* Add fields here only if they need to be referenced from non-EFI code. */ > struct efi { > unsigned long mps; /* MPS table */ > @@ -18,6 +24,7 @@ struct efi { > }; > > extern struct efi efi; > +#endif > > #ifndef __ASSEMBLY__ >