|
[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 |