linux_dsm_epyc7002/arch/x86/include/asm
Linus Torvalds 59c33fa779 x86-32: clean up rwsem inline asm statements
This makes gcc use the right register names and instruction operand sizes
automatically for the rwsem inline asm statements.

So instead of using "(%%eax)" to specify the memory address that is the
semaphore, we use "(%1)" or similar. And instead of forcing the operation
to always be 32-bit, we use "%z0", taking the size from the actual
semaphore data structure itself.

This doesn't actually matter on x86-32, but if we want to use the same
inline asm for x86-64, we'll need to have the compiler generate the proper
64-bit names for the registers (%rax instead of %eax), and if we want to
use a 64-bit counter too (in order to avoid the 15-bit limit on the
write counter that limits concurrent users to 32767 threads), we'll need
to be able to generate instructions with "q" accesses rather than "l".

Since this header currently isn't enabled on x86-64, none of that matters,
but we do want to use the xadd version of the semaphores rather than have
to take spinlocks to do a rwsem. The mm->mmap_sem can be heavily contended
when you have lots of threads all taking page faults, and the fallback
rwsem code that uses a spinlock performs abysmally badly in that case.

[ hpa: modified the patch to skip size suffixes entirely when they are
  redundant due to register operands. ]

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
LKML-Reference: <alpine.LFD.2.00.1001121613560.17145@localhost.localdomain>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2010-01-12 20:43:04 -08:00
..
uv gru: function to generate chipset IPI values 2009-12-16 07:20:17 -08:00
visws
xen xen: move Xen-testing predicates to common header 2009-11-04 08:47:24 -08:00
a.out-core.h hw-breakpoints: Fix broken a.out format dump 2009-11-10 11:23:05 +01:00
a.out.h
acpi.h ACPI: processor: finish unifying arch_acpi_processor_init_pdc() 2009-12-22 03:24:13 -05:00
aes.h
agp.h
alternative-asm.h x86/alternatives: No need for alternatives-asm.h to re-invent stuff already in asm.h 2009-12-02 11:39:45 +01:00
alternative.h x86-64: Modify copy_user_generic() alternatives mechanism 2009-12-30 11:57:31 +01:00
amd_iommu_proto.h x86/amd-iommu: Fix PCI hotplug with passthrough mode 2009-12-10 12:23:47 +01:00
amd_iommu_types.h x86/amd-iommu: Remove amd_iommu_pd_table 2009-11-27 14:20:37 +01:00
amd_iommu.h x86/amd-iommu: Update copyright headers 2009-11-27 11:45:49 +01:00
apic.h x86: apic: Do not use stacked physid_mask_t 2009-11-10 05:52:07 +01:00
apicdef.h x86: io-apic: IO-APIC MMIO should not fail on resource insertion 2009-11-16 16:37:10 +01:00
apm.h
asm-offsets.h kbuild: move asm-offsets.h to include/generated 2009-12-12 13:08:14 +01:00
asm.h
atomic64_32.h x86: Split atomic64_t functions into seperate headers 2010-01-07 11:47:31 -08:00
atomic64_64.h x86: Split atomic64_t functions into seperate headers 2010-01-07 11:47:31 -08:00
atomic.h x86: Merge asm/atomic_{32,64}.h 2010-01-07 11:48:38 -08:00
auxvec.h
bios_ebda.h
bitops.h
bitsperlong.h
boot.h
bootparam.h
bug.h x86: Convert BUG() to use unreachable() 2009-12-05 09:10:12 -08:00
bugs.h
byteorder.h
cache.h x86: Eliminate redundant/contradicting cache line size config options 2009-11-19 04:58:34 +01:00
cacheflush.h Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-12-08 13:27:33 -08:00
calgary.h x86: Calgary: Convert detect_calgary() to use iommu_init hook 2009-11-10 12:31:15 +01:00
calling.h
checksum_32.h
checksum_64.h
checksum.h
cmpxchg_32.h Merge branch 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-12-05 15:32:03 -08:00
cmpxchg_64.h
cmpxchg.h
compat.h
cpu_debug.h
cpu.h
cpufeature.h x86, amd: Get multi-node CPU info from NodeId MSR instead of PCI config space 2009-12-16 15:06:23 -08:00
cpumask.h
cputime.h
current.h
debugreg.h x86: Rename global percpu symbol dr7 to cpu_dr7 2009-11-25 14:30:04 +01:00
delay.h
desc_defs.h tree-wide: fix assorted typos all over the place 2009-12-04 15:39:55 +01:00
desc.h x86: Make sure get_user_desc() doesn't sign extend. 2009-11-05 13:22:18 -08:00
device.h x86/amd-iommu: Use dev->arch->iommu to store iommu related information 2009-11-27 14:20:32 +01:00
div64.h
dma-mapping.h dma-mapping: fix off-by-one error in dma_capable() 2009-12-16 07:20:12 -08:00
dma.h
dmi.h
ds.h
dwarf2.h
e820.h x86, mm: Correct the implementation of is_untracked_pat_range() 2009-11-30 21:33:51 -08:00
edac.h
efi.h
elf.h elf: kill USE_ELF_CORE_DUMP 2009-12-16 07:20:12 -08:00
emergency-restart.h
entry_arch.h
errno.h
fb.h
fcntl.h
fixmap.h x86: Lift restriction on the location of FIX_BTMAP_* 2009-12-30 11:57:30 +01:00
floppy.h
frame.h
ftrace.h
futex.h
gart.h x86: GART: Convert gart_iommu_hole_init() to use iommu_init hook 2009-11-10 12:31:23 +01:00
genapic.h
geode.h cs5535: drop the Geode-specific MFGPT/GPIO code 2009-12-15 08:53:28 -08:00
gpio.h
hardirq.h Merge branch 'x86-uv-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-12-08 13:38:21 -08:00
highmem.h
hpet.h
hugetlb.h
hw_breakpoint.h hw-breakpoints: Rewrite the hw-breakpoints layer on top of perf events 2009-11-08 15:34:42 +01:00
hw_irq.h x86, irq: Allow 0xff for /proc/irq/[n]/smp_affinity on an 8-cpu system 2009-12-17 22:03:06 -08:00
hypertransport.h
hypervisor.h
i387.h
i8253.h
i8259.h
ia32_unistd.h
ia32.h
idle.h
inat_types.h
inat.h
init.h
insn.h
inst.h x86: Generate .byte code for some new instructions via gas macro 2009-11-09 13:52:26 -05:00
io_32.h
io_64.h
io_apic.h
io.h
ioctl.h
ioctls.h
iomap.h
iommu.h x86: Move iommu_shutdown_noop to x86_init.c 2009-11-15 09:03:10 +01:00
ipcbuf.h
ipi.h
irq_regs.h
irq_remapping.h
irq_vectors.h x86: Fix duplicated UV BAU interrupt vector 2009-12-13 08:17:40 +01:00
irq.h Merge branch 'x86-uv-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-12-08 13:38:21 -08:00
irqflags.h
ist.h
k8.h x86: k8.h: Add struct bootnode 2009-11-08 12:55:38 +01:00
Kbuild hw-breakpoints: Rewrite the hw-breakpoints layer on top of perf events 2009-11-08 15:34:42 +01:00
kdebug.h
kexec.h
kgdb.h
kmap_types.h
kmemcheck.h
kprobes.h
kvm_emulate.h KVM: x86 emulator: limit instructions to 15 bytes 2009-12-03 09:32:25 +02:00
kvm_host.h KVM: VMX: Fix comparison of guest efer with stale host value 2009-12-03 09:34:20 +02:00
kvm_para.h
kvm.h KVM: x86: Add KVM_GET/SET_VCPU_EVENTS 2009-12-03 09:32:25 +02:00
ldt.h
lguest_hcall.h
lguest.h
linkage.h
local.h
mach_timer.h
mach_traps.h
math_emu.h
mc146818rtc.h
mca_dma.h
mca.h
mce.h x86: Under BIOS control, restore AP's APIC_LVTTHMR to the BSP value 2009-11-10 05:57:55 +01:00
microcode.h x86: ucode-amd: Load ucode-patches once and not separately of each CPU 2009-11-10 12:15:48 +01:00
mman.h
mmconfig.h
mmu_context.h
mmu.h
mmx.h
mmzone_32.h tree-wide: fix assorted typos all over the place 2009-12-04 15:39:55 +01:00
mmzone_64.h
mmzone.h
module.h
mpspec_def.h
mpspec.h Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-12-08 13:27:33 -08:00
msgbuf.h
msidef.h
msr-index.h x86, amd: Get multi-node CPU info from NodeId MSR instead of PCI config space 2009-12-16 15:06:23 -08:00
msr.h x86, msr: msrs_alloc/free for CONFIG_SMP=n 2009-12-16 15:36:32 -08:00
mtrr.h
mutex_32.h
mutex_64.h
mutex.h
nmi.h
nops.h
numa_32.h
numa_64.h
numa.h
numaq.h
olpc.h ALSA: cs5535audio: free OLPC quirks from reliance on MGEODE_LX cpu optimization 2009-12-15 08:53:27 -08:00
page_32_types.h
page_32.h
page_64_types.h
page_64.h
page_types.h
page.h
param.h
paravirt_types.h locking: Convert raw_spinlock to arch_spinlock 2009-12-14 23:55:32 +01:00
paravirt.h locking: Convert __raw_spin* functions to arch_spin* 2009-12-14 23:55:32 +01:00
parport.h
pat.h x86, platform: Change is_untracked_pat_range() to bool; cleanup init 2009-11-23 17:09:59 -08:00
pci_64.h
pci_x86.h x86/PCI: MMCONFIG: add lookup function 2009-11-24 15:30:36 -08:00
pci-direct.h
pci-functions.h
pci.h
percpu.h
perf_event.h
pgalloc.h
pgtable_32_types.h
pgtable_32.h
pgtable_64_types.h
pgtable_64.h
pgtable_types.h
pgtable-2level_types.h
pgtable-2level.h
pgtable-3level_types.h
pgtable-3level.h
pgtable.h x86, mm: is_untracked_pat_range() takes a normal semiclosed range 2009-11-23 17:09:59 -08:00
poll.h
posix_types_32.h
posix_types_64.h
posix_types.h
prctl.h
processor-cyrix.h
processor-flags.h
processor.h x86, cpuid: Add "volatile" to asm in native_cpuid() 2009-12-16 16:30:57 -08:00
proto.h x86: remove "extern" from function prototypes in <asm/proto.h> 2009-11-16 13:55:31 -08:00
ptrace-abi.h
ptrace.h ptrace: x86: implement user_single_step_siginfo() 2009-12-16 07:20:08 -08:00
pvclock-abi.h
pvclock.h
rdc321x_defs.h
reboot_fixups.h
reboot.h
required-features.h
resource.h
resume-trace.h
rio.h
rtc.h
rwlock.h
rwsem.h x86-32: clean up rwsem inline asm statements 2010-01-12 20:43:04 -08:00
scatterlist.h
seccomp_32.h
seccomp_64.h
seccomp.h
sections.h
segment.h
sembuf.h
serial.h
setup_arch.h
setup.h
shmbuf.h
shmparam.h
sigcontext32.h
sigcontext.h tree-wide: fix misspelling of "definition" in comments 2009-12-04 23:41:47 +01:00
sigframe.h
siginfo.h
signal.h
smp.h
smpboot_hooks.h
socket.h
sockios.h
sparsemem.h
spinlock_types.h locking: Convert raw_rwlock to arch_rwlock 2009-12-14 23:55:32 +01:00
spinlock.h locking: Convert raw_rwlock functions to arch_rwlock 2009-12-14 23:55:32 +01:00
srat.h
stackprotector.h
stacktrace.h perf events, x86/stacktrace: Fix performance/softlockup by providing a special frame pointer-only stack walker 2009-12-17 10:42:52 +01:00
stat.h
statfs.h
string_32.h
string_64.h
string.h
suspend_32.h
suspend_64.h
suspend.h
svm.h KVM: SVM: Support Pause Filter in AMD processors 2009-12-03 09:32:17 +02:00
swab.h
swiotlb.h x86: Split swiotlb initialization into two stages 2009-12-15 13:01:57 +01:00
sync_bitops.h
sys_ia32.h sanitize do_pipe_flags() callers in arch 2009-12-16 12:16:40 -05:00
syscall.h
syscalls.h Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-12-16 12:02:37 -08:00
system_64.h
system.h x86: Factor duplicated code out of __show_regs() into show_regs_common() 2009-12-09 10:17:58 +01:00
tce.h
termbits.h
termios.h
thread_info.h
time.h
timer.h
timex.h
tlb.h
tlbflush.h
topology.h hugetlb: add generic definition of NUMA_NO_NODE 2009-12-15 08:53:12 -08:00
trampoline.h x86: Use find_e820() instead of hard coded trampoline address 2009-12-11 09:28:22 +01:00
traps.h
tsc.h
types.h
uaccess_32.h
uaccess_64.h x86-64: Modify copy_user_generic() alternatives mechanism 2009-12-30 11:57:31 +01:00
uaccess.h
ucontext.h
unaligned.h
unistd_32.h
unistd_64.h
unistd.h
user32.h
user_32.h
user_64.h
user.h
vdso.h
vga.h
vgtod.h
virtext.h
vm86.h
vmi_time.h
vmi.h
vmware.h
vmx.h KVM: VMX: Add support for Pause-Loop Exiting 2009-12-03 09:32:17 +02:00
vsyscall.h
x86_init.h Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-12-08 13:27:33 -08:00
xcr.h
xor_32.h
xor_64.h
xor.h
xsave.h