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