aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIsaku Yamahata <yamahata@valinux.co.jp>2008-08-08 11:38:20 +0900
committerIsaku Yamahata <yamahata@valinux.co.jp>2008-08-08 11:38:20 +0900
commitbd339968b8b2a6a5a7e84a0315693059cf295f36 (patch)
tree6ab4f1ecc20f887f014f8f056773c8d3ffd46050
parentbd2f7cf2517f7839367859ccf7434d4085d3386a (diff)
downloadxen-bd339968b8b2a6a5a7e84a0315693059cf295f36.tar.gz
xen-bd339968b8b2a6a5a7e84a0315693059cf295f36.tar.bz2
xen-bd339968b8b2a6a5a7e84a0315693059cf295f36.zip
[IA64] Cleanup ACPI checksum warnings
On bootup, I get a couple of these: (XEN) ACPI Warning (tbutils-0219): Incorrect checksum in table [APIC] - CE, should be 04 [20070126] (XEN) ACPI Warning (tbutils-0219): Incorrect checksum in table [APIC] - CE, should be 04 [20070126] I don't remember seeing them before, but they're pretty easy to fix. The problem is we update the lsapics, causing the checksum to be wrong, then we look for platform interrupt sources, which spits out a warning, and finally we look for the MADT again to fix the checksum, which also prints a warning. If we grab a pointer to the MADT before these, we can update the checksum after each step and avoid the warnings. Signed-off-by: Alex Williamson <alex.williamson@hp.com>
-rw-r--r--xen/arch/ia64/xen/dom_fw_dom0.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/xen/arch/ia64/xen/dom_fw_dom0.c b/xen/arch/ia64/xen/dom_fw_dom0.c
index 43ca7908a1..383845f3d4 100644
--- a/xen/arch/ia64/xen/dom_fw_dom0.c
+++ b/xen/arch/ia64/xen/dom_fw_dom0.c
@@ -101,6 +101,9 @@ acpi_update_madt_checksum(struct acpi_table_header *table)
{
struct acpi_table_madt *acpi_madt;
+ if (!table)
+ return -EINVAL;
+
acpi_madt = (struct acpi_table_madt *)table;
acpi_madt->header.checksum = 0;
acpi_madt->header.checksum = -acpi_tb_checksum((u8*)acpi_madt,
@@ -170,8 +173,12 @@ static void __init acpi_table_disable(char *id)
/* base is physical address of acpi table */
static void __init touch_acpi_table(void)
{
+ struct acpi_table_header *madt = NULL;
+
lsapic_nbr = 0;
+ acpi_get_table(ACPI_SIG_MADT, 0, &madt);
+
/*
* Modify dom0 MADT:
* - Disable CPUs that would exceed max vCPUs for the domain
@@ -179,16 +186,22 @@ static void __init touch_acpi_table(void)
* - Hide CPEI interrupt source
*
* ACPI tables must be backed-up before modification!
+ *
+ * We update the checksum each time we modify to keep the
+ * ACPI CA from warning about invalid checksums.
*/
acpi_table_parse(ACPI_SIG_MADT, acpi_backup_table);
if (acpi_table_parse_madt(ACPI_MADT_LSAPIC, acpi_update_lsapic, 0) < 0)
printk("Error parsing MADT - no LAPIC entries\n");
+
+ acpi_update_madt_checksum(madt);
+
if (acpi_table_parse_madt(ACPI_MADT_PLAT_INT_SRC,
acpi_patch_plat_int_src, 0) < 0)
printk("Error parsing MADT - no PLAT_INT_SRC entries\n");
- acpi_table_parse(ACPI_SIG_MADT, acpi_update_madt_checksum);
+ acpi_update_madt_checksum(madt);
/*
* SRAT & SLIT tables aren't useful for Dom0 until