Skip to content
  • Konstantin Belousov's avatar
    Add x2APIC support. Enable it by default if CPU is capable. The · 4c918926
    Konstantin Belousov authored
    hw.x2apic_enable tunable allows disabling it from the loader prompt.
    
    To closely repeat effects of the uncached memory ops when accessing
    registers in the xAPIC mode, the x2APIC writes to MSRs are preceeded
    by mfence, except for the EOI notifications.  This is probably too
    strict, only ICR writes to send IPI require serialization to ensure
    that other CPUs see the previous actions when IPI is delivered.  This
    may be changed later.
    
    In vmm justreturn IPI handler, call doreti_iret instead of doing iretd
    inline, to handle corner conditions.
    
    Note that the patch only switches LAPICs into x2APIC mode. It does not
    enables FreeBSD to support > 255 CPUs, which requires parsing x2APIC
    MADT entries and doing interrupts remapping, but is the required step
    on the way.
    
    Reviewed by:	neel
    Tested by:	pho (real hardware), neel (on bhyve)
    Discussed with:	jhb, grehan
    Sponsored by:	The FreeBSD Foundation
    MFC after:	2 months
    4c918926