[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 03/23] 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> --- v2: * Pass VM GID address back via acpi_config.vm_gid_addr. tools/firmware/hvmloader/acpi/build.c | 34 ++++++++++++++------------------- tools/firmware/hvmloader/acpi/libacpi.h | 3 +++ tools/firmware/hvmloader/util.c | 16 ++++++++++++++++ 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/tools/firmware/hvmloader/acpi/build.c b/tools/firmware/hvmloader/acpi/build.c index f251c05..df104a3 100644 --- a/tools/firmware/hvmloader/acpi/build.c +++ b/tools/firmware/hvmloader/acpi/build.c @@ -462,32 +462,26 @@ 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, + struct acpi_info *info) { - 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; + + 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 = 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); + /* set the address into ACPI table and also pass it back to the caller */ + info->vm_gid_addr = virt_to_phys(buf); + config->vm_gid_addr = virt_to_phys(buf); return 1; } @@ -623,7 +617,7 @@ void acpi_build_tables(struct acpi_config *config) offsetof(struct acpi_20_rsdp, extended_checksum), sizeof(struct acpi_20_rsdp)); - if ( !new_vm_gid(acpi_info) ) + if ( !new_vm_gid(config, acpi_info) ) goto oom; return; diff --git a/tools/firmware/hvmloader/acpi/libacpi.h b/tools/firmware/hvmloader/acpi/libacpi.h index 5e0f400..4cbd41e 100644 --- a/tools/firmware/hvmloader/acpi/libacpi.h +++ b/tools/firmware/hvmloader/acpi/libacpi.h @@ -37,6 +37,9 @@ struct acpi_config { uint32_t table_flags; + uint64_t vm_gid[2]; + unsigned long vm_gid_addr; /* OUT parameter */ + /* * Address where acpi_info should be placed. * This must match the OperationRegion(BIOS, SystemMemory, ....) diff --git a/tools/firmware/hvmloader/util.c b/tools/firmware/hvmloader/util.c index 7de2fb6..e8ce12b 100644 --- a/tools/firmware/hvmloader/util.c +++ b/tools/firmware/hvmloader/util.c @@ -27,6 +27,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. @@ -861,6 +862,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); @@ -881,10 +884,23 @@ void hvmloader_acpi_build_tables(struct acpi_config *config, config->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); + } + config->rsdp = physical; config->infop = ACPI_INFO_PHYSICAL_ADDRESS; acpi_build_tables(config); + + hvm_param_set(HVM_PARAM_VM_GENERATION_ID_ADDR, config->vm_gid_addr); } /* -- 1.8.3.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |