lkml.org 
[lkml]   [2017]   [Dec]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:x86/boot] x86/acpi: Take the RSDP address for boot parameters if available
    Commit-ID:  0c89cf36424f7c1177de8a5712514d7cc2eb369f
    Gitweb: https://git.kernel.org/tip/0c89cf36424f7c1177de8a5712514d7cc2eb369f
    Author: Juergen Gross <jgross@suse.com>
    AuthorDate: Fri, 8 Dec 2017 16:11:37 +0100
    Committer: Ingo Molnar <mingo@kernel.org>
    CommitDate: Mon, 11 Dec 2017 15:14:20 +0100

    x86/acpi: Take the RSDP address for boot parameters if available

    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@suse.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: boris.ostrovsky@oracle.com
    Cc: corbet@lwn.net
    Cc: lenb@kernel.org
    Cc: linux-acpi@vger.kernel.org
    Cc: rjw@rjwysocki.net
    Cc: xen-devel@lists.xenproject.org
    Link: http://lkml.kernel.org/r/20171208151139.30213-3-jgross@suse.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    ---
    arch/x86/kernel/acpi/boot.c | 7 +++++++
    drivers/acpi/osl.c | 10 +++++++++-
    include/linux/acpi.h | 2 ++
    3 files changed, 18 insertions(+), 1 deletion(-)

    diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
    index f4c463d..26fc897 100644
    --- a/arch/x86/kernel/acpi/boot.c
    +++ b/arch/x86/kernel/acpi/boot.c
    @@ -47,6 +47,7 @@
    #include <asm/mpspec.h>
    #include <asm/smp.h>
    #include <asm/i8259.h>
    +#include <asm/setup.h>

    #include "sleep.h" /* To include x86_acpi_suspend_lowlevel */
    static int __initdata acpi_force = 0;
    @@ -1758,3 +1759,9 @@ void __init arch_reserve_mem_area(acpi_physical_address addr, size_t size)
    e820__range_add(addr, size, E820_TYPE_ACPI);
    e820__update_table_print();
    }
    +
    +acpi_physical_address acpi_arch_get_root_pointer(void)
    +{
    + return boot_params.hdr.acpi_rsdp_addr;
    +}
    +EXPORT_SYMBOL_GPL(acpi_arch_get_root_pointer);
    diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
    index 3bb46cb..2b77db9 100644
    --- a/drivers/acpi/osl.c
    +++ b/drivers/acpi/osl.c
    @@ -178,6 +178,11 @@ void acpi_os_vprintf(const char *fmt, va_list args)
    #endif
    }

    +__weak acpi_physical_address acpi_arch_get_root_pointer(void)
    +{
    + return 0;
    +}
    +
    #ifdef CONFIG_KEXEC
    static unsigned long acpi_rsdp;
    static int __init setup_acpi_rsdp(char *arg)
    @@ -189,12 +194,15 @@ early_param("acpi_rsdp", setup_acpi_rsdp);

    acpi_physical_address __init acpi_os_get_root_pointer(void)
    {
    - acpi_physical_address pa = 0;
    + acpi_physical_address pa;

    #ifdef CONFIG_KEXEC
    if (acpi_rsdp)
    return acpi_rsdp;
    #endif
    + pa = acpi_arch_get_root_pointer();
    + if (pa)
    + return pa;

    if (efi_enabled(EFI_CONFIG_TABLES)) {
    if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
    diff --git a/include/linux/acpi.h b/include/linux/acpi.h
    index dc1ebfe..aa603cc 100644
    --- a/include/linux/acpi.h
    +++ b/include/linux/acpi.h
    @@ -1266,4 +1266,6 @@ static inline int lpit_read_residency_count_address(u64 *address)
    }
    #endif

    +acpi_physical_address acpi_arch_get_root_pointer(void);
    +
    #endif /*_LINUX_ACPI_H*/
    \
     
     \ /
      Last update: 2017-12-12 11:58    [W:5.510 / U:0.412 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site