[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 2/3] x86/acpi: take rsdp address for boot params if available
* Juergen Gross <jgross@xxxxxxxx> wrote: > In case the rsdp address in struct boot_params is specified don't try > to find the table by searching, but take the address directly as set > by the boot loader. > > Signed-off-by: Juergen Gross <jgross@xxxxxxxx> > --- > drivers/acpi/osl.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c > index 3bb46cb24a99..3b25e2ad7d75 100644 > --- a/drivers/acpi/osl.c > +++ b/drivers/acpi/osl.c > @@ -45,6 +45,10 @@ > #include <linux/uaccess.h> > #include <linux/io-64-nonatomic-lo-hi.h> > > +#ifdef CONFIG_X86 > +#include <asm/setup.h> > +#endif > + > #include "internal.h" > > #define _COMPONENT ACPI_OS_SERVICES > @@ -195,6 +199,10 @@ acpi_physical_address __init > acpi_os_get_root_pointer(void) > if (acpi_rsdp) > return acpi_rsdp; > #endif > +#ifdef CONFIG_X86 > + if (boot_params.hdr.acpi_rsdp_addr) > + return boot_params.hdr.acpi_rsdp_addr; > +#endif Argh, that's typical short sighted hackery, layering violations and general eyesore combined into a single patch ... Those #ifdefs are a disgrace, plus why should generic ACPI code include platform details like boot_params.hdr/acpi_rsdp_addr? It's also not very extensible to non-x86 - so someone will have to redo this work for ARM64 as well in the future ... So how about doing it right: 1) Add a __weak acpi_arch_get_root_pointer() __weak function to drivers/acpi/osl.c: __weak acpi_physical_address acpi_arch_get_root_pointer(void) { return 0; } 2) use it in acpi_os_get_root_pointer(): ... pa = acpi_arch_get_root_pointer(); if (pa) return pa; ... 3) Override the default variant in x86's acpi.c via something like: acpi_physical_address acpi_arch_get_root_pointer(void) { return boot_params.hdr.acpi_rsdp_addr; } 4) Add this to arch/x86/include/asm/acpi.h: extern acpi_physical_address acpi_arch_get_root_pointer(void); 5) Add #include <asm/acpi.h> to drivers/acpi/osl.c. That looks much cleaner, has no layering violations and is infinitely more extensible, right? Thanks, Ingo _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |