The following commit has been merged in the master branch: commit 4ade5b2268b9ff05e48a9cb99689c4fd15fbe9c3 Merge: df5f0f0a028c9bf43949398a175dbaafaf513e14 5d07c2cc1962facb2f5d57b7b62987c213643724 Author: Linus Torvalds torvalds@linux-foundation.org Date: Mon Dec 12 13:24:04 2016 -0800
Merge branch 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 apic updates from Ingo Molnar: "Misc changes:
- optimize (reduce) IRQ handler tracing overhead (Wanpeng Li)
- clean up MSR helpers (Borislav Petkov)
- fix build warning on some configs (Sebastian Andrzej Siewior)"
* 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/msr: Cleanup/streamline MSR helpers x86/apic: Prevent tracing on apic_msr_write_eoi() x86/msr: Add wrmsr_notrace() x86/apic: Get rid of "warning: 'acpi_ioapic_lock' defined but not used"
diff --combined arch/x86/kernel/acpi/boot.c index 931ced8,066ceb7..4764fa5 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@@ -76,6 -76,7 +76,7 @@@ int acpi_fix_pin2_polarity __initdata static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE; #endif
+ #ifdef CONFIG_X86_IO_APIC /* * Locks related to IOAPIC hotplug * Hotplug side: @@@ -88,6 -89,7 +89,7 @@@ * ->ioapic_lock */ static DEFINE_MUTEX(acpi_ioapic_lock); + #endif
/* -------------------------------------------------------------------------- Boot-time Configuration @@@ -454,7 -456,6 +456,7 @@@ static void __init acpi_sci_ioapic_setu polarity = acpi_sci_flags & ACPI_MADT_POLARITY_MASK;
mp_override_legacy_irq(bus_irq, polarity, trigger, gsi); + acpi_penalize_sci_irq(bus_irq, trigger, polarity);
/* * stash over-ride to indicate we've been here diff --combined arch/x86/kernel/kvm.c index 52e90d6,aad52f1..fb5afc6 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@@ -308,7 -308,7 +308,7 @@@ static void kvm_register_steal_time(voi
static DEFINE_PER_CPU(unsigned long, kvm_apic_eoi) = KVM_PV_EOI_DISABLED;
- static void kvm_guest_apic_eoi_write(u32 reg, u32 val) + static notrace void kvm_guest_apic_eoi_write(u32 reg, u32 val) { /** * This relies on __test_and_clear_bit to modify the memory @@@ -319,7 -319,7 +319,7 @@@ */ if (__test_and_clear_bit(KVM_PV_EOI_BIT, this_cpu_ptr(&kvm_apic_eoi))) return; - apic_write(APIC_EOI, APIC_EOI_ACK); + apic->native_eoi_write(APIC_EOI, APIC_EOI_ACK); }
static void kvm_guest_cpu_init(void) @@@ -592,14 -592,6 +592,14 @@@ out local_irq_restore(flags); }
+__visible bool __kvm_vcpu_is_preempted(int cpu) +{ + struct kvm_steal_time *src = &per_cpu(steal_time, cpu); + + return !!src->preempted; +} +PV_CALLEE_SAVE_REGS_THUNK(__kvm_vcpu_is_preempted); + /* * Setup pv_lock_ops to exploit KVM_FEATURE_PV_UNHALT if present. */ @@@ -616,11 -608,6 +616,11 @@@ void __init kvm_spinlock_init(void pv_lock_ops.queued_spin_unlock = PV_CALLEE_SAVE(__pv_queued_spin_unlock); pv_lock_ops.wait = kvm_wait; pv_lock_ops.kick = kvm_kick_cpu; + + if (kvm_para_has_feature(KVM_FEATURE_STEAL_TIME)) { + pv_lock_ops.vcpu_is_preempted = + PV_CALLEE_SAVE(__kvm_vcpu_is_preempted); + } }
static __init int kvm_spinlock_init_jump(void)