On 21/10/2015 17:04, Laszlo Ersek wrote:
> Now, on TCG, reading the APIC ID register (for device "apic") happens in:
> 
> apic_mem_readl() [hw/intc/apic.c]
>   val = s->id << 24
> 
> Whereas on KVM, the same occurs in:
> 
> kvm_apic_mem_read() [hw/i386/kvm/apic.c]
>   return ~(uint64_t)0;
> 
> However, such reads don't seem to reach QEMU (and the above read stub);
> they are handled within KVM (I don't know where the distinction is made
> in KVM).

It's here:

static u32 __apic_read(struct kvm_lapic *apic, unsigned int offset)
{
        u32 val = 0;

        if (offset >= LAPIC_MMIO_LENGTH)
                return 0;

        switch (offset) {
        case APIC_ID:
                if (apic_x2apic_mode(apic))
                        val = kvm_apic_id(apic);
                else
                        val = kvm_apic_id(apic) << 24;
                break;

I'll try following the equally dizzying chains in OVMF and see why KVM
is in x2apic mode.  In any case, "-cpu foo,-x2apic" is the next thing to
try.

Paolo
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to