[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v7 04/10] tools/hvmloader: Retrieve (x2)APIC IDs from the APs themselves
On 21.10.2024 17:45, Alejandro Vallejo wrote: > --- a/tools/firmware/hvmloader/hvmloader.c > +++ b/tools/firmware/hvmloader/hvmloader.c > @@ -224,7 +224,7 @@ static void apic_setup(void) > > /* 8259A ExtInts are delivered through IOAPIC pin 0 (Virtual Wire Mode). > */ > ioapic_write(0x10, APIC_DM_EXTINT); > - ioapic_write(0x11, SET_APIC_ID(LAPIC_ID(0))); > + ioapic_write(0x11, SET_APIC_ID(cpu_to_x2apicid[0])); > } In uses like this or ... > --- a/tools/firmware/hvmloader/mp_tables.c > +++ b/tools/firmware/hvmloader/mp_tables.c > @@ -198,8 +198,10 @@ static void fill_mp_config_table(struct mp_config_table > *mpct, int length) > /* fills in an MP processor entry for VCPU 'vcpu_id' */ > static void fill_mp_proc_entry(struct mp_proc_entry *mppe, int vcpu_id) > { > + ASSERT(cpu_to_x2apicid[vcpu_id] < 0xFF ); > + > mppe->type = ENTRY_TYPE_PROCESSOR; > - mppe->lapic_id = LAPIC_ID(vcpu_id); > + mppe->lapic_id = cpu_to_x2apicid[vcpu_id]; ... this one (and also in acpi_lapic_id()), I consider the "x2" in the name actively confusing, despite ... > --- a/tools/firmware/hvmloader/smp.c > +++ b/tools/firmware/hvmloader/smp.c > @@ -29,7 +29,37 @@ > > #include <xen/vcpu.h> > > -static int ap_callin; > +/** > + * Lookup table of (x2)APIC IDs. > + * > + * Each entry is populated its respective CPU as they come online. This is > required > + * for generating the MADT with minimal assumptions about ID relationships. > + * > + * While the name makes "x2" explicit, these may actually be xAPIC IDs if no > + * x2APIC is present. "x2" merely highlights that each entry is 32 bits wide. > + */ > +uint32_t cpu_to_x2apicid[HVM_MAX_VCPUS]; ... the commentary here. > +/** Tristate about x2apic being supported. -1=unknown */ > +static int has_x2apic = -1; Why is this a tristate? Prior to the variable having been set, ... > +static uint32_t read_apic_id(void) > +{ > + uint32_t apic_id; > + > + if ( has_x2apic ) > + cpuid(0xb, NULL, NULL, NULL, &apic_id); ... this is bogus anyway. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |