linux/arch/x86/include/asm
Andy Lutomirski 71b3c126e6 x86/mm: Add barriers and document switch_mm()-vs-flush synchronization
When switch_mm() activates a new PGD, it also sets a bit that
tells other CPUs that the PGD is in use so that TLB flush IPIs
will be sent.  In order for that to work correctly, the bit
needs to be visible prior to loading the PGD and therefore
starting to fill the local TLB.

Document all the barriers that make this work correctly and add
a couple that were missing.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-mm@kvack.org
Cc: stable@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-01-11 12:03:15 +01:00
..
crypto x86/fpu: Rename i387.h to fpu/api.h 2015-05-19 15:47:30 +02:00
fpu Merge branch 'x86-headers-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-11-03 21:05:40 -08:00
numachip x86/numachip: Introduce Numachip2 timer mechanisms 2015-09-22 22:25:33 +02:00
trace x86/fpu/mpx: Rework MPX 'xstate' types 2015-09-14 12:22:00 +02:00
uv x86/platform/uv: Insert per_cpu accessor function on uv_hub_nmi 2015-09-13 09:27:53 +02:00
xen xen/arm: Enable cpu_hotplug.c 2015-10-23 14:20:47 +01:00
a.out-core.h
acenv.h
acpi.h acpi, x86: Implement arch_apei_get_mem_attributes() 2015-08-08 10:37:39 +02:00
agp.h
alternative-asm.h x86/alternatives: Document macros 2015-05-06 11:25:31 +02:00
alternative.h x86/alternatives, x86/fpu: Add 'alternatives_patched' debug flag and use it in xsave_state() 2015-05-19 15:48:03 +02:00
amd_nb.h x86/amd_nb, EDAC: Rename amd_get_node_id() 2015-10-21 11:10:55 +02:00
apb_timer.h
apic.h x86/x2apic: Make stub functions available even if !CONFIG_X86_LOCAL_APIC 2015-09-30 21:17:36 +02:00
apic_flat_64.h
apicdef.h
apm.h
arch_hweight.h x86/hweight: Force inlining of __arch_hweight{32,64}() 2015-08-05 09:38:09 +02:00
archrandom.h
asm-offsets.h
asm.h x86/asm/uaccess: Unify the ALIGN_DESTINATION macro 2015-05-14 07:25:34 +02:00
atomic.h atomic, arch: Audit atomic_{read,set}() 2015-09-23 09:54:28 +02:00
atomic64_32.h x86: Provide atomic_{or,xor,and} 2015-07-27 14:06:23 +02:00
atomic64_64.h atomic, arch: Audit atomic_{read,set}() 2015-09-23 09:54:28 +02:00
barrier.h Merge branch 'x86/asm' into locking/core 2015-08-03 11:04:00 +02:00
bios_ebda.h
bitops.h
boot.h
bootparam_utils.h
bug.h
bugs.h
cache.h
cacheflush.h nd_blk: change aperture mapping from WC to WB 2015-08-27 19:38:28 -04:00
calgary.h
ce4100.h
checksum.h
checksum_32.h
checksum_64.h
clocksource.h
cmdline.h
cmpxchg.h arch: Remove __ARCH_HAVE_CMPXCHG 2015-05-13 10:55:42 +02:00
cmpxchg_32.h
cmpxchg_64.h
compat.h x86/asm/entry/64: Save user RSP in pt_regs->sp on SYSCALL64 fastpath 2015-03-10 13:56:10 +01:00
cpu.h x86: Use common outgoing-CPU-notification code 2015-03-11 13:22:35 -07:00
cpu_device_id.h
cpufeature.h x86/xen: Avoid fast syscall path for Xen PV guests 2015-12-19 09:55:52 +01:00
cpumask.h
crash.h
current.h
debugreg.h
delay.h x86/asm/delay: Introduce an MWAITX-based delay with a configurable timer 2015-08-22 14:52:16 +02:00
desc.h x86/ldt: Make modify_ldt synchronous 2015-07-31 10:23:23 +02:00
desc_defs.h
device.h
disabled-features.h
div64.h
dma-mapping.h dma-mapping: consolidate dma_set_mask 2015-09-10 13:29:01 -07:00
dma.h
dmi.h
dwarf2.h x86/asm: Remove the xyz_cfi macros from dwarf2.h 2015-10-14 16:56:28 +02:00
e820.h mm: move memtest under mm 2015-04-14 16:49:06 -07:00
edac.h EDAC: Cleanup atomic_scrub mess 2015-05-28 15:31:53 +02:00
efi.h * Make the EFI System Resource Table (ESRT) driver explicitly 2015-10-14 16:51:34 +02:00
elf.h x86/elf/64: Clear more registers in elf_common_init() 2015-10-09 09:41:06 +02:00
emergency-restart.h
entry_arch.h Merge branch 'x86/ras' into x86/core, to fix conflicts 2015-06-07 15:35:27 +02:00
espfix.h x86/espfix: Add 'cpu' parameter to init_espfix_ap() 2015-07-06 15:00:33 +02:00
exec.h
fb.h
fixmap.h
floppy.h
frame.h x86/debug: Remove perpetually broken, unmaintainable dwarf annotations 2015-06-02 07:57:48 +02:00
ftrace.h ftrace: Format MCOUNT_ADDR address as type unsigned long 2015-07-20 22:30:53 -04:00
futex.h
gart.h
genapic.h
geode.h
gpio.h
hardirq.h Merge branch 'x86/ras' into x86/core, to fix conflicts 2015-06-07 15:35:27 +02:00
highmem.h kmap_atomic_to_page() has no users, remove it 2015-11-09 15:11:24 -08:00
hpet.h timers/x86/hpet: Type adjustments 2015-10-21 11:17:32 +02:00
hugetlb.h mm/hugetlb: remove arch_prepare/release_hugepage from arch headers 2015-06-25 17:00:35 -07:00
hw_breakpoint.h
hw_irq.h x86/irq: Store irq descriptor in vector array 2015-08-06 00:14:59 +02:00
hypertransport.h
hypervisor.h hypervisor/x86/xen: Unset X86_BUG_SYSRET_SS_ATTRS on Xen PV guests 2015-05-05 18:27:43 +01:00
i8259.h x86/irq: Probe for PIC presence before allocating descs for legacy IRQs 2015-11-07 10:37:37 +01:00
ia32.h x86/headers: Remove <asm/sigcontext.h> references on the kernel side 2015-09-08 10:06:05 +02:00
ia32_unistd.h
idle.h
imr.h x86/intel/quark: Add Isolated Memory Regions for Quark X1000 2015-02-18 23:22:47 +01:00
inat.h
inat_types.h
init.h
insn.h x86/asm/decoder: Fix and enforce max instruction size in the insn decoder 2015-02-19 00:01:24 +01:00
inst.h
intel-mid.h x86, intel-mid: remove Intel MID specific serial support 2015-03-07 03:25:18 +01:00
intel_mid_vrtc.h
intel_pmc_ipc.h intel_pmc_ipc: Update kerneldoc formatting 2015-07-09 11:23:15 -07:00
intel_scu_ipc.h
io.h libnvdimm for 4.3: 2015-09-08 14:35:59 -07:00
io_apic.h x86: Cleanup irq_domain ops 2015-04-24 15:36:55 +02:00
iomap.h
iommu.h
iommu_table.h x86/iommu: Fix header comments regarding standard and _FINISH macros 2015-04-09 10:56:31 +02:00
iosf_mbi.h x86/platform/iosf_mbi: Source cleanup 2015-07-16 17:48:48 +02:00
ipi.h
irq.h x86/irq: Store irq descriptor in vector array 2015-08-06 00:14:59 +02:00
irq_regs.h
irq_remapping.h irq_remapping: move structs outside #ifdef 2015-10-01 15:06:42 +02:00
irq_vectors.h x86/vm86: Move the vm86 IRQ definitions to vm86.h 2015-07-31 13:31:10 +02:00
irq_work.h
irqdomain.h x86/irq: Move irqdomain specific code into asm/irqdomain.h 2015-04-24 15:36:55 +02:00
irqflags.h x86/asm/entry: Drop now unused ENABLE_INTERRUPTS_SYSEXIT32 2015-04-03 10:34:19 +02:00
ist.h
jump_label.h jump_label/x86: Work around asm build bug on older/backported GCCs 2015-08-13 08:44:43 +02:00
kasan.h x86/kasan: Define KASAN_SHADOW_OFFSET per architecture 2015-08-22 14:54:55 +02:00
kbdleds.h
Kbuild mm: clean up per architecture MM hook header files 2015-07-17 16:39:53 -07:00
kdebug.h x86/kexec: Remove obsolete 'in_crash_kexec' flag 2015-10-12 09:43:11 +02:00
kexec-bzimage64.h
kexec.h
kgdb.h
kmap_types.h
kmemcheck.h
kprobes.h
kvm_emulate.h KVM: x86: add read_phys to x86_emulate_ops 2015-11-04 16:24:31 +01:00
kvm_guest.h
kvm_host.h KVM: x86: rename update_db_bp_intercept to update_bp_intercept 2015-11-10 12:06:25 +01:00
kvm_para.h x86: Use bool function return values of true/false not 1/0 2015-03-31 18:05:09 +02:00
lguest.h lguest: suppress interrupts for single insn, not range. 2015-03-24 11:52:08 +10:30
lguest_hcall.h
linkage.h
livepatch.h livepatch: x86: make kASLR logic more accurate 2015-04-29 16:51:33 +02:00
local.h
local64.h
mach_timer.h
mach_traps.h
math_emu.h x86/vm86: Clean up vm86.h includes 2015-07-31 13:31:10 +02:00
mc146818rtc.h
mce.h x86/mce: Add a Scalable MCA vendor flags bit 2015-11-01 11:26:13 +01:00
microcode.h x86/microcode: Remove modularization leftovers 2015-10-21 11:22:12 +02:00
microcode_amd.h x86/microcode: Merge the early microcode loader 2015-10-21 11:22:12 +02:00
microcode_intel.h x86/microcode: Merge the early microcode loader 2015-10-21 11:22:12 +02:00
misc.h
mmconfig.h
mmu.h x86/ldt: Make modify_ldt() optional 2015-07-31 13:30:45 +02:00
mmu_context.h x86/mm: Add barriers and document switch_mm()-vs-flush synchronization 2016-01-11 12:03:15 +01:00
mmx.h
mmzone.h
mmzone_32.h
mmzone_64.h
module.h
mpspec.h
mpspec_def.h
mpx.h x86/mpx: Support 32-bit binaries on 64-bit kernels 2015-06-09 12:24:34 +02:00
mshyperv.h mshyperv: fix recognition of Hyper-V guest crash MSR's 2015-08-04 22:30:44 -07:00
msi.h x86/MSI: Use hierarchical irqdomains to manage MSI interrupts 2015-04-24 15:36:49 +02:00
msidef.h
msr-index.h Merge branch 'pm-tools' 2015-11-16 22:57:02 +01:00
msr.h x86/asm/msr: Make wrmsrl() a function 2015-08-23 13:25:38 +02:00
mtrr.h x86/mm/mtrr: Avoid #ifdeffery with phys_wc_to_mtrr_index() 2015-05-27 14:41:00 +02:00
mutex.h
mutex_32.h
mutex_64.h
mwait.h x86/asm: Add MONITORX/MWAITX instruction support 2015-08-22 14:52:16 +02:00
nmi.h
nops.h
numa.h
numa_32.h
olpc.h
olpc_ofw.h
page.h
page_32.h
page_32_types.h
page_64.h
page_64_types.h x86/asm: Move PUD_PAGE macros to page_types.h 2015-09-22 21:27:32 +02:00
page_types.h x86/mm: Fix regression with huge pages on PAE 2015-12-04 09:14:27 +01:00
paravirt.h x86/paravirt: Prevent rtc_cmos platform device init on PV guests 2015-12-19 21:35:13 +01:00
paravirt_types.h x86/paravirt: Prevent rtc_cmos platform device init on PV guests 2015-12-19 21:35:13 +01:00
parport.h
pat.h x86/mm/pat: Emulate PAT when it is disabled 2015-06-07 15:28:52 +02:00
pci-direct.h
pci-functions.h
pci.h Merge branch 'for-4.2/sg' of git://git.kernel.dk/linux-block 2015-06-25 15:22:36 -07:00
pci_64.h
pci_x86.h PCI, x86: Implement pcibios_alloc_irq() and pcibios_free_irq() 2015-07-30 14:05:57 -05:00
percpu.h
perf_event.h x86: Add new MSRs and MSR bits used for Intel Skylake PMU support 2015-08-04 10:16:56 +02:00
perf_event_p4.h
pgalloc.h x86: expose number of page table levels on Kconfig level 2015-04-14 16:49:02 -07:00
pgtable-2level.h
pgtable-2level_types.h x86: expose number of page table levels on Kconfig level 2015-04-14 16:49:02 -07:00
pgtable-3level.h
pgtable-3level_types.h x86: expose number of page table levels on Kconfig level 2015-04-14 16:49:02 -07:00
pgtable.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2015-11-04 11:31:31 -08:00
pgtable_32.h
pgtable_32_types.h
pgtable_64.h
pgtable_64_types.h x86: expose number of page table levels on Kconfig level 2015-04-14 16:49:02 -07:00
pgtable_types.h x86/mm: Fix regression with huge pages on PAE 2015-12-04 09:14:27 +01:00
platform_sst_audio.h
pm-trace.h PM / sleep: add pm-trace support for suspending phase 2015-03-18 15:54:27 +01:00
pmc_atom.h x86/platform/intel/pmc_atom: Add Cherrytrail PMC interface 2015-07-06 18:39:38 +02:00
pmem.h x86, pmem: clarify that ARCH_HAS_PMEM_API implies PMEM mapped WB 2015-08-27 19:40:59 -04:00
posix_types.h
preempt.h sched/core, sched/x86: Kill thread_info::saved_preempt_count 2015-10-06 17:08:18 +02:00
probe_roms.h
processor-cyrix.h
processor-flags.h
processor.h x86/paravirt: Prevent rtc_cmos platform device init on PV guests 2015-12-19 21:35:13 +01:00
prom.h
proto.h x86/asm/entry: Untangle 'system_call' into two entry points: entry_SYSCALL_64 and entry_INT80_32 2015-06-08 09:14:21 +02:00
ptrace.h x86/entry: Remove do_notify_resume(), syscall_trace_leave(), and their TIF masks 2015-08-05 10:54:35 +02:00
pvclock-abi.h Revert "KVM: x86: zero kvmclock_offset when vcpu0 initializes kvmclock system MSR" 2015-09-28 13:06:37 +02:00
pvclock.h x86/asm/tsc, x86/kvm: Drop open-coded barrier and use rdtsc_ordered() in kvmclock 2015-07-06 15:23:30 +02:00
qrwlock.h locking/qrwlock: Implement queue_write_unlock() using smp_store_release() 2015-08-12 11:59:05 +02:00
qspinlock.h locking/qspinlock/x86: Only emit the test-and-set fallback when building guest support 2015-09-11 07:50:12 +02:00
qspinlock_paravirt.h locking/pvqspinlock, x86: Implement the paravirt qspinlock call patching 2015-05-08 12:37:09 +02:00
realmode.h
reboot.h
reboot_fixups.h
required-features.h
rio.h
rmwcc.h
rtc.h
rwsem.h
seccomp.h x86: switch to using asm-generic for seccomp.h 2015-04-17 09:04:10 -04:00
sections.h
segment.h x86/asm/irq: Stop relying on magic JMP behavior for early_idt_handlers 2015-06-02 09:39:40 +02:00
serial.h serial: 8250: remove Kconfig indirection 2015-05-06 22:27:00 +02:00
setup.h x86: kaslr: fix build due to missing ALIGN definition 2015-04-29 21:54:54 +02:00
setup_arch.h
shmparam.h
sigcontext.h x86/headers: Remove <asm/sigcontext.h> references on the kernel side 2015-09-08 10:06:05 +02:00
sigframe.h x86/headers: Remove <asm/sigcontext.h> references on the kernel side 2015-09-08 10:06:05 +02:00
sighandling.h x86/signal: Remove pax argument from restore_sigcontext 2015-04-06 09:06:39 +02:00
signal.h x86/headers: Remove <asm/sigcontext.h> references on the kernel side 2015-09-08 10:06:05 +02:00
simd.h x86/fpu: Rename i387.h to fpu/api.h 2015-05-19 15:47:30 +02:00
smap.h x86/smap: Use ALTERNATIVE macro 2015-02-23 13:44:14 +01:00
smp.h x86: Remove cpu_sibling_mask() and cpu_core_mask() 2015-05-27 15:22:17 +02:00
sparsemem.h
special_insns.h x86/mm: Add kerneldoc comments for pcommit_sfence() 2015-05-11 10:38:44 +02:00
spinlock.h locking/pvqspinlock: Rename QUEUED_SPINLOCK to QUEUED_SPINLOCKS 2015-05-11 09:52:09 +02:00
spinlock_types.h locking/pvqspinlock: Rename QUEUED_SPINLOCK to QUEUED_SPINLOCKS 2015-05-11 09:52:09 +02:00
sta2x11.h
stackprotector.h x86/asm/tsc: Rename native_read_tsc() to rdtsc() 2015-07-06 15:23:28 +02:00
stacktrace.h
string.h
string_32.h
string_64.h x86, kasan: Fix build failure on KASAN=y && KMEMCHECK=y kernels 2015-10-19 10:07:23 +02:00
suspend.h
suspend_32.h x86/fpu: Rename i387.h to fpu/api.h 2015-05-19 15:47:30 +02:00
suspend_64.h x86/fpu: Rename i387.h to fpu/api.h 2015-05-19 15:47:30 +02:00
svm.h
swiotlb.h
switch_to.h x86/sched/64: Don't save flags on context switch (reinstated) 2015-09-25 09:29:17 +02:00
sync_bitops.h
sys_ia32.h
syscall.h x86/syscalls: Give sys_call_ptr_t a useful type 2015-10-09 09:41:08 +02:00
syscalls.h x86/vm86: Clean up vm86.h includes 2015-07-31 13:31:10 +02:00
sysfb.h
tce.h
thread_info.h Merge branch 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-11-03 18:59:10 -08:00
time.h
timer.h
timex.h
tlb.h
tlbflush.h mm: send one IPI per CPU to TLB flush all entries after unmapping pages 2015-09-04 16:54:41 -07:00
topology.h Merge branch 'x86-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-06-22 17:59:09 -07:00
trace_clock.h
traps.h x86/entry: Remove exception_enter() from most trap handlers 2015-07-07 10:59:09 +02:00
tsc.h Merge branch 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-09-01 08:40:25 -07:00
uaccess.h x86/uaccess: Add unlikely() to __chk_range_not_ok() failure paths 2015-10-07 11:34:06 +02:00
uaccess_32.h Merge branch 'x86-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-06-22 17:59:09 -07:00
uaccess_64.h x86: clean up/fix 'copy_in_user()' tail zeroing 2015-04-08 14:28:45 -07:00
unaligned.h
unistd.h
uprobes.h
user.h x86/fpu: Rename xsave.header::xstate_bv to 'xfeatures' 2015-05-19 15:47:35 +02:00
user32.h
user_32.h
user_64.h
vdso.h x86/vdso/32: Save extra registers in the INT80 vsyscall path 2015-10-09 09:41:06 +02:00
vga.h
vgtod.h
virtext.h
vm86.h x86/vm86: Rename vm86->v86flags and v86mask 2015-07-31 13:31:11 +02:00
vmx.h KVM: VMX: Enable and initialize VMX TSC scaling 2015-11-10 12:06:19 +01:00
vsyscall.h
vvar.h
word-at-a-time.h
x2apic.h
x86_init.h x86/mm: Fix regression with huge pages on PAE 2015-12-04 09:14:27 +01:00
xor.h x86/fpu: Rename i387.h to fpu/api.h 2015-05-19 15:47:30 +02:00
xor_32.h x86/fpu: Rename i387.h to fpu/api.h 2015-05-19 15:47:30 +02:00
xor_64.h
xor_avx.h x86/fpu: Rename i387.h to fpu/api.h 2015-05-19 15:47:30 +02:00