Message ID | 20240524094149.189329-1-chunjie.zhu@cloud.com (mailing list archive) |
---|---|
State | Changes Requested, archived |
Headers | show |
Series | fix kdump kernel cannot find ACPI RSDP | expand |
On Fri, May 24, 2024 at 11:43 AM Chunjie Zhu <chunjie.zhu@cloud.com> wrote: > > kexec/kdump must pass acpi_rsdp (physical address of ACPI RSDP table) to the > crash kernel, especially in EFI case, otherwise, the crash kernel fails to > locate ACPI RSDP table. Consequently, ACPI init runs into error, and APIC > mmio read page fault happens, finally crash kernel gets stuck. Fair enough. So has this ever worked before? Presumably it has, in which case it has regressed and so it would be prudent to say when it broke and why and explain why the proposed change is the right one to make. > Signed-off-by: Chunjie Zhu <chunjie.zhu@cloud.com> > --- > drivers/acpi/osl.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c > index f725813d0cce..39474468dba1 100644 > --- a/drivers/acpi/osl.c > +++ b/drivers/acpi/osl.c > @@ -174,7 +174,7 @@ void acpi_os_vprintf(const char *fmt, va_list args) > #endif > } > > -#ifdef CONFIG_KEXEC > +#ifdef CONFIG_KEXEC_CORE > static unsigned long acpi_rsdp; > static int __init setup_acpi_rsdp(char *arg) > { > @@ -187,7 +187,7 @@ acpi_physical_address __init acpi_os_get_root_pointer(void) > { > acpi_physical_address pa; > > -#ifdef CONFIG_KEXEC > +#ifdef CONFIG_KEXEC_CORE > /* > * We may have been provided with an RSDP on the command line, > * but if a malicious user has done so they may be pointing us > -- > 2.34.1 >
> From: "Rafael J. Wysocki" <rafael@kernel.org> > Date: Mon, 27 May 2024 12:52:19 +0200 > Subject: Re: [PATCH] fix kdump kernel cannot find ACPI RSDP > To: Chunjie Zhu <chunjie.zhu@cloud.com> > Cc: "Rafael J. Wysocki" <rafael@kernel.org>, Len Brown <lenb@kernel.org>, linux-acpi@vger.kernel.org, > linux-kernel@vger.kernel.org > > On Fri, May 24, 2024 at 11:43=E2=80=AFAM Chunjie Zhu <chunjie.zhu@cloud.com= > > wrote: > > > > kexec/kdump must pass acpi_rsdp (physical address of ACPI RSDP table) to = > the > > crash kernel, especially in EFI case, otherwise, the crash kernel fails t= > o > > locate ACPI RSDP table. Consequently, ACPI init runs into error, and APIC > > mmio read page fault happens, finally crash kernel gets stuck. > > Fair enough. > > So has this ever worked before? Presumably it has, in which case it > has regressed and so it would be prudent to say when it broke and why > and explain why the proposed change is the right one to make. The existing code works only if the kexec() system call (CONFIG_KEXEC) is enabled, however, we can enter the kdump kernel by one of the following methods, 1. kexec_file system call (CONFIG_KEXEC_FILE) 2. Xen-initiated crash Instead of CONFIG_KEXEC, setup_acpi_rsdp should depend on CONFIG_KEXEC_CORE, which should be enabled in any case where kernel is used as a kdump kernel. > > > Signed-off-by: Chunjie Zhu <chunjie.zhu@cloud.com> > > --- > > drivers/acpi/osl.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c > > index f725813d0cce..39474468dba1 100644 > > --- a/drivers/acpi/osl.c > > +++ b/drivers/acpi/osl.c > > @@ -174,7 +174,7 @@ void acpi_os_vprintf(const char *fmt, va_list args) > > #endif > > } > > > > -#ifdef CONFIG_KEXEC > > +#ifdef CONFIG_KEXEC_CORE > > static unsigned long acpi_rsdp; > > static int __init setup_acpi_rsdp(char *arg) > > { > > @@ -187,7 +187,7 @@ acpi_physical_address __init acpi_os_get_root_pointer= > (void) > > { > > acpi_physical_address pa; > > > > -#ifdef CONFIG_KEXEC > > +#ifdef CONFIG_KEXEC_CORE > > /* > > * We may have been provided with an RSDP on the command line, > > * but if a malicious user has done so they may be pointing us > > -- > > 2.34.1 > > >
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index f725813d0cce..39474468dba1 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -174,7 +174,7 @@ void acpi_os_vprintf(const char *fmt, va_list args) #endif } -#ifdef CONFIG_KEXEC +#ifdef CONFIG_KEXEC_CORE static unsigned long acpi_rsdp; static int __init setup_acpi_rsdp(char *arg) { @@ -187,7 +187,7 @@ acpi_physical_address __init acpi_os_get_root_pointer(void) { acpi_physical_address pa; -#ifdef CONFIG_KEXEC +#ifdef CONFIG_KEXEC_CORE /* * We may have been provided with an RSDP on the command line, * but if a malicious user has done so they may be pointing us
kexec/kdump must pass acpi_rsdp (physical address of ACPI RSDP table) to the crash kernel, especially in EFI case, otherwise, the crash kernel fails to locate ACPI RSDP table. Consequently, ACPI init runs into error, and APIC mmio read page fault happens, finally crash kernel gets stuck. Signed-off-by: Chunjie Zhu <chunjie.zhu@cloud.com> --- drivers/acpi/osl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)