Alex Elder
f099755d4c
printk: drop logbuf_cpu volatile qualifier
...
Pranith Kumar posted a patch in which removed the "volatile"
qualifier for the "logbuf_cpu" variable in vprintk_emit().
https://lkml.org/lkml/2014/11/13/894
In his patch, he used ACCESS_ONCE() for all references to
that symbol to provide whatever protection was intended.
There was some discussion that followed, and in the end Steven Rostedt
concluded that not only was "volatile" not needed, neither was it
required to use ACCESS_ONCE(). I offered an elaborate description that
concluded Steven was right, and Pranith asked me to submit an
alternative patch. And this is it.
The basic reason "volatile" is not needed is that "logbuf_cpu" has
static storage duration, and vprintk_emit() is an exported
interface. This means that the value of logbuf_cpu must be read
from memory the first time it is used in a particular call of
vprintk_emit(). The variable's value is read only once in that
function, when it's read it'll be the copy from memory (or cache).
In addition, the value of "logbuf_cpu" is only ever written under
protection of a spinlock. So the value that is read is the "real"
value (and not an out-of-date cached one). If its value is not
UINT_MAX, it is the current CPU's processor id, and it will have
been last written by the running CPU.
Signed-off-by: Alex Elder <elder@linaro.org>
Reported-by: Pranith Kumar <bobby.prani@gmail.com>
Suggested-by: Steven Rostedt <rostedt@goodmis.org>
Reviewed-by: Jan Kara <jack@suse.cz>
Cc: Petr Mladek <pmladek@suse.cz>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Joe Perches <joe@perches.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2014-12-10 17:41:11 -08:00
..
bpf
bpf: split eBPF out of NET
2014-10-27 19:09:59 -04:00
configs
x86: Add "make tinyconfig" to configure the tiniest possible kernel
2014-08-08 16:30:24 -07:00
debug
kdb: replace strnicmp with strncasecmp
2014-10-14 02:18:25 +02:00
events
Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-12-09 20:55:37 -08:00
gcov
gcov: add ARM64 to GCOV_PROFILE_ALL
2014-10-29 16:33:14 -07:00
irq
Merge branch 'irq-irqdomain-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-12-10 09:01:01 -08:00
locking
locking/mutex: Don't assume TASK_RUNNING
2014-10-28 10:55:08 +01:00
power
PM / sleep: Fix entering suspend-to-IDLE if no freeze_oops is set
2014-11-08 22:30:05 +01:00
printk
printk: drop logbuf_cpu volatile qualifier
2014-12-10 17:41:11 -08:00
rcu
Merge branches 'torture.2014.11.03a', 'cpu.2014.11.03a', 'doc.2014.11.13a', 'fixes.2014.11.13a', 'signal.2014.10.29a' and 'rt.2014.10.29a' into HEAD
2014-11-13 10:39:04 -08:00
sched
sched_show_task: fix unsafe usage of ->real_parent
2014-12-10 17:41:09 -08:00
time
Merge branch 'timers-2038-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-12-10 10:13:28 -08:00
trace
tracing: Do not risk busy looping in buffer splice
2014-11-10 16:47:31 -05:00
.gitignore
acct.c
acct: eliminate compile warning
2014-10-09 22:26:04 -04:00
async.c
kernel/async.c: switch to pr_foo()
2014-10-09 22:26:04 -04:00
audit.c
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-12-09 21:21:34 -08:00
audit.h
audit: reduce scope of audit_log_fcaps
2014-09-23 16:37:51 -04:00
audit_tree.c
audit: keep inode pinned
2014-11-11 14:20:22 -05:00
audit_watch.c
audit: invalid op= values for rules
2014-09-23 16:37:53 -04:00
auditfilter.c
Merge git://git.infradead.org/users/eparis/audit
2014-10-19 16:25:56 -07:00
auditsc.c
Merge git://git.infradead.org/users/eparis/audit
2014-10-19 16:25:56 -07:00
backtracetest.c
bounds.c
page-cgroup: get rid of NR_PCG_FLAGS
2014-08-08 15:57:18 -07:00
capability.c
CAPABILITIES: remove undefined caps from all processes
2014-07-24 21:53:47 +10:00
cgroup.c
Merge branch 'for-3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-10-10 07:26:02 -04:00
cgroup_freezer.c
compat.c
compat: nanosleep: Clarify error handling
2014-09-06 12:58:18 +02:00
configs.c
context_tracking.c
sched: stop the unbound recursion in preempt_schedule_context()
2014-10-28 10:46:05 +01:00
cpu.c
cpu: Avoid puts_pending overflow
2014-11-03 19:21:01 -08:00
cpu_pm.c
cpuset.c
sched/deadline: Ensure that updates to exclusive cpusets don't break AC
2014-10-28 10:48:00 +01:00
crash_dump.c
crash_dump: Make is_kdump_kernel() accessible from modules
2014-08-25 15:42:19 -07:00
cred.c
delayacct.c
dma.c
elfcore.c
exec_domain.c
exit.c
exit: ptrace: shift "reap dead" code from exit_ptrace() to forget_original_parent()
2014-12-10 17:41:10 -08:00
extable.c
fork.c
signal: Document the RCU protection of ->sighand
2014-10-29 10:07:18 -07:00
freezer.c
freezer: remove obsolete comments in __thaw_task()
2014-10-21 23:44:20 +02:00
futex.c
futex: Fix a race condition between REQUEUE_PI and task death
2014-10-26 16:16:18 +01:00
futex_compat.c
groups.c
hung_task.c
irq_work.c
Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-10-15 07:48:18 +02:00
jump_label.c
kallsyms.c
kernel/kallsyms.c: use __seq_open_private()
2014-10-14 02:18:16 +02:00
kcmp.c
kcmp: fix standard comparison bug
2014-09-10 15:42:12 -07:00
Kconfig.freezer
Kconfig.hz
Kconfig.locks
Kconfig.preempt
kexec.c
kexec: remove the unused function parameter
2014-10-14 02:18:21 +02:00
kmod.c
kernel/kmod: fix use-after-free of the sub_info structure
2014-10-29 16:33:14 -07:00
kprobes.c
kprobes: Skip kretprobe hit in NMI context to avoid deadlock
2014-08-08 10:38:04 +02:00
ksysfs.c
kthread.c
kernel/kthread.c: partial revert of 81c98869fa ("kthread: ensure locality of task_struct allocations")
2014-10-09 22:25:51 -04:00
latencytop.c
Makefile
kernel: res_counter: remove the unused API
2014-12-10 17:41:04 -08:00
module-internal.h
module.c
sched, modules: Fix nested sleep in add_unformed_module()
2014-10-28 10:56:30 +01:00
module_signing.c
notifier.c
nsproxy.c
namespaces: Use task_lock and not rcu to protect nsproxy
2014-07-29 18:08:50 -07:00
padata.c
panic.c
kernel: add panic_on_warn
2014-12-10 17:41:10 -08:00
params.c
kernel/param: consolidate __{start,stop}___param[] in <linux/moduleparam.h>
2014-10-14 02:18:28 +02:00
pid.c
pid_namespace.c
profile.c
ptrace.c
exit: ptrace: shift "reap dead" code from exit_ptrace() to forget_original_parent()
2014-12-10 17:41:10 -08:00
range.c
reboot.c
kernel: add support for kernel restart handler call chain
2014-09-26 00:00:06 -07:00
relay.c
resource.c
x86: optimize resource lookups for ioremap
2014-10-14 02:18:22 +02:00
seccomp.c
Merge branch 'x86-seccomp-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-10-14 02:27:06 +02:00
signal.c
Merge branch 'x86-mpx-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-12-10 09:34:43 -08:00
smp.c
Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-10-15 07:48:18 +02:00
smpboot.c
sched, smp: Correctly deal with nested sleeps
2014-10-28 10:56:24 +01:00
smpboot.h
softirq.c
rcu: Remove "cpu" argument to rcu_note_context_switch()
2014-11-03 19:20:34 -08:00
stacktrace.c
stop_machine.c
sys.c
x86, mpx: On-demand kernel allocation of bounds tables
2014-11-18 00:58:53 +01:00
sys_ni.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
2014-10-08 21:40:54 -04:00
sysctl.c
kernel: add panic_on_warn
2014-12-10 17:41:10 -08:00
sysctl_binary.c
kernel: add panic_on_warn
2014-12-10 17:41:10 -08:00
system_certificates.S
system_keyring.c
task_work.c
taskstats.c
scheduler: Replace __get_cpu_var with this_cpu_ptr
2014-08-26 13:45:45 -04:00
test_kprobes.c
kernel/test_kprobes.c: use current logging functions
2014-08-08 15:57:18 -07:00
torture.c
torture: Address race in module cleanup
2014-09-16 13:41:06 -07:00
tracepoint.c
tsacct.c
uid16.c
up.c
user-return-notifier.c
scheduler: Replace __get_cpu_var with this_cpu_ptr
2014-08-26 13:45:45 -04:00
user.c
user_namespace.c
proc: constify seq_operations
2014-08-08 15:57:22 -07:00
utsname.c
namespaces: Use task_lock and not rcu to protect nsproxy
2014-07-29 18:08:50 -07:00
utsname_sysctl.c
watchdog.c
Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-10-15 07:48:18 +02:00
workqueue.c
workqueue: Use cond_resched_rcu_qs macro
2014-10-06 05:58:26 -07:00
workqueue_internal.h