Paul E. McKenney
f41d911f8c
rcu: Merge preemptable-RCU functionality into hierarchical RCU
...
Create a kernel/rcutree_plugin.h file that contains definitions
for preemptable RCU (or, under the #else branch of the #ifdef,
empty definitions for the classic non-preemptable semantics).
These definitions fit into plugins defined in kernel/rcutree.c
for this purpose.
This variant of preemptable RCU uses a new algorithm whose
read-side expense is roughly that of classic hierarchical RCU
under CONFIG_PREEMPT. This new algorithm's update-side expense
is similar to that of classic hierarchical RCU, and, in absence
of read-side preemption or blocking, is exactly that of classic
hierarchical RCU. Perhaps more important, this new algorithm
has a much simpler implementation, saving well over 1,000 lines
of code compared to mainline's implementation of preemptable
RCU, which will hopefully be retired in favor of this new
algorithm.
The simplifications are obtained by maintaining per-task
nesting state for running tasks, and using a simple
lock-protected algorithm to handle accounting when tasks block
within RCU read-side critical sections, making use of lessons
learned while creating numerous user-level RCU implementations
over the past 18 months.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: akpm@linux-foundation.org
Cc: mathieu.desnoyers@polymtl.ca
Cc: josht@linux.vnet.ibm.com
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: rostedt@goodmis.org
LKML-Reference: <12509746134003-git-send-email->
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-08-23 10:32:40 +02:00
..
gcov
gcov: enable GCOV_PROFILE_ALL for x86_64
2009-06-18 13:03:58 -07:00
irq
genirq: prevent wakeup of freed irq thread
2009-08-13 23:09:27 +02:00
power
headers: smp_lock.h redux
2009-07-12 12:22:34 -07:00
time
clocksource: Prevent NULL pointer dereference
2009-07-19 17:15:54 +02:00
trace
Remove double removal of blktrace directory
2009-08-12 18:50:08 +02:00
.gitignore
acct.c
bsdacct: fix access to invalid filp in acct_on()
2009-06-30 18:56:00 -07:00
async.c
async: Fix lack of boot-time console due to insufficient synchronization
2009-06-08 12:31:53 -07:00
audit.c
Fix rule eviction order for AUDIT_DIR
2009-06-24 00:02:38 -04:00
audit.h
Fix rule eviction order for AUDIT_DIR
2009-06-24 00:02:38 -04:00
audit_tree.c
Fix rule eviction order for AUDIT_DIR
2009-06-24 00:02:38 -04:00
audit_watch.c
Audit: clean up all op= output to include string quoting
2009-06-24 00:00:52 -04:00
auditfilter.c
Audit: clean up all op= output to include string quoting
2009-06-24 00:00:52 -04:00
auditsc.c
Fix rule eviction order for AUDIT_DIR
2009-06-24 00:02:38 -04:00
backtracetest.c
bounds.c
capability.c
cgroup.c
cgroup avoid permanent sleep at rmdir
2009-07-29 19:10:35 -07:00
cgroup_debug.c
cgroup_freezer.c
compat.c
configs.c
cpu.c
mm/init: cpu_hotplug_init() must be initialized before SLAB
2009-06-22 21:18:12 -07:00
cpuset.c
cpuset,mm: update tasks' mems_allowed in time
2009-06-16 19:47:31 -07:00
cred-internals.h
cred.c
delayacct.c
dma-coherent.c
dma.c
exec_domain.c
exit.c
rcu: Merge preemptable-RCU functionality into hierarchical RCU
2009-08-23 10:32:40 +02:00
extable.c
fork.c
rcu: Merge preemptable-RCU functionality into hierarchical RCU
2009-08-23 10:32:40 +02:00
freezer.c
sched: fix nr_uninterruptible accounting of frozen tasks really
2009-07-18 14:19:53 +02:00
futex.c
futex: Fix handling of bad requeue syscall pairing
2009-08-10 20:38:11 +02:00
futex_compat.c
futex: Fix compat_futex to be same as futex for REQUEUE_PI
2009-08-10 15:41:12 +02:00
groups.c
groups: move code to kernel/groups.c
2009-06-16 19:47:48 -07:00
hrtimer.c
hrtimer: Fix migration expiry check
2009-07-10 17:32:55 +02:00
hung_task.c
itimer.c
kallsyms.c
kernel/kallsyms.c: replace deprecated __initcall with device_initcall and fix whitespace
2009-06-09 22:37:52 +02:00
Kconfig.freezer
Kconfig.hz
Kconfig.preempt
kexec.c
kexec: fix omitting offset in extended crashkernel syntax
2009-07-29 19:10:34 -07:00
kfifo.c
kernel/kfifo.c: replace conditional test with is_power_of_2()
2009-06-16 19:47:47 -07:00
kgdb.c
sysrq, intel_fb: fix sysrq g collision
2009-05-15 07:56:24 -05:00
kmod.c
headers: mnt_namespace.h redux
2009-07-08 09:31:56 -07:00
kprobes.c
kprobes: Use kernel_text_address() for checking probe address
2009-07-30 16:44:06 -07:00
ksysfs.c
kthread.c
update the comment in kthread_stop()
2009-07-27 12:15:46 -07:00
latencytop.c
lockdep.c
lockdep_internals.h
lockdep: increase MAX_LOCKDEP_ENTRIES and MAX_LOCKDEP_CHAINS
2009-05-12 19:59:52 +02:00
lockdep_proc.c
lockdep: Fix file mode of lock_stat
2009-08-07 11:58:38 +02:00
lockdep_states.h
Makefile
rcu: Merge preemptable-RCU functionality into hierarchical RCU
2009-08-23 10:32:40 +02:00
marker.c
module.c
module: use MODULE_SYMBOL_PREFIX with module_layout
2009-07-27 12:15:45 -07:00
mutex-debug.c
mutex-debug.h
mutex.c
Merge branch 'linus' into perfcounters/core
2009-06-11 17:55:42 +02:00
mutex.h
notifier.c
ns_cgroup.c
nsproxy.c
nsproxy: extract create_nsproxy()
2009-06-18 13:03:56 -07:00
panic.c
trace: stop tracer in oops_enter()
2009-07-24 15:30:45 -04:00
params.c
module_param: allow 'bool' module_params to be bool, not just int.
2009-06-12 21:46:58 +09:30
perf_counter.c
perf_counter: Report the cloning task as parent on perf_counter_fork()
2009-08-13 16:17:15 +02:00
pid.c
kmemleak: Remove alloc_bootmem annotations introduced in the past
2009-07-09 17:07:02 +01:00
pid_namespace.c
pidns: rewrite copy_pid_ns()
2009-06-18 13:03:55 -07:00
pm_qos_params.c
posix-cpu-timers.c
posix_cpu_timers_exit_group(): Do not use thread_group_cputimer()
2009-08-08 18:30:25 +02:00
posix-timers.c
posix-timers: Fix oops in clock_nanosleep() with CLOCK_MONOTONIC_RAW
2009-08-04 10:16:41 +02:00
printk.c
printk: Add KERN_DEFAULT printk log-level
2009-06-16 11:02:28 -07:00
profile.c
profile: suppress warning about large allocations when profile=1 is specified
2009-07-29 19:10:36 -07:00
ptrace.c
cred_guard_mutex: do not return -EINTR to user-space
2009-07-06 13:57:04 -07:00
rcupdate.c
rcu: Delay rcu_barrier() wait until beginning of next CPU-hotunplug operation.
2009-08-19 13:58:54 +02:00
rcupreempt.c
rcu: Simplify rcu_pending()/rcu_check_callbacks() API
2009-08-23 10:32:39 +02:00
rcupreempt_trace.c
rcu: Make rcupreempt_trace.c look at offline CPUs
2009-08-15 19:02:09 +02:00
rcutorture.c
rcu: Add synchronize_sched_expedited() torture tests
2009-07-03 10:02:29 +02:00
rcutree.c
rcu: Merge preemptable-RCU functionality into hierarchical RCU
2009-08-23 10:32:40 +02:00
rcutree.h
rcu: Merge preemptable-RCU functionality into hierarchical RCU
2009-08-23 10:32:40 +02:00
rcutree_plugin.h
rcu: Merge preemptable-RCU functionality into hierarchical RCU
2009-08-23 10:32:40 +02:00
rcutree_trace.c
rcu: Merge preemptable-RCU functionality into hierarchical RCU
2009-08-23 10:32:40 +02:00
relay.c
res_counter.c
memcg: add interface to reset limits
2009-06-18 13:03:48 -07:00
resource.c
kernel/resource.c: fix sign extension in reserve_setup()
2009-06-30 18:56:00 -07:00
rtmutex-debug.c
rtmutex-debug.h
rtmutex-tester.c
rtmutex.c
rtmutex: Avoid deadlock in rt_mutex_start_proxy_lock()
2009-08-06 05:50:21 +02:00
rtmutex.h
rtmutex_common.h
rwsem.c
sched.c
rcu: Renamings to increase RCU clarity
2009-08-23 10:32:37 +02:00
sched_clock.c
sched_cpupri.c
sched: Fix race in cpupri introduced by cpumask_var changes
2009-08-02 14:23:29 +02:00
sched_cpupri.h
sched_debug.c
sched: Hide runqueues from direct refer at source code level
2009-06-17 18:29:42 +02:00
sched_fair.c
sched: Fix latencytop and sleep profiling vs group scheduling
2009-08-02 14:10:12 +02:00
sched_features.h
sched_idletask.c
sched, timers: move calc_load() to scheduler
2009-05-15 15:32:45 +02:00
sched_rt.c
sched_rt: Fix overload bug on rt group scheduling
2009-07-10 10:43:29 +02:00
sched_stats.h
seccomp.c
semaphore.c
signal.c
do_sigaltstack: small cleanups
2009-08-01 11:18:56 -07:00
slow-work.c
slow-work: use round_jiffies() for thread pool's cull and OOM timers
2009-06-16 19:47:49 -07:00
smp.c
generic-ipi: fix hotplug_cfd()
2009-08-07 10:39:55 -07:00
softirq.c
rcu: Renamings to increase RCU clarity
2009-08-23 10:32:37 +02:00
softlockup.c
spinlock.c
srcu.c
stacktrace.c
stop_machine.c
sys.c
groups: move code to kernel/groups.c
2009-06-16 19:47:48 -07:00
sys_ni.c
sysctl.c
Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
2009-06-28 11:05:28 -07:00
sysctl_check.c
taskstats.c
test_kprobes.c
time.c
timeconst.pl
timer.c
rcu: Simplify rcu_pending()/rcu_check_callbacks() API
2009-08-23 10:32:39 +02:00
tracepoint.c
tsacct.c
uid16.c
up.c
user.c
sched: delayed cleanup of user_struct
2009-06-15 21:30:23 -07:00
user_namespace.c
utsname.c
utsns: extract creeate_uts_ns()
2009-06-18 13:03:55 -07:00
utsname_sysctl.c
wait.c
locking, sched: Give waitqueue spinlocks their own lockdep classes
2009-08-10 14:43:09 +02:00
workqueue.c
ftrace, workqueuetrace: make workqueue tracepoints use TRACE_EVENT macro
2009-06-02 01:10:40 +02:00