[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH V3 3/3] hvmload: Add x2apic entry support in the MADT build
On Wed, Sep 13, 2017 at 12:52:49AM -0400, Lan Tianyu wrote: > @@ -88,7 +88,14 @@ static struct acpi_20_madt *construct_madt(struct > acpi_ctxt *ctxt, > sz = sizeof(struct acpi_20_madt); > sz += sizeof(struct acpi_20_madt_intsrcovr) * 16; > sz += sizeof(struct acpi_20_madt_ioapic); > - sz += sizeof(struct acpi_20_madt_lapic) * hvminfo->nr_vcpus; > + > + for ( i = 0; i < hvminfo->nr_vcpus; i++ ) > + { > + if ( config->lapic_id(i) > 254) I guess you already know I'm going to complain that the way to get the apic id is different here than in the previous patch. > + sz += sizeof(struct acpi_20_madt_x2apic); > + else > + sz += sizeof(struct acpi_20_madt_lapic); > + } > > madt = ctxt->mem_ops.alloc(ctxt, sz, 16); > if (!madt) return NULL; > @@ -142,27 +149,46 @@ static struct acpi_20_madt *construct_madt(struct > acpi_ctxt *ctxt, > io_apic->ioapic_id = config->ioapic_id; > io_apic->ioapic_addr = config->ioapic_base_address; > > - lapic = (struct acpi_20_madt_lapic *)(io_apic + 1); > + end = (struct acpi_20_madt_lapic *)(io_apic + 1); > } > else > - lapic = (struct acpi_20_madt_lapic *)(madt + 1); > + end = (struct acpi_20_madt_lapic *)(madt + 1); > > info->nr_cpus = hvminfo->nr_vcpus; > - info->madt_lapic0_addr = ctxt->mem_ops.v2p(ctxt, lapic); > + info->madt_lapic0_addr = ctxt->mem_ops.v2p(ctxt, end); > + > for ( i = 0; i < hvminfo->nr_vcpus; i++ ) > { > - memset(lapic, 0, sizeof(*lapic)); > - lapic->type = ACPI_PROCESSOR_LOCAL_APIC; > - lapic->length = sizeof(*lapic); > - /* Processor ID must match processor-object IDs in the DSDT. */ > - lapic->acpi_processor_id = i; > - lapic->apic_id = config->lapic_id(i); > - lapic->flags = (test_bit(i, hvminfo->vcpu_online) > - ? ACPI_LOCAL_APIC_ENABLED : 0); > - lapic++; > + unsigned int apic_id = config->lapic_id(i); > + > + if ( apic_id < 255 ) { > + struct acpi_20_madt_lapic *lapic = end; > + > + memset(lapic, 0, sizeof(*lapic)); > + lapic->type = ACPI_PROCESSOR_LOCAL_APIC; > + lapic->length = sizeof(*lapic); > + /* Processor ID must match processor-object IDs in the DSDT. */ > + lapic->acpi_processor_id = i; > + lapic->apic_id = apic_id; > + lapic->flags = test_bit(i, hvminfo->vcpu_online) > + ? ACPI_LOCAL_APIC_ENABLED : 0; > + end = ++lapic; > + } else { > + struct acpi_20_madt_x2apic *lapic = end; ^x2apic to avoid confusion? Thanks, Roger. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |