mirror of https://github.com/xemu-project/xemu.git
acpi: Fix PCI hole handling on build_srat()
The original SeaBIOS code used the RamSize variable, that was used by SeaBIOS for the size of RAM below 4GB, not for all RAM. When copied to QEMU, the code was changed to use the full RAM size, and this broke the build_srat() code that handles the PCI hole. Change build_srat() to use ram_size_below_4g instead of ram_size, to restore the original behavior from SeaBIOS. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
f30ee8a968
commit
4c8a949b24
|
@ -1080,16 +1080,16 @@ build_srat(GArray *table_data, GArray *linker,
|
|||
next_base = mem_base + mem_len;
|
||||
|
||||
/* Cut out the ACPI_PCI hole */
|
||||
if (mem_base <= guest_info->ram_size &&
|
||||
next_base > guest_info->ram_size) {
|
||||
mem_len -= next_base - guest_info->ram_size;
|
||||
if (mem_base <= guest_info->ram_size_below_4g &&
|
||||
next_base > guest_info->ram_size_below_4g) {
|
||||
mem_len -= next_base - guest_info->ram_size_below_4g;
|
||||
if (mem_len > 0) {
|
||||
numamem = acpi_data_push(table_data, sizeof *numamem);
|
||||
acpi_build_srat_memory(numamem, mem_base, mem_len, i-1, 1);
|
||||
}
|
||||
mem_base = 1ULL << 32;
|
||||
mem_len = next_base - guest_info->ram_size;
|
||||
next_base += (1ULL << 32) - guest_info->ram_size;
|
||||
mem_len = next_base - guest_info->ram_size_below_4g;
|
||||
next_base += (1ULL << 32) - guest_info->ram_size_below_4g;
|
||||
}
|
||||
numamem = acpi_data_push(table_data, sizeof *numamem);
|
||||
acpi_build_srat_memory(numamem, mem_base, mem_len, i - 1, 1);
|
||||
|
|
Loading…
Reference in New Issue