Peter Zijlstra (Intel)
69f9cae909
locking/qspinlock: Optimize for smaller NR_CPUS
...
When we allow for a max NR_CPUS < 2^14 we can optimize the pending
wait-acquire and the xchg_tail() operations.
By growing the pending bit to a byte, we reduce the tail to 16bit.
This means we can use xchg16 for the tail part and do away with all
the repeated compxchg() operations.
This in turn allows us to unconditionally acquire; the locked state
as observed by the wait loops cannot change. And because both locked
and pending are now a full byte we can use simple stores for the
state transition, obviating one atomic operation entirely.
This optimization is needed to make the qspinlock achieve performance
parity with ticket spinlock at light load.
All this is horribly broken on Alpha pre EV56 (and any other arch that
cannot do single-copy atomic byte stores).
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Waiman Long <Waiman.Long@hp.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Daniel J Blueman <daniel@numascale.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Douglas Hatch <doug.hatch@hp.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Paolo Bonzini <paolo.bonzini@gmail.com>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Scott J Norton <scott.norton@hp.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: virtualization@lists.linux-foundation.org
Cc: xen-devel@lists.xenproject.org
Link: http://lkml.kernel.org/r/1429901803-29771-6-git-send-email-Waiman.Long@hp.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2015-05-08 12:36:48 +02:00
..
bpf
bpf: fix 64-bit divide
2015-04-27 23:11:49 -04:00
configs
debug
debug: prevent entering debug mode on panic/exception.
2015-02-19 12:39:03 -06:00
events
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
2015-04-15 09:00:47 -07:00
gcov
gcov: fix softlockups
2015-04-17 09:04:08 -04:00
irq
irqchip core change for v4.1 (round 3)
2015-04-11 11:17:28 +02:00
livepatch
Merge branch 'for-4.1/core-noarch' into for-linus
2015-04-13 23:57:20 +02:00
locking
locking/qspinlock: Optimize for smaller NR_CPUS
2015-05-08 12:36:48 +02:00
power
Merge back earlier suspend/hibernate material for v4.1.
2015-04-10 12:01:59 +02:00
printk
TTY/Serial patches for 4.1-rc1
2015-04-21 09:33:10 -07:00
rcu
rcu: Control grace-period delays directly from value
2015-04-14 19:33:59 -07:00
sched
Power management and ACPI fixes for v4.1-rc2
2015-04-30 14:23:31 -07:00
time
Char/Misc driver patches for 4.1-rc1
2015-04-21 09:42:58 -07:00
trace
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2015-04-26 17:22:07 -07:00
.gitignore
acct.c
acct: check FMODE_CAN_WRITE
2015-04-11 22:27:55 -04:00
async.c
audit.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2015-04-26 17:22:07 -07:00
audit.h
Merge branch 'upstream' of git://git.infradead.org/users/pcmoore/audit
2015-04-22 14:49:23 -07:00
audit_tree.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2015-04-26 17:22:07 -07:00
audit_watch.c
VFS: audit: d_backing_inode() annotations
2015-04-15 15:06:55 -04:00
auditfilter.c
Merge branch 'upstream' of git://git.infradead.org/users/pcmoore/audit
2015-02-11 20:07:47 -08:00
auditsc.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2015-04-26 17:22:07 -07:00
backtracetest.c
bounds.c
capability.c
kernel: conditionally support non-root users, groups and capabilities
2015-04-15 16:35:22 -07:00
cgroup.c
cgroup: remove use of seq_printf return value
2015-04-15 16:35:25 -07:00
cgroup_freezer.c
compat.c
all arches, signal: move restart_block to struct task_struct
2015-02-12 18:54:12 -08:00
configs.c
context_tracking.c
context_tracking: Export context_tracking_user_enter/exit
2015-03-09 15:43:00 +01:00
cpu.c
Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2015-04-14 13:36:04 -07:00
cpu_pm.c
cpuset.c
kernel, cpuset: remove exception for __GFP_THISNODE
2015-04-14 16:49:03 -07:00
crash_dump.c
cred.c
kernel: conditionally support non-root users, groups and capabilities
2015-04-15 16:35:22 -07:00
delayacct.c
dma.c
elfcore.c
exec_domain.c
Remove rest of exec domains.
2015-04-12 21:03:31 +02:00
exit.c
Remove execution domain support
2015-04-12 20:58:24 +02:00
extable.c
fork.c
oprofile: reduce mmap_sem hold for mm->exe_file
2015-04-17 09:04:11 -04:00
freezer.c
futex.c
Linux 34.0-rc1
2015-02-24 08:41:07 +01:00
futex_compat.c
groups.c
kernel: conditionally support non-root users, groups and capabilities
2015-04-15 16:35:22 -07:00
hung_task.c
kernel/hung_task.c: change hung_task.c to use for_each_process_thread()
2015-04-15 16:35:22 -07:00
irq_work.c
jump_label.c
kallsyms.c
kcmp.c
Kconfig.freezer
Kconfig.hz
Kconfig.locks
locking/qspinlock: Introduce a simple generic 4-byte queued spinlock
2015-05-08 12:36:25 +02:00
Kconfig.preempt
kexec.c
kexec: allocate the kexec control page with KEXEC_CONTROL_MEMORY_GFP
2015-04-23 16:52:01 +02:00
kmod.c
kprobes.c
kprobes: makes kprobes/enabled works correctly for optimized kprobes.
2015-02-13 21:21:42 -08:00
ksysfs.c
kthread.c
latencytop.c
Makefile
modsign: change default key details
2015-04-30 09:35:41 -07:00
module-internal.h
module.c
Quentin opened a can of worms by adding extable entry checking to modpost,
2015-04-22 09:49:24 -07:00
module_signing.c
notifier.c
nsproxy.c
padata.c
padata: use %*pb[l] to print bitmaps including cpumasks and nodemasks
2015-02-13 21:21:38 -08:00
panic.c
params.c
params: handle quotes properly for values not of form foo="bar".
2015-04-15 13:31:23 +09:30
pid.c
fork: report pid reservation failure properly
2015-04-17 09:04:06 -04:00
pid_namespace.c
profile.c
profile: use %*pb[l] to print bitmaps including cpumasks and nodemasks
2015-02-13 21:21:38 -08:00
ptrace.c
ptrace: ptrace_detach() can no longer race with SIGKILL
2015-04-17 09:04:06 -04:00
range.c
reboot.c
kernel/reboot.c: add orderly_reboot for graceful reboot
2015-04-15 16:35:23 -07:00
relay.c
VFS: kernel/: d_inode() annotations
2015-04-15 15:06:55 -04:00
resource.c
kernel/resource.c: remove deprecated __check_region() and friends
2015-04-15 16:35:22 -07:00
seccomp.c
seccomp: cap SECCOMP_RET_ERRNO data to MAX_ERRNO
2015-02-17 14:34:55 -08:00
signal.c
signal: remove warning about using SI_TKILL in rt_[tg]sigqueueinfo
2015-04-17 09:04:06 -04:00
smp.c
smp: Fix error case handling in smp_call_function_*()
2015-04-19 13:19:23 -07:00
smpboot.c
smpboot: Add common code for notification from dying CPU
2015-03-11 13:20:25 -07:00
smpboot.h
softirq.c
Merge branch 'locking-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2015-02-09 15:24:03 -08:00
stacktrace.c
stop_machine.c
sys.c
prctl: avoid using mmap_sem for exe_file serialization
2015-04-17 09:04:07 -04:00
sys_ni.c
kernel: conditionally support non-root users, groups and capabilities
2015-04-15 16:35:22 -07:00
sysctl.c
kernel/sysctl.c: detect overflows when converting to int
2015-04-17 09:04:08 -04:00
sysctl_binary.c
system_certificates.S
system_keyring.c
task_work.c
taskstats.c
test_kprobes.c
torture.c
tracepoint.c
tsacct.c
uid16.c
up.c
user-return-notifier.c
user.c
user_namespace.c
utsname.c
utsname_sysctl.c
watchdog.c
Merge branch 'akpm' (patches from Andrew)
2015-04-14 16:49:17 -07:00
workqueue.c
workqueue: Reorder sysfs code
2015-04-06 11:16:04 -04:00
workqueue_internal.h