[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v1 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> --- This is one patch that modifies config->ainfo.vm_gid_addr in build.c, with that change consumed by the caller (when it sets VM_PARAM_VM_GENERATION_ID_ADDR). We could make the caller fill out config->ainfo.vm_gid_addr to avoid this as suggested by Jan but I think logically this belongs in the ACPI builder. tools/firmware/hvmloader/acpi/build.c | 30 +++++++++++------------------- tools/firmware/hvmloader/acpi/libacpi.h | 2 ++ tools/firmware/hvmloader/util.c | 16 ++++++++++++++++ 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/tools/firmware/hvmloader/acpi/build.c b/tools/firmware/hvmloader/acpi/build.c index 1092b4e..ca9727f 100644 --- a/tools/firmware/hvmloader/acpi/build.c +++ b/tools/firmware/hvmloader/acpi/build.c @@ -446,32 +446,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->ainfo.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->ainfo.vm_gid_addr = virt_to_phys(buf); return 1; } @@ -593,7 +585,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(&config->ainfo) ) + if ( !new_vm_gid(config) ) goto oom; *(struct acpi_info *)config->ainfop = config->ainfo; diff --git a/tools/firmware/hvmloader/acpi/libacpi.h b/tools/firmware/hvmloader/acpi/libacpi.h index 098eee1..aa19972 100644 --- a/tools/firmware/hvmloader/acpi/libacpi.h +++ b/tools/firmware/hvmloader/acpi/libacpi.h @@ -52,6 +52,8 @@ struct acpi_config { const unsigned char *dsdt_15cpu; unsigned int dsdt_15cpu_len; + uint64_t vm_gid[2]; + /* May have some fields updated by acpi_build_table() */ struct acpi_info ainfo; /* diff --git a/tools/firmware/hvmloader/util.c b/tools/firmware/hvmloader/util.c index 4293efa..e62052b 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); @@ -876,10 +879,23 @@ void hvmloader_acpi_build_tables(struct acpi_config *config, config->ainfo.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->ainfop = ACPI_INFO_PHYSICAL_ADDRESS; acpi_build_tables(config); + + hvm_param_set(HVM_PARAM_VM_GENERATION_ID_ADDR, config->ainfo.vm_gid_addr); } /* -- 1.7.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |