diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-01 13:16:42 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-01 13:16:42 -0400 |
| commit | 620e77533f29796df7aff861e79bd72e08554ebb (patch) | |
| tree | 844afce2333549bc5b8d7dc87a4875b9216a0023 /include/linux/kthread.h | |
| parent | 6977b4c7736e8809b7959c66875a16c0bbcf2152 (diff) | |
| parent | fa34da708cbe1e2d9a2ee7fc68ea8fccbf095d12 (diff) | |
Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull RCU changes from Ingo Molnar:
0. 'idle RCU':
Adds RCU APIs that allow non-idle tasks to enter RCU idle mode and
provides x86 code to make use of them, allowing RCU to treat
user-mode execution as an extended quiescent state when the new
RCU_USER_QS kernel configuration parameter is specified. (Work is
in progress to port this to a few other architectures, but is not
part of this series.)
1. A fix for a latent bug that has been in RCU ever since the addition
of CPU stall warnings. This bug results in false-positive stall
warnings, but thus far only on embedded systems with severely
cut-down userspace configurations.
2. Further reductions in latency spikes for huge systems, along with
additional boot-time adaptation to the actual hardware.
This is a large change, as it moves RCU grace-period initialization
and cleanup, along with quiescent-state forcing, from softirq to a
kthread. However, it appears to be in quite good shape (famous
last words).
3. Updates to documentation and rcutorture, the latter category
including keeping statistics on CPU-hotplug latencies and fixing
some initialization-time races.
4. CPU-hotplug fixes and improvements.
5. Idle-loop fixes that were omitted on an earlier submission.
6. Miscellaneous fixes and improvements
In certain RCU configurations new kernel threads will show up (rcu_bh,
rcu_sched), showing RCU processing overhead.
* 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (90 commits)
rcu: Apply micro-optimization and int/bool fixes to RCU's idle handling
rcu: Userspace RCU extended QS selftest
x86: Exit RCU extended QS on notify resume
x86: Use the new schedule_user API on userspace preemption
rcu: Exit RCU extended QS on user preemption
rcu: Exit RCU extended QS on kernel preemption after irq/exception
x86: Exception hooks for userspace RCU extended QS
x86: Unspaghettize do_general_protection()
x86: Syscall hooks for userspace RCU extended QS
rcu: Switch task's syscall hooks on context switch
rcu: Ignore userspace extended quiescent state by default
rcu: Allow rcu_user_enter()/exit() to nest
rcu: Settle config for userspace extended quiescent state
rcu: Make RCU_FAST_NO_HZ handle adaptive ticks
rcu: New rcu_user_enter_after_irq() and rcu_user_exit_after_irq() APIs
rcu: New rcu_user_enter() and rcu_user_exit() APIs
ia64: Add missing RCU idle APIs on idle loop
xtensa: Add missing RCU idle APIs on idle loop
score: Add missing RCU idle APIs on idle loop
parisc: Add missing RCU idle APIs on idle loop
...
Diffstat (limited to 'include/linux/kthread.h')
| -rw-r--r-- | include/linux/kthread.h | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/include/linux/kthread.h b/include/linux/kthread.h index 22ccf9dee177..8d816646f766 100644 --- a/include/linux/kthread.h +++ b/include/linux/kthread.h | |||
| @@ -14,6 +14,11 @@ struct task_struct *kthread_create_on_node(int (*threadfn)(void *data), | |||
| 14 | kthread_create_on_node(threadfn, data, -1, namefmt, ##arg) | 14 | kthread_create_on_node(threadfn, data, -1, namefmt, ##arg) |
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | struct task_struct *kthread_create_on_cpu(int (*threadfn)(void *data), | ||
| 18 | void *data, | ||
| 19 | unsigned int cpu, | ||
| 20 | const char *namefmt); | ||
| 21 | |||
| 17 | /** | 22 | /** |
| 18 | * kthread_run - create and wake a thread. | 23 | * kthread_run - create and wake a thread. |
| 19 | * @threadfn: the function to run until signal_pending(current). | 24 | * @threadfn: the function to run until signal_pending(current). |
| @@ -34,9 +39,13 @@ struct task_struct *kthread_create_on_node(int (*threadfn)(void *data), | |||
| 34 | 39 | ||
| 35 | void kthread_bind(struct task_struct *k, unsigned int cpu); | 40 | void kthread_bind(struct task_struct *k, unsigned int cpu); |
| 36 | int kthread_stop(struct task_struct *k); | 41 | int kthread_stop(struct task_struct *k); |
| 37 | int kthread_should_stop(void); | 42 | bool kthread_should_stop(void); |
| 43 | bool kthread_should_park(void); | ||
| 38 | bool kthread_freezable_should_stop(bool *was_frozen); | 44 | bool kthread_freezable_should_stop(bool *was_frozen); |
| 39 | void *kthread_data(struct task_struct *k); | 45 | void *kthread_data(struct task_struct *k); |
| 46 | int kthread_park(struct task_struct *k); | ||
| 47 | void kthread_unpark(struct task_struct *k); | ||
| 48 | void kthread_parkme(void); | ||
| 40 | 49 | ||
| 41 | int kthreadd(void *unused); | 50 | int kthreadd(void *unused); |
| 42 | extern struct task_struct *kthreadd_task; | 51 | extern struct task_struct *kthreadd_task; |
