[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC 03/20] acpi/hvmloader: Initialize vm_gid data outside ACPI code
This way ACPI code won't use xenstore-read() and hvm_param_set() which are private to hvmloader. Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> --- tools/firmware/hvmloader/acpi/acpi2_0.h | 1 + tools/firmware/hvmloader/acpi/build.c | 30 +++++++++++------------------- tools/firmware/hvmloader/util.c | 15 +++++++++++++++ 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/tools/firmware/hvmloader/acpi/acpi2_0.h b/tools/firmware/hvmloader/acpi/acpi2_0.h index 24f86c9..275981e 100644 --- a/tools/firmware/hvmloader/acpi/acpi2_0.h +++ b/tools/firmware/hvmloader/acpi/acpi2_0.h @@ -474,6 +474,7 @@ struct acpi_config { unsigned char *dsdt_15cpu; int dsdt_15cpu_len; struct acpi_info acpi_info; + uint64_t vm_gid[2]; }; void acpi_build_tables(struct acpi_config *config, unsigned int physical); diff --git a/tools/firmware/hvmloader/acpi/build.c b/tools/firmware/hvmloader/acpi/build.c index e039d9e..e3e8b05 100644 --- a/tools/firmware/hvmloader/acpi/build.c +++ b/tools/firmware/hvmloader/acpi/build.c @@ -448,32 +448,24 @@ static int construct_secondary_tables(unsigned long *table_ptrs, * * Return 0 if memory failure, != 0 if success */ -static int new_vm_gid(struct acpi_info *acpi_info) +static int new_vm_gid(struct acpi_config *config) { - uint64_t vm_gid[2], *buf; - const char * s; - char *end; - - acpi_info->vm_gid_addr = 0; - - /* read ID and check for 0 */ - s = xenstore_read("platform/generation-id", "0:0"); - vm_gid[0] = strtoll(s, &end, 0); - vm_gid[1] = 0; - if ( end && end[0] == ':' ) - vm_gid[1] = strtoll(end+1, NULL, 0); - if ( !vm_gid[0] && !vm_gid[1] ) + uint64_t *buf; + + config->acpi_info.vm_gid_addr = 0; + + /* check for 0 ID*/ + if ( !config->vm_gid[0] && !config->vm_gid[1] ) return 1; /* copy to allocate BIOS memory */ - buf = (uint64_t *) mem_alloc(sizeof(vm_gid), 8); + buf = (uint64_t *) mem_alloc(sizeof(config->vm_gid), 8); if ( !buf ) return 0; - memcpy(buf, vm_gid, sizeof(vm_gid)); + memcpy(buf, config->vm_gid, sizeof(config->vm_gid)); /* set into ACPI table and HVM param the address */ - acpi_info->vm_gid_addr = virt_to_phys(buf); - hvm_param_set(HVM_PARAM_VM_GENERATION_ID_ADDR, acpi_info->vm_gid_addr); + config->acpi_info.vm_gid_addr = virt_to_phys(buf); return 1; } @@ -597,7 +589,7 @@ void acpi_build_tables(struct acpi_config *config, unsigned int physical) offsetof(struct acpi_20_rsdp, extended_checksum), sizeof(struct acpi_20_rsdp)); - if ( !new_vm_gid(&config->acpi_info) ) + if ( !new_vm_gid(config) ) goto oom; memcpy((struct acpi_info *)ACPI_INFO_PHYSICAL_ADDRESS, diff --git a/tools/firmware/hvmloader/util.c b/tools/firmware/hvmloader/util.c index 7ce5f5d..e4c188c 100644 --- a/tools/firmware/hvmloader/util.c +++ b/tools/firmware/hvmloader/util.c @@ -26,6 +26,7 @@ #include <xen/xen.h> #include <xen/memory.h> #include <xen/sched.h> +#include <xen/hvm/params.h> /* * Check whether there exists overlap in the specified memory range. @@ -860,6 +861,8 @@ int hpet_exists(unsigned long hpet_base) void hvmloader_acpi_build_tables(struct acpi_config *config, unsigned int physical) { + const char *s; + /* Allocate and initialise the acpi info area. */ mem_hole_populate_ram(ACPI_INFO_PHYSICAL_ADDRESS >> PAGE_SHIFT, 1); @@ -875,7 +878,19 @@ void hvmloader_acpi_build_tables(struct acpi_config *config, config->acpi_info.pci_hi_len = pci_hi_mem_end - pci_hi_mem_start; } + s = xenstore_read("platform/generation-id", "0:0"); + if (s) { + char *end; + + config->vm_gid[0] = strtoll(s, &end, 0); + config->vm_gid[1] = 0; + if ( end && end[0] == ':' ) + config->vm_gid[1] = strtoll(end+1, NULL, 0); + } + acpi_build_tables(config, physical); + + hvm_param_set(HVM_PARAM_VM_GENERATION_ID_ADDR, config->acpi_info.vm_gid_addr); } /* -- 2.4.3 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |