[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH][v2] xen: Pass the location of the ACPI RSDP to DOM0.
>>> On 20.01.14 at 23:08, Philip Wernersbach <philip.wernersbach@xxxxxxxxx> >>> wrote: > xen: [v2] Pass the location of the ACPI RSDP to DOM0. > > Some machines, such as recent IBM servers, only allow the OS to get the > ACPI RSDP from EFI. Since Xen nukes DOM0's ability to access EFI, DOM0 This reads as if this was a bug in Xen, which it isn't. Dom0's lack of EFI support when running on top of Xen is the issue. > cannot get the RSDP on these machines, leading to all sorts of > functionality reductions. > > Signed-off-by: Philip Wernersbach <philip.wernersbach@xxxxxxxxx> > > diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c > index b49256d..8c307c9 100644 > --- a/xen/arch/x86/setup.c > +++ b/xen/arch/x86/setup.c > @@ -1378,6 +1378,25 @@ void __init __start_xen(unsigned long mbi_p) > safe_strcat(dom0_cmdline, " acpi="); > safe_strcat(dom0_cmdline, acpi_param); > } > + if ( !strstr(dom0_cmdline, "acpi_rsdp=") ) I think I had indicated my opposition to this sort of hack on v1 already; I'm not sure I asked which OSes usable as Dom0 but other than Linux recognize this option. Or which versions of Linux actually do (I'm pretty sure older ones don't). Bottom line - I continue to think that the issue should be fixed in Linux. > + { > + char acpi_os_root_pointer_string[MAX_RSDP_ADDRESS_STRING]; > + int acpi_os_root_pointer_string_size = > snprintf(acpi_os_root_pointer_string, > + > MAX_RSDP_ADDRESS_STRING, "%08lX", > + > acpi_os_get_root_pointer()); > + > + if ( (acpi_os_root_pointer_string_size > 0) && > (acpi_os_root_pointer_string_size <= MAX_RSDP_ADDRESS_STRING) ) > + { > + safe_strcat(dom0_cmdline, " acpi_rsdp=0x"); > + safe_strcat(dom0_cmdline, acpi_os_root_pointer_string); > + } > + else > + { > + printk(XENLOG_WARNING "RSDP Address String Size Check > Failed!\n"); > + printk(XENLOG_WARNING "Not passing acpi_rsdp to Dom0!\n"); > + printk(XENLOG_WARNING "(Expected size 1-%d, got > %d)\n", MAX_RSDP_ADDRESS_STRING, acpi_os_root_pointer_string_size); > + } > + } > > cmdline = dom0_cmdline; > } > diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h > index 8c5697e..a7c3905 100644 > --- a/xen/include/public/xen.h > +++ b/xen/include/public/xen.h > @@ -750,6 +750,7 @@ struct start_info { > /* SIF_MOD_START_PFN set in flags). > */ > unsigned long mod_len; /* Size (bytes) of pre-loaded module. */ > #define MAX_GUEST_CMDLINE 1024 > +#define MAX_RSDP_ADDRESS_STRING 21 This clearly doesn't belong here (public header). In fact it doesn't belong into any header at all, as it's being used only in a single source file. Jan > int8_t cmd_line[MAX_GUEST_CMDLINE]; > /* The pfn range here covers both page table and p->m table frames. */ > unsigned long first_p2m_pfn;/* 1st pfn forming initial P->M table. */ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |