On Thu, May 23, 2019 at 11:43 AM Kairui Song <kasong@xxxxxxxxxx> wrote: > > On Thu, May 23, 2019 at 11:16 AM Dave Young <dyoung@xxxxxxxxxx> wrote: > > > > On 05/14/19 at 01:09pm, Kairui Song wrote: > > > On x86 RSDP is fundamental for booting the machine. When second kernel > > > is incapable of parsing the RSDP address (eg. kexec next kernel on an EFI > > > system with EFI service disabled), kexec should prepare the RSDP address > > > for second kernel. > > > > > > Introduce helpers for getting RSDP from multiple sources, including boot > > > params, cmdline and EFI firmware. > > > > > > For legacy BIOS interface, there is no better way to find the RSDP address > > > rather than scanning the memory region and search for it, and this will > > > always be done by the kernel as a fallback, so this is no need to try to > > > get the RSDP address for that case. > > > > > > Signed-off-by: Kairui Song <kasong@xxxxxxxxxx> > > > --- > > > kexec/arch/i386/kexec-x86-common.c | 60 ++++++++++++++++++++++++++++++ > > > kexec/arch/i386/kexec-x86.h | 1 + > > > kexec/arch/i386/x86-linux-setup.c | 3 +- > > > kexec/arch/i386/x86-linux-setup.h | 1 + > > > 4 files changed, 63 insertions(+), 2 deletions(-) > > > > > > diff --git a/kexec/arch/i386/kexec-x86-common.c b/kexec/arch/i386/kexec-x86-common.c > > > index de99758..4b8eb26 100644 > > > --- a/kexec/arch/i386/kexec-x86-common.c > > > +++ b/kexec/arch/i386/kexec-x86-common.c > > > @@ -39,6 +39,7 @@ > > > #include "../../firmware_memmap.h" > > > #include "../../crashdump.h" > > > #include "kexec-x86.h" > > > +#include "x86-linux-setup.h" > > > #include "../../kexec-xen.h" > > > > > > /* Used below but not present in (older?) xenctrl.h */ > > > @@ -392,4 +393,63 @@ int get_memory_ranges(struct memory_range **range, int *ranges, > > > return ret; > > > } > > > > > > +static uint64_t cmdline_get_acpi_rsdp(void) { > > > + uint64_t acpi_rsdp = 0; > > > + char *tmp_cmdline, *rsdp_param; > > > > > > + tmp_cmdline = get_command_line(); > > > + rsdp_param = strstr(tmp_cmdline, "acpi_rsdp="); > > > > strstr will locate the first acpi_rsdp, what about multiple acpi_rsdp > > provided? > > Good catch, should always use the latest acpi_rsdp provided, will fix that. > > > > > BTW, if one provide a wrong adress in acpi_rsdp= cmdline then it is not > > usable. > > > > I think in that case kernel will not boot. If kexec is available then > it means a right value is given. > After double check the kernel will boot even wrong acpi_rsdp is given, so I'll drop this part. boot_params in newer kernel will be enough to make sure kexec loop boot with EFI disabled won't fail. -- Best Regards, Kairui Song _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec