71b0269ae9
As per ACPI spec 6.3, Table 19-419 Object Conversion Rules, if the Buffer Field <= to the size of an Integer (in bits), it will be treated as an integer. Moreover, the integer size depends on DSDT tables revision number. If revision number is < 2, integer size is 32 bits, otherwise it is 64 bits. Current NVDIMM common DSM aml code (NCAL) uses CreateField() for creating DSM output buffer. This creates an issue in arm/virt platform where DSDT revision number is 2 and results in DSM buffer with a wrong size(8 bytes) gets returned when actual length is < 8 bytes. This causes guest kernel to report, "nfit ACPI0012:00: found a zero length table '0' parsing nfit" In order to fix this, aml code is now modified such that it builds the DSM output buffer in a byte by byte fashion when length is smaller than Integer size. Suggested-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <20200421125934.14952-2-shameerali.kolothum.thodi@huawei.com> Acked-by: Peter Maydell <peter.maydell@linaro.org> Tested-by: Eric Auger <eric.auger@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> |
||
---|---|---|
.. | ||
acpi_interface.c | ||
acpi-stub.c | ||
acpi-x86-stub.c | ||
aml-build-stub.c | ||
aml-build.c | ||
bios-linker-loader.c | ||
core.c | ||
cpu_hotplug.c | ||
cpu.c | ||
generic_event_device.c | ||
hmat.c | ||
hmat.h | ||
ich9.c | ||
ipmi-stub.c | ||
ipmi.c | ||
Kconfig | ||
Makefile.objs | ||
memory_hotplug.c | ||
nvdimm.c | ||
pci.c | ||
pcihp.c | ||
piix4.c | ||
tco.c | ||
tpm.c | ||
trace-events | ||
utils.c | ||
vmgenid.c |