Shan Wei
d860d40327
rcu: Use __this_cpu_read() instead of per_cpu_ptr()
The __this_cpu_read() function produces better code than does
per_cpu_ptr() on both ARM and x86. For example, gcc (Ubuntu/Linaro
4.7.3-12ubuntu1) 4.7.3 produces the following:
ARMv7 per_cpu_ptr():
force_quiescent_state:
mov r3, sp @,
bic r1, r3, #8128 @ tmp171,,
ldr r2, .L98 @ tmp169,
bic r1, r1, #63 @ tmp170, tmp171,
ldr r3, [r0, #220] @ __ptr, rsp_6(D)->rda
ldr r1, [r1, #20] @ D.35903_68->cpu, D.35903_68->cpu
mov r6, r0 @ rsp, rsp
ldr r2, [r2, r1, asl #2] @ tmp173, __per_cpu_offset
add r3, r3, r2 @ tmp175, __ptr, tmp173
ldr r5, [r3, #12] @ rnp_old, D.29162_13->mynode
ARMv7 __this_cpu_read():
force_quiescent_state:
ldr r3, [r0, #220] @ rsp_7(D)->rda, rsp_7(D)->rda
mov r6, r0 @ rsp, rsp
add r3, r3, #12 @ __ptr, rsp_7(D)->rda,
ldr r5, [r2, r3] @ rnp_old, *D.29176_13
Using gcc 4.8.2:
x86_64 per_cpu_ptr():
movl %gs:cpu_number,%edx # cpu_number, pscr_ret__
movslq %edx, %rdx # pscr_ret__, pscr_ret__
movq __per_cpu_offset(,%rdx,8), %rdx # __per_cpu_offset, tmp93
movq %rdi, %r13 # rsp, rsp
movq 1000(%rdi), %rax # rsp_9(D)->rda, __ptr
movq 24(%rdx,%rax), %r12 # _15->mynode, rnp_old
x86_64 __this_cpu_read():
movq %rdi, %r13 # rsp, rsp
movq 1000(%rdi), %rax # rsp_9(D)->rda, rsp_9(D)->rda
movq %gs:24(%rax),%r12 # _10->mynode, rnp_old
Because this change produces significant benefits for these two very
diverse architectures, this commit makes this change.
Signed-off-by: Shan Wei <davidshan@tencent.com>
Acked-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Reviewed-by: Lai Jiangshan <laijs@cn.fujitsu.com>
|
2014-07-09 09:15:21 -07:00 |
| .. |
|
debug
|
kernel/printk: use symbolic defines for console loglevels
|
2014-06-04 16:54:17 -07:00 |
|
events
|
Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2014-06-12 19:18:49 -07:00 |
|
gcov
|
gcov: add support for GCC 4.9
|
2014-06-10 15:34:46 -07:00 |
|
irq
|
genirq: Improve documentation to match current implementation
|
2014-05-27 10:16:44 +02:00 |
|
locking
|
Merge branch 'locking-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2014-06-12 18:48:15 -07:00 |
|
power
|
Merge branch 'pm-sleep'
|
2014-06-12 13:43:08 +02:00 |
|
printk
|
kernel/printk: use symbolic defines for console loglevels
|
2014-06-04 16:54:17 -07:00 |
|
rcu
|
rcu: Use __this_cpu_read() instead of per_cpu_ptr()
|
2014-07-09 09:15:21 -07:00 |
|
sched
|
rcu: Reduce overhead of cond_resched() checks for RCU
|
2014-06-23 11:19:32 -07:00 |
|
time
|
rcu: Bind grace-period kthreads to non-NO_HZ_FULL CPUs
|
2014-07-09 09:15:02 -07:00 |
|
trace
|
One bug fix that goes back to 3.10. Accessing a non existent buffer
|
2014-06-12 21:07:25 -07:00 |
|
.gitignore
|
Ignore generated file kernel/x509_certificate_list
|
2013-12-10 18:21:34 +00:00 |
|
acct.c
|
ipc, kernel: clear whitespace
|
2014-06-06 16:08:14 -07:00 |
|
async.c
|
|
|
|
audit.c
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
|
2014-06-12 14:27:40 -07:00 |
|
audit.h
|
audit: Use struct net not pid_t to remember the network namespce to reply in
|
2014-03-20 10:10:53 -04:00 |
|
audit_tree.c
|
inotify: Fix reporting of cookies for inotify events
|
2014-02-18 11:17:17 +01:00 |
|
audit_watch.c
|
inotify: Fix reporting of cookies for inotify events
|
2014-02-18 11:17:17 +01:00 |
|
auditfilter.c
|
Merge git://git.infradead.org/users/eparis/audit
|
2014-04-12 12:38:53 -07:00 |
|
auditsc.c
|
auditsc: audit_krule mask accesses need bounds checking
|
2014-06-10 08:44:40 -07:00 |
|
backtracetest.c
|
kernel/backtracetest.c: replace no level printk by pr_info()
|
2014-06-04 16:54:14 -07:00 |
|
bounds.c
|
mm: do not allocate page->ptl dynamically, if spinlock_t fits to long
|
2013-12-20 12:25:45 -08:00 |
|
capability.c
|
fs,userns: Change inode_capable to capable_wrt_inode_uidgid
|
2014-06-10 13:57:22 -07:00 |
|
cgroup.c
|
Merge branch 'for-3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
|
2014-06-09 15:03:33 -07:00 |
|
cgroup_freezer.c
|
cgroup: remove css_parent()
|
2014-05-16 13:22:48 -04:00 |
|
compat.c
|
kernel/compat.c: use sizeof() instead of sizeof
|
2014-06-04 16:54:19 -07:00 |
|
configs.c
|
|
|
|
context_tracking.c
|
asmlinkage: Add explicit __visible to drivers/*, lib/*, kernel/*
|
2014-05-05 16:07:46 -07:00 |
|
cpu.c
|
More ACPI and power management updates for 3.16-rc1
|
2014-06-12 13:14:19 -07:00 |
|
cpu_pm.c
|
|
|
|
cpuset.c
|
Merge branch 'for-3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
|
2014-06-09 15:03:33 -07:00 |
|
crash_dump.c
|
|
|
|
cred.c
|
|
|
|
delayacct.c
|
|
|
|
dma.c
|
|
|
|
elfcore.c
|
|
|
|
exec_domain.c
|
kernel/exec_domain.c: code clean-up
|
2014-06-04 16:54:15 -07:00 |
|
exit.c
|
signals: mv {dis,}allow_signal() from sched.h/exit.c to signal.[ch]
|
2014-06-06 16:08:11 -07:00 |
|
extable.c
|
asmlinkage: Make main_extable_sort_needed visible
|
2014-02-13 18:13:22 -08:00 |
|
fork.c
|
ptrace: fix fork event messages across pid namespaces
|
2014-06-06 16:08:11 -07:00 |
|
freezer.c
|
libata, freezer: avoid block device removal while system is frozen
|
2013-12-19 13:50:32 -05:00 |
|
futex.c
|
Merge branch 'next' (accumulated 3.16 merge window patches) into master
|
2014-06-08 11:31:16 -07:00 |
|
futex_compat.c
|
compat: Get rid of (get|put)_compat_time(val|spec)
|
2014-02-02 14:09:12 -08:00 |
|
groups.c
|
kernel/groups.c: remove return value of set_groups
|
2014-04-03 16:21:05 -07:00 |
|
hrtimer.c
|
Merge branch 'perf/urgent' into perf/core, to resolve conflict and to prepare for new patches
|
2014-06-06 07:55:06 +02:00 |
|
hung_task.c
|
kernel/hung_task.c: convert simple_strtoul to kstrtouint
|
2014-06-04 16:54:15 -07:00 |
|
irq_work.c
|
perf/x86: Warn to early_printk() in case irq_work is too slow
|
2014-02-21 21:49:07 +01:00 |
|
itimer.c
|
|
|
|
jump_label.c
|
|
|
|
kallsyms.c
|
kernel: use macros from compiler.h instead of __attribute__((...))
|
2014-04-07 16:36:11 -07:00 |
|
kcmp.c
|
|
|
|
Kconfig.freezer
|
|
|
|
Kconfig.hz
|
|
|
|
Kconfig.locks
|
locking/rwlocks: Introduce 'qrwlocks' - fair, queued rwlocks
|
2014-06-06 07:58:28 +02:00 |
|
Kconfig.preempt
|
|
|
|
kexec.c
|
kernel/kexec.c: convert printk to pr_foo()
|
2014-06-06 16:08:12 -07:00 |
|
kmod.c
|
signals: change wait_for_helper() to use kernel_sigaction()
|
2014-06-06 16:08:12 -07:00 |
|
kprobes.c
|
kprobes: Show blacklist entries via debugfs
|
2014-04-24 10:26:41 +02:00 |
|
ksysfs.c
|
kobject: Make support for uevent_helper optional.
|
2014-04-25 12:00:49 -07:00 |
|
kthread.c
|
kthread: fix return value of kthread_create() upon SIGKILL.
|
2014-06-04 16:53:51 -07:00 |
|
latencytop.c
|
kernel/latencytop.c: convert seq_printf to seq_puts
|
2014-06-04 16:54:15 -07:00 |
|
Makefile
|
Merge branch 'x86-asmlinkage-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2014-03-31 14:13:25 -07:00 |
|
module-internal.h
|
|
|
|
module.c
|
Most of this is cleaning up various driver sysfs permissions so we can
|
2014-06-11 16:09:14 -07:00 |
|
module_signing.c
|
|
|
|
notifier.c
|
kprobes, notifier: Use NOKPROBE_SYMBOL macro in notifier
|
2014-04-24 10:26:39 +02:00 |
|
nsproxy.c
|
|
|
|
padata.c
|
padata: Fix wrong usage of rcu_dereference()
|
2013-12-05 21:28:42 +08:00 |
|
panic.c
|
kernel/panic.c: add "crash_kexec_post_notifiers" option for kdump after panic_notifers
|
2014-06-06 16:08:12 -07:00 |
|
params.c
|
param: hand arguments after -- straight to init
|
2014-04-28 11:48:34 +09:30 |
|
pid.c
|
|
|
|
pid_namespace.c
|
pid_namespace: pidns_get() should check task_active_pid_ns() != NULL
|
2014-04-02 16:20:21 -07:00 |
|
posix-cpu-timers.c
|
posix-timers: Convert abuses of BUG_ON to WARN_ON
|
2013-12-09 16:56:29 +01:00 |
|
posix-timers.c
|
|
|
|
profile.c
|
kernel/profile.c: use static const char instead of static char
|
2014-06-06 16:08:13 -07:00 |
|
ptrace.c
|
kernel/compat: convert to COMPAT_SYSCALL_DEFINE
|
2014-03-06 15:35:10 +01:00 |
|
range.c
|
|
|
|
reboot.c
|
kernel/reboot.c: convert simple_strtoul to kstrtoint
|
2014-06-04 16:54:15 -07:00 |
|
relay.c
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2014-04-12 14:49:50 -07:00 |
|
res_counter.c
|
kernel/res_counter.c: replace simple_strtoull by kstrtoull
|
2014-06-04 16:54:15 -07:00 |
|
resource.c
|
resources: Clarify sanity check message
|
2014-05-23 10:47:21 -06:00 |
|
seccomp.c
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
|
2014-06-12 14:27:40 -07:00 |
|
signal.c
|
signal: Explain local_irq_save() call
|
2014-07-09 09:14:33 -07:00 |
|
smp.c
|
smp: print more useful debug info upon receiving IPI on an offline CPU
|
2014-06-06 16:08:12 -07:00 |
|
smpboot.c
|
|
|
|
smpboot.h
|
|
|
|
softirq.c
|
Merge branch 'rcu/next' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu into core/rcu
|
2014-05-22 11:36:10 +02:00 |
|
stacktrace.c
|
|
|
|
stop_machine.c
|
kernel/stop_machine.c: kernel-doc warning fix
|
2014-06-04 16:54:15 -07:00 |
|
sys.c
|
sched: Consolidate open coded implementations of nice level frobbing into nice_to_rlimit() and rlimit_to_nice()
|
2014-05-22 11:16:36 +02:00 |
|
sys_ni.c
|
sys_sgetmask/sys_ssetmask: add CONFIG_SGETMASK_SYSCALL
|
2014-06-04 16:54:14 -07:00 |
|
sysctl.c
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
|
2014-06-12 14:27:40 -07:00 |
|
sysctl_binary.c
|
|
|
|
system_certificates.S
|
KEYS: correct alignment of system_certificate_list content in assembly file
|
2013-12-10 18:25:28 +00:00 |
|
system_keyring.c
|
KEYS: correct alignment of system_certificate_list content in assembly file
|
2013-12-10 18:25:28 +00:00 |
|
task_work.c
|
|
|
|
taskstats.c
|
|
|
|
test_kprobes.c
|
|
|
|
time.c
|
|
|
|
timeconst.bc
|
|
|
|
timer.c
|
timer: Prevent overflow in apply_slack
|
2014-04-30 13:46:17 +02:00 |
|
torture.c
|
torture: Remove __init from torture_init_begin/end
|
2014-05-14 09:46:30 -07:00 |
|
tracepoint.c
|
kernel/tracepoint.c: kernel-doc fixes
|
2014-06-04 16:54:15 -07:00 |
|
tsacct.c
|
|
|
|
uid16.c
|
|
|
|
up.c
|
smp: Rename __smp_call_function_single() to smp_call_function_single_async()
|
2014-02-24 14:47:15 -08:00 |
|
user-return-notifier.c
|
|
|
|
user.c
|
kernel/user.c: drop unused field 'files' from user_struct
|
2014-06-04 16:54:16 -07:00 |
|
user_namespace.c
|
kernel/user_namespace.c: kernel-doc/checkpatch fixes
|
2014-06-06 16:08:13 -07:00 |
|
utsname.c
|
|
|
|
utsname_sysctl.c
|
sysctl: convert use of typedef ctl_table to struct ctl_table
|
2014-06-06 16:08:16 -07:00 |
|
watchdog.c
|
kernel/watchdog.c:touch_softlockup_watchdog(): use raw_cpu_write()
|
2014-04-18 16:40:08 -07:00 |
|
workqueue.c
|
Merge branch 'for-3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
|
2014-06-09 14:56:49 -07:00 |
|
workqueue_internal.h
|
workqueue: rename manager_mutex to attach_mutex
|
2014-05-20 10:59:32 -04:00 |