From: Stephen Rothwell Date: Fri, 24 Aug 2012 04:50:03 +0000 (+1000) Subject: Merge remote-tracking branch 'rcu/rcu/next' X-Git-Tag: next-20120824~30 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=9b1eaa53deba3ee4a40df6fc893087dde9f1dc3e;p=karo-tx-linux.git Merge remote-tracking branch 'rcu/rcu/next' Conflicts: arch/Kconfig arch/x86/Kconfig include/linux/sched.h kernel/rcutree.h kernel/rcutree_plugin.h --- 9b1eaa53deba3ee4a40df6fc893087dde9f1dc3e diff --cc arch/Kconfig index 07db9299ea86,1c7c9beaa193..d5176b861e32 --- a/arch/Kconfig +++ b/arch/Kconfig @@@ -294,26 -274,14 +294,36 @@@ config SECCOMP_FILTE See Documentation/prctl/seccomp_filter.txt for details. +config HAVE_MOD_ARCH_SPECIFIC + bool + help + The arch uses struct mod_arch_specific to store data. Many arches + just need a simple module loader without arch specific data - those + should not enable this. + +config MODULES_USE_ELF_RELA + bool + help + Modules only use ELF RELA relocations. Modules with ELF REL + relocations will give an error. + +config MODULES_USE_ELF_REL + bool + help + Modules only use ELF REL relocations. Modules with ELF RELA + relocations will give an error. + +config HAVE_VIRT_CPU_ACCOUNTING + bool + + config HAVE_RCU_USER_QS + bool + help + Provide kernel entry/exit hooks necessary for userspace + RCU extended quiescent state. Syscalls need to be wrapped inside + rcu_user_exit()-rcu_user_enter() through the slow path using + TIF_NOHZ flag. Exceptions handlers must be wrapped as well. Irqs + are already protected inside rcu_irq_enter/rcu_irq_exit() but + preemption or signal handling on irq exit still need to be protected. + source "kernel/gcov/Kconfig" diff --cc arch/x86/Kconfig index f649a28919df,38dfcc2263cc..1aa157ab13d0 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@@ -99,8 -95,7 +99,9 @@@ config X8 select KTIME_SCALAR if X86_32 select GENERIC_STRNCPY_FROM_USER select GENERIC_STRNLEN_USER + select MODULES_USE_ELF_REL if X86_32 + select MODULES_USE_ELF_RELA if X86_64 + select HAVE_RCU_USER_QS if X86_64 config INSTRUCTION_DECODER def_bool (KPROBES || PERF_EVENTS || UPROBES) diff --cc include/linux/sched.h index f3eebc121ebc,a0949597ce97..c44f847657f0 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@@ -1885,13 -1879,14 +1885,21 @@@ static inline void rcu_copy_process(str #endif +static inline void tsk_restore_flags(struct task_struct *task, + unsigned long orig_flags, unsigned long flags) +{ + task->flags &= ~flags; + task->flags |= orig_flags & flags; +} + + static inline void rcu_switch(struct task_struct *prev, + struct task_struct *next) + { + #ifdef CONFIG_RCU_USER_QS + rcu_user_hooks_switch(prev, next); + #endif + } + #ifdef CONFIG_SMP extern void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask); diff --cc kernel/rcutree.h index 1224d4c05382,c2a3e7d596dc..77340697298f --- a/kernel/rcutree.h +++ b/kernel/rcutree.h @@@ -196,6 -200,13 +200,7 @@@ struct rcu_node /* Refused to boost: not sure why, though. */ /* This can happen due to race conditions. */ #endif /* #ifdef CONFIG_RCU_BOOST */ - struct task_struct *node_kthread_task; - /* kthread that takes care of this rcu_node */ - /* structure, for example, awakening the */ - /* per-CPU kthreads as needed. */ - unsigned int node_kthread_status; - /* State of node_kthread_task for tracing. */ + raw_spinlock_t fqslock ____cacheline_internodealigned_in_smp; } ____cacheline_internodealigned_in_smp; /* diff --cc kernel/rcutree_plugin.h index c1961aed1213,c3e3fc499788..8432034b2d09 --- a/kernel/rcutree_plugin.h +++ b/kernel/rcutree_plugin.h @@@ -25,7 -25,7 +25,8 @@@ */ #include +#include + #include #define RCU_KTHREAD_PRIO 1