diff mbox

bios: Fix MADT corruption and RSDT size when using -acpitable

Message ID 1242262325-18444-1-git-send-email-vincent@vincent-minet.net (mailing list archive)
State New, archived
Headers show

Commit Message

Vincent Minet May 14, 2009, 12:52 a.m. UTC
External ACPI tables are counted twice for the RSDT size and the load
address for the first external table is in the MADT (interrupt override
entries are overwritten).

Signed-off-by: Vincent Minet <vincent@vincent-minet.net>
---
 kvm/bios/rombios32.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

Comments

Anthony Liguori May 14, 2009, 12:59 a.m. UTC | #1
Vincent Minet wrote:
> External ACPI tables are counted twice for the RSDT size and the load
> address for the first external table is in the MADT (interrupt override
> entries are overwritten).
>
> Signed-off-by: Vincent Minet <vincent@vincent-minet.net>
>   

Beth,

I think you had a patch attempting to address the same issue.  It was a 
bit more involved though.

Which is the proper fix and are they both to the same problem?

Regards,

Anthony Liguori

> ---
>  kvm/bios/rombios32.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/kvm/bios/rombios32.c b/kvm/bios/rombios32.c
> index cbd5f15..289361b 100755
> --- a/kvm/bios/rombios32.c
> +++ b/kvm/bios/rombios32.c
> @@ -1626,7 +1626,7 @@ void acpi_bios_init(void)
>      addr = base_addr = ram_size - ACPI_DATA_SIZE;
>      rsdt_addr = addr;
>      rsdt = (void *)(addr);
> -    rsdt_size = sizeof(*rsdt) + external_tables * 4;
> +    rsdt_size = sizeof(*rsdt);
>      addr += rsdt_size;
>  
>      fadt_addr = addr;
> @@ -1787,6 +1787,7 @@ void acpi_bios_init(void)
>              }
>              int_override++;
>              madt_size += sizeof(struct madt_int_override);
> +            addr += sizeof(struct madt_int_override);
>          }
>          acpi_build_table_header((struct acpi_table_header *)madt,
>                                  "APIC", madt_size, 1);
>   

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/kvm/bios/rombios32.c b/kvm/bios/rombios32.c
index cbd5f15..289361b 100755
--- a/kvm/bios/rombios32.c
+++ b/kvm/bios/rombios32.c
@@ -1626,7 +1626,7 @@  void acpi_bios_init(void)
     addr = base_addr = ram_size - ACPI_DATA_SIZE;
     rsdt_addr = addr;
     rsdt = (void *)(addr);
-    rsdt_size = sizeof(*rsdt) + external_tables * 4;
+    rsdt_size = sizeof(*rsdt);
     addr += rsdt_size;
 
     fadt_addr = addr;
@@ -1787,6 +1787,7 @@  void acpi_bios_init(void)
             }
             int_override++;
             madt_size += sizeof(struct madt_int_override);
+            addr += sizeof(struct madt_int_override);
         }
         acpi_build_table_header((struct acpi_table_header *)madt,
                                 "APIC", madt_size, 1);