• Linus Torvalds's avatar
    Merge tag 'x86-urgent-2020-02-09' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 1a2a76c2
    Linus Torvalds authored
    Pull x86 fixes from Thomas Gleixner:
     "A set of fixes for X86:
    
       - Ensure that the PIT is set up when the local APIC is disable or
         configured in legacy mode. This is caused by an ordering issue
         introduced in the recent changes which skip PIT initialization when
         the TSC and APIC frequencies are already known.
    
       - Handle malformed SRAT tables during early ACPI parsing which caused
         an infinite loop anda boot hang.
    
       - Fix a long standing race in the affinity setting code which affects
         PCI devices with non-maskable MSI interrupts. The problem is caused
         by the non-atomic writes of the MSI address (destination APIC id)
         and data (vector) fields which the device uses to construct the MSI
         message. The non-atomic writes are mandated by PCI.
    
         If both fields change and the device raises an interrupt after
         writing address and before writing data, then the MSI block
         constructs a inconsistent message which causes interrupts to be
         lost and subsequent malfunction of the device.
    
         The fix is to redirect the interrupt to the new vector on the
         current CPU first and then switch it over to the new target CPU.
         This allows to observe an eventually raised interrupt in the
         transitional stage (old CPU, new vector) to be observed in the APIC
         IRR and retriggered on the new target CPU and the new vector.
    
         The potential spurious interrupts caused by this are harmless and
         can in the worst case expose a buggy driver (all handlers have to
         be able to deal with spurious interrupts as they can and do happen
         for various reasons).
    
       - Add the missing suspend/resume mechanism for the HYPERV hypercall
         page which prevents resume hibernation on HYPERV guests. This
         change got lost before the merge window.
    
       - Mask the IOAPIC before disabling the local APIC to prevent
         potentially stale IOAPIC remote IRR bits which cause stale
         interrupt lines after resume"
    
    * tag 'x86-urgent-2020-02-09' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
      x86/apic: Mask IOAPIC entries when disabling the local APIC
      x86/hyperv: Suspend/resume the hypercall page for hibernation
      x86/apic/msi: Plug non-maskable MSI affinity race
      x86/boot: Handle malformed SRAT tables during early ACPI parsing
      x86/timer: Don't skip PIT setup when APIC is disabled or in legacy mode
    1a2a76c2
x86_init.c 4.71 KB