[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [IA64] LID virtualization



# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID 60578e2ace8efed61769d01bf6047c8b94b9a39f
# Parent  dc99944b9bd0bd1984d869bdd8db3fde808ce5f8
[IA64] LID virtualization

Virtualize lid for domU.
LSAPIC table cleaned for SMP-g.

Signed-off-by: Tristan Gingold <tristan.gingold@xxxxxxxx>

diff -r dc99944b9bd0 -r 60578e2ace8e xen/arch/ia64/xen/dom_fw.c
--- a/xen/arch/ia64/xen/dom_fw.c        Wed Mar 15 15:22:03 2006
+++ b/xen/arch/ia64/xen/dom_fw.c        Wed Mar 15 15:28:23 2006
@@ -513,15 +513,15 @@
        struct acpi_table_header dsdt;
        u8 aml[16];
        struct acpi_table_madt madt;
-       struct acpi_table_lsapic lsapic;
+       struct acpi_table_lsapic lsapic[MAX_VIRT_CPUS];
        u8 pm1a_evt_blk[4];
        u8 pm1a_cnt_blk[1];
        u8 pm_tmr_blk[4];
 };
 
 /* Create enough of an ACPI structure to make the guest OS ACPI happy. */
-void
-dom_fw_fake_acpi(struct fake_acpi_tables *tables)
+static void
+dom_fw_fake_acpi(struct domain *d, struct fake_acpi_tables *tables)
 {
        struct acpi20_table_rsdp *rsdp = &tables->rsdp;
        struct xsdt_descriptor_rev2 *xsdt = &tables->xsdt;
@@ -529,7 +529,8 @@
        struct facs_descriptor_rev2 *facs = &tables->facs;
        struct acpi_table_header *dsdt = &tables->dsdt;
        struct acpi_table_madt *madt = &tables->madt;
-       struct acpi_table_lsapic *lsapic = &tables->lsapic;
+       struct acpi_table_lsapic *lsapic = tables->lsapic;
+       int i;
 
        memset(tables, 0, sizeof(struct fake_acpi_tables));
 
@@ -621,16 +622,20 @@
        strncpy(madt->header.signature, APIC_SIG, 4);
        madt->header.revision = 2;
        madt->header.length = sizeof(struct acpi_table_madt) +
-                             sizeof(struct acpi_table_lsapic);
+               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);
 
-       /* A single LSAPIC entry describes the CPU.  Revisit for SMP guests */
-       lsapic->header.type = ACPI_MADT_LSAPIC;
-       lsapic->header.length = sizeof(struct acpi_table_lsapic);
-       lsapic->flags.enabled = 1;
+       /* An LSAPIC entry describes a CPU.  */
+       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].id = i;
+               lsapic[i].eid = 0;
+               lsapic[i].flags.enabled = (d->vcpu[i] != NULL);
+       }
 
        madt->header.checksum = generate_acpi_checksum(madt,
                                                       madt->header.length);
@@ -784,7 +789,7 @@
 
                        acpi_tables = (void *)cp;
                        cp += sizeof(struct fake_acpi_tables);
-                       dom_fw_fake_acpi(acpi_tables);
+                       dom_fw_fake_acpi(d, acpi_tables);
 
                        efi_tables[i].guid = ACPI_20_TABLE_GUID;
                        efi_tables[i].table = dom_pa((unsigned long) 
acpi_tables);
diff -r dc99944b9bd0 -r 60578e2ace8e xen/arch/ia64/xen/vcpu.c
--- a/xen/arch/ia64/xen/vcpu.c  Wed Mar 15 15:22:03 2006
+++ b/xen/arch/ia64/xen/vcpu.c  Wed Mar 15 15:28:23 2006
@@ -726,12 +726,12 @@
 
 IA64FAULT vcpu_get_lid(VCPU *vcpu, UINT64 *pval)
 {
-//extern unsigned long privop_trace;
-//privop_trace=1;
-       //TODO: Implement this
-       printf("vcpu_get_lid: WARNING: Getting cr.lid always returns zero\n");
-       //*pval = 0;
-       *pval = ia64_getreg(_IA64_REG_CR_LID);
+       /* Use real LID for domain0 until vIOSAPIC is present.
+          Use EID=0, ID=vcpu_id for domU.  */
+       if (vcpu->domain == dom0)
+               *pval = ia64_getreg(_IA64_REG_CR_LID);
+       else
+               *pval = vcpu->vcpu_id << 24;
        return IA64_NO_FAULT;
 }
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.