[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.