mirror of https://github.com/torvalds/linux.git
As discussed on LKML http://marc.info/?i=54611D86.4040306%40de.ibm.com ACCESS_ONCE might fail with specific compilers for non-scalar accesses. Here is a set of patches to tackle that problem. The first patch introduce READ_ONCE and ASSIGN_ONCE. If the data structure is larger than the machine word size memcpy is used and a warning is emitted. The next patches fix up several in-tree users of ACCESS_ONCE on non-scalar types. This merge does not yet contain a patch that forces ACCESS_ONCE to work only on scalar types. This is targetted for the next merge window as Linux next already contains new offenders regarding ACCESS_ONCE vs. non-scalar types. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.14 (GNU/Linux) iQIcBAABAgAGBQJUkrVGAAoJEBF7vIC1phx8stkP/2LmN5y6LOseoEW06xa5MX4m cbIKsZNtsGHl7EDcTzzuWs6Sq5/Cj7V3yzeBF7QGbUKOqvFWU3jvpUBCCfjMg37C 77/Vf0ZPrxTXXxeJ4Ykdy2CGvuMtuYY9TWkrRNKmLU0xex7lGblEzCt9z6+mZviw 26/DN8ctjkHRvIUAi+7RfQBBc3oSMYAC1mzxYKBAsAFLV+LyFmsGU/4iofZMAsdt XFyVXlrLn0Bjx/MeceGkOlMDiVx4FnfccfFaD4hhuTLBJXWitkUK/MRa4JBiXWzH agY8942A8/j9wkI2DFp/pqZYqA/sTXLndyOWlhE//ZSti0n0BSJaOx3S27rTLkAc 5VmZEVyIrS3hyOpyyAi0sSoPkDnjeCHmQg9Rqn34/poKLd7JDrW2UkERNCf/T3eh GI2rbhAlZz3v5mIShn8RrxzslWYmOObpMr3HYNUdRk8YUfTf6d6aZ3txHp2nP4mD VBAEzsvP9rcVT2caVhU2dnBzeaZAj3zeDxBtjcb3X2osY9tI7qgLc9Fa/fWKgILk 2evkLcctsae2mlLNGHyaK3Dm/ZmYJv+57MyaQQEZNfZZgeB1y4k0DkxH4w1CFmCi s8XlH5voEHgnyjSQXXgc/PNVlkPAKr78ZyTiAfiKmh8rpe41/W4hGcgao7L9Lgiu SI0uSwKibuZt4dHGxQuG =IQ5o -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/borntraeger/linux Pull ACCESS_ONCE cleanup preparation from Christian Borntraeger: "kernel: Provide READ_ONCE and ASSIGN_ONCE As discussed on LKML http://marc.info/?i=54611D86.4040306%40de.ibm.com ACCESS_ONCE might fail with specific compilers for non-scalar accesses. Here is a set of patches to tackle that problem. The first patch introduce READ_ONCE and ASSIGN_ONCE. If the data structure is larger than the machine word size memcpy is used and a warning is emitted. The next patches fix up several in-tree users of ACCESS_ONCE on non-scalar types. This does not yet contain a patch that forces ACCESS_ONCE to work only on scalar types. This is targetted for the next merge window as Linux next already contains new offenders regarding ACCESS_ONCE vs. non-scalar types" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/borntraeger/linux: s390/kvm: REPLACE barrier fixup with READ_ONCE arm/spinlock: Replace ACCESS_ONCE with READ_ONCE arm64/spinlock: Replace ACCESS_ONCE READ_ONCE mips/gup: Replace ACCESS_ONCE with READ_ONCE x86/gup: Replace ACCESS_ONCE with READ_ONCE x86/spinlock: Replace ACCESS_ONCE with READ_ONCE mm: replace ACCESS_ONCE with READ_ONCE or barriers kernel: Provide READ_ONCE and ASSIGN_ONCE |
||
|---|---|---|
| .. | ||
| crypto | ||
| numachip | ||
| trace | ||
| uv | ||
| xen | ||
| Kbuild | ||
| a.out-core.h | ||
| acenv.h | ||
| acpi.h | ||
| agp.h | ||
| alternative-asm.h | ||
| alternative.h | ||
| amd_nb.h | ||
| apb_timer.h | ||
| apic.h | ||
| apic_flat_64.h | ||
| apicdef.h | ||
| apm.h | ||
| arch_hweight.h | ||
| archrandom.h | ||
| asm-offsets.h | ||
| asm.h | ||
| atomic.h | ||
| atomic64_32.h | ||
| atomic64_64.h | ||
| barrier.h | ||
| bios_ebda.h | ||
| bitops.h | ||
| boot.h | ||
| bootparam_utils.h | ||
| bug.h | ||
| bugs.h | ||
| cache.h | ||
| cacheflush.h | ||
| calgary.h | ||
| calling.h | ||
| ce4100.h | ||
| checksum.h | ||
| checksum_32.h | ||
| checksum_64.h | ||
| clocksource.h | ||
| cmdline.h | ||
| cmpxchg.h | ||
| cmpxchg_32.h | ||
| cmpxchg_64.h | ||
| compat.h | ||
| context_tracking.h | ||
| cpu.h | ||
| cpu_device_id.h | ||
| cpufeature.h | ||
| cpumask.h | ||
| crash.h | ||
| current.h | ||
| debugreg.h | ||
| delay.h | ||
| desc.h | ||
| desc_defs.h | ||
| device.h | ||
| disabled-features.h | ||
| div64.h | ||
| dma-mapping.h | ||
| dma.h | ||
| dmi.h | ||
| dwarf2.h | ||
| e820.h | ||
| edac.h | ||
| efi.h | ||
| elf.h | ||
| emergency-restart.h | ||
| entry_arch.h | ||
| espfix.h | ||
| exec.h | ||
| fb.h | ||
| fixmap.h | ||
| floppy.h | ||
| fpu-internal.h | ||
| frame.h | ||
| ftrace.h | ||
| futex.h | ||
| gart.h | ||
| genapic.h | ||
| geode.h | ||
| gpio.h | ||
| hardirq.h | ||
| highmem.h | ||
| hpet.h | ||
| hugetlb.h | ||
| hw_breakpoint.h | ||
| hw_irq.h | ||
| hypertransport.h | ||
| hypervisor.h | ||
| i387.h | ||
| i8259.h | ||
| ia32.h | ||
| ia32_unistd.h | ||
| idle.h | ||
| inat.h | ||
| inat_types.h | ||
| init.h | ||
| insn.h | ||
| inst.h | ||
| intel-mid.h | ||
| intel_mid_vrtc.h | ||
| intel_scu_ipc.h | ||
| io.h | ||
| io_apic.h | ||
| iomap.h | ||
| iommu.h | ||
| iommu_table.h | ||
| iosf_mbi.h | ||
| ipi.h | ||
| irq.h | ||
| irq_regs.h | ||
| irq_remapping.h | ||
| irq_vectors.h | ||
| irq_work.h | ||
| irqflags.h | ||
| ist.h | ||
| jump_label.h | ||
| kbdleds.h | ||
| kdebug.h | ||
| kexec-bzimage64.h | ||
| kexec.h | ||
| kgdb.h | ||
| kmap_types.h | ||
| kmemcheck.h | ||
| kprobes.h | ||
| kvm_emulate.h | ||
| kvm_guest.h | ||
| kvm_host.h | ||
| kvm_para.h | ||
| lguest.h | ||
| lguest_hcall.h | ||
| linkage.h | ||
| local.h | ||
| local64.h | ||
| mach_timer.h | ||
| mach_traps.h | ||
| math_emu.h | ||
| mc146818rtc.h | ||
| mce.h | ||
| microcode.h | ||
| microcode_amd.h | ||
| microcode_intel.h | ||
| misc.h | ||
| mmconfig.h | ||
| mmu.h | ||
| mmu_context.h | ||
| mmx.h | ||
| mmzone.h | ||
| mmzone_32.h | ||
| mmzone_64.h | ||
| module.h | ||
| mpspec.h | ||
| mpspec_def.h | ||
| mpx.h | ||
| mshyperv.h | ||
| msidef.h | ||
| msr.h | ||
| mtrr.h | ||
| mutex.h | ||
| mutex_32.h | ||
| mutex_64.h | ||
| mwait.h | ||
| 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 | ||
| page_types.h | ||
| paravirt.h | ||
| paravirt_types.h | ||
| parport.h | ||
| pat.h | ||
| pci-direct.h | ||
| pci-functions.h | ||
| pci.h | ||
| pci_64.h | ||
| pci_x86.h | ||
| percpu.h | ||
| perf_event.h | ||
| perf_event_p4.h | ||
| pgalloc.h | ||
| pgtable-2level.h | ||
| pgtable-2level_types.h | ||
| pgtable-3level.h | ||
| pgtable-3level_types.h | ||
| pgtable.h | ||
| pgtable_32.h | ||
| pgtable_32_types.h | ||
| pgtable_64.h | ||
| pgtable_64_types.h | ||
| pgtable_types.h | ||
| platform_sst_audio.h | ||
| pmc_atom.h | ||
| posix_types.h | ||
| preempt.h | ||
| probe_roms.h | ||
| processor-cyrix.h | ||
| processor-flags.h | ||
| processor.h | ||
| prom.h | ||
| proto.h | ||
| ptrace.h | ||
| pvclock-abi.h | ||
| pvclock.h | ||
| qrwlock.h | ||
| realmode.h | ||
| reboot.h | ||
| reboot_fixups.h | ||
| required-features.h | ||
| resume-trace.h | ||
| rio.h | ||
| rmwcc.h | ||
| rtc.h | ||
| rwsem.h | ||
| seccomp.h | ||
| seccomp_32.h | ||
| seccomp_64.h | ||
| sections.h | ||
| segment.h | ||
| serial.h | ||
| setup.h | ||
| setup_arch.h | ||
| shmparam.h | ||
| sigcontext.h | ||
| sigframe.h | ||
| sighandling.h | ||
| signal.h | ||
| simd.h | ||
| smap.h | ||
| smp.h | ||
| smpboot_hooks.h | ||
| sparsemem.h | ||
| special_insns.h | ||
| spinlock.h | ||
| spinlock_types.h | ||
| sta2x11.h | ||
| stackprotector.h | ||
| stacktrace.h | ||
| string.h | ||
| string_32.h | ||
| string_64.h | ||
| suspend.h | ||
| suspend_32.h | ||
| suspend_64.h | ||
| svm.h | ||
| swiotlb.h | ||
| switch_to.h | ||
| sync_bitops.h | ||
| sys_ia32.h | ||
| syscall.h | ||
| syscalls.h | ||
| sysfb.h | ||
| tce.h | ||
| thread_info.h | ||
| time.h | ||
| timer.h | ||
| timex.h | ||
| tlb.h | ||
| tlbflush.h | ||
| topology.h | ||
| trace_clock.h | ||
| traps.h | ||
| tsc.h | ||
| uaccess.h | ||
| uaccess_32.h | ||
| uaccess_64.h | ||
| unaligned.h | ||
| unistd.h | ||
| uprobes.h | ||
| user.h | ||
| user32.h | ||
| user_32.h | ||
| user_64.h | ||
| vdso.h | ||
| vga.h | ||
| vgtod.h | ||
| virtext.h | ||
| vm86.h | ||
| vmx.h | ||
| vsyscall.h | ||
| vvar.h | ||
| word-at-a-time.h | ||
| x2apic.h | ||
| x86_init.h | ||
| xcr.h | ||
| xor.h | ||
| xor_32.h | ||
| xor_64.h | ||
| xor_avx.h | ||
| xsave.h | ||