# HG changeset patch # User gingold@virtu10 # Node ID b2df12c39decd119fe940c96e07bd121493511f5 # Parent 8eb45f399f28877e083985d6cf0c8cf478885ae8 Create just as many LSAPIC entries in MADT as the number of cpus. This avoids spurious XENBUS errors when kernel try to read xenstore entries for cpus unknown by xend/xenstore. Signed-off-by: Tristan Gingold diff -r 8eb45f399f28 -r b2df12c39dec xen/arch/ia64/xen/dom_fw.c --- a/xen/arch/ia64/xen/dom_fw.c Wed Aug 02 08:45:45 2006 +0200 +++ b/xen/arch/ia64/xen/dom_fw.c Wed Aug 02 11:26:06 2006 +0200 @@ -342,6 +342,7 @@ dom_fw_fake_acpi(struct domain *d, struc struct acpi_table_lsapic *lsapic = tables->lsapic; int i; int aml_len; + int nbr_cpus; memset(tables, 0, sizeof(struct fake_acpi_tables)); @@ -449,23 +450,26 @@ dom_fw_fake_acpi(struct domain *d, struc /* setup MADT */ strncpy(madt->header.signature, APIC_SIG, 4); madt->header.revision = 2; - madt->header.length = sizeof(struct acpi_table_madt) + - MAX_VIRT_CPUS * sizeof(struct acpi_table_lsapic); strcpy(madt->header.oem_id, "XEN"); strcpy(madt->header.oem_table_id, "Xen/ia64"); strcpy(madt->header.asl_compiler_id, "XEN"); madt->header.asl_compiler_revision = (XEN_VERSION<<16)|(XEN_SUBVERSION); /* An LSAPIC entry describes a CPU. */ + nbr_cpus = 0; for (i = 0; i < MAX_VIRT_CPUS; i++) { lsapic[i].header.type = ACPI_MADT_LSAPIC; lsapic[i].header.length = sizeof(struct acpi_table_lsapic); lsapic[i].acpi_id = i; lsapic[i].id = i; lsapic[i].eid = 0; - lsapic[i].flags.enabled = (d->vcpu[i] != NULL); - } - + if (d->vcpu[i] != NULL) { + lsapic[i].flags.enabled = 1; + nbr_cpus++; + } + } + madt->header.length = sizeof(struct acpi_table_madt) + + nbr_cpus * sizeof(struct acpi_table_lsapic); madt->header.checksum = generate_acpi_checksum(madt, madt->header.length); return;