On 01/25/17 11:04, Laszlo Ersek wrote: > (7) The blob constructed in this function, as a GArray, should be the > exact same object that is later linked into fw_cfg, via acpi_setup() --> > vmgenid_add_fw_cfg(). > > Currently, the blob is allocated here under the variable "guid", and > passed to bios_linker_loader_alloc_ret_addr(). That results in the > creation of a new BiosLinkerFileEntry object, with the "blob" field > being set to "guid". > > However, in vmgenid_add_fw_cfg(), the VmGenIdState.guid.data field is > linked into fw_cfg. This is incorrect, those objects are independent, > but they should be the same. > > Here's how to implement it: > > * Add the field > > GArray *vmgenid > > to the "AcpiBuildTables" structure in "include/hw/acpi/aml-build.h", > under the "tcpalog" field. > > * Extend the acpi_build_tables_init() and acpi_build_tables_cleanup() > functions in "hw/acpi/aml-build.c", so that the new field is > initialized and released.
In acpi_build_tables_cleanup(), the line you need is g_array_free(tables->vmgenid, mfre); similarly to "tcpalog". > > * In the acpi_build() function, pass "tables->vmgenid" to > vmgenid_build_acpi(). This will require the a new parameter for the > latter function. > > * In vmgenid_build_acpi(), construct the blob as described under (5) > and (6). > > * In the acpi_setup() function, pass "tables.vmgenid" to > vmgenid_add_fw_cfg(). (Again, new function parameter is necessary.) > > * In vmgenid_add_fw_cfg(), link "tables.vmgenid->data" into fw_cfg, not > VmGenIdState.guid.data. Thanks Laszlo