Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull RCU updates from Ingo Molnar: "These are the main changes in this cycle: - Streamline RCU's use of per-CPU variables, shifting from "cpu" arguments to functions to "this_"-style per-CPU variable accessors. - signal-handling RCU updates. - real-time updates. - torture-test updates. - miscellaneous fixes. - documentation updates" * 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (34 commits) rcu: Fix FIXME in rcu_tasks_kthread() rcu: More info about potential deadlocks with rcu_read_unlock() rcu: Optimize cond_resched_rcu_qs() rcu: Add sparse check for RCU_INIT_POINTER() documentation: memory-barriers.txt: Correct example for reorderings documentation: Add atomic_long_t to atomic_ops.txt documentation: Additional restriction for control dependencies documentation: Document RCU self test boot params rcutorture: Fix rcu_torture_cbflood() memory leak rcutorture: Remove obsolete kversion param in kvm.sh rcutorture: Remove stale test configurations rcutorture: Enable RCU self test in configs rcutorture: Add early boot self tests torture: Run Linux-kernel binary out of results directory cpu: Avoid puts_pending overflow rcu: Remove "cpu" argument to rcu_cleanup_after_idle() rcu: Remove "cpu" argument to rcu_prepare_for_idle() rcu: Remove "cpu" argument to rcu_needs_cpu() rcu: Remove "cpu" argument to rcu_note_context_switch() rcu: Remove "cpu" argument to rcu_preempt_check_callbacks() ...
This commit is contained in:
Коммит
c30110608c
|
@ -36,7 +36,7 @@ o How can the updater tell when a grace period has completed
|
|||
executed in user mode, or executed in the idle loop, we can
|
||||
safely free up that item.
|
||||
|
||||
Preemptible variants of RCU (CONFIG_TREE_PREEMPT_RCU) get the
|
||||
Preemptible variants of RCU (CONFIG_PREEMPT_RCU) get the
|
||||
same effect, but require that the readers manipulate CPU-local
|
||||
counters. These counters allow limited types of blocking within
|
||||
RCU read-side critical sections. SRCU also uses CPU-local
|
||||
|
@ -81,7 +81,7 @@ o I hear that RCU is patented? What is with that?
|
|||
o I hear that RCU needs work in order to support realtime kernels?
|
||||
|
||||
This work is largely completed. Realtime-friendly RCU can be
|
||||
enabled via the CONFIG_TREE_PREEMPT_RCU kernel configuration
|
||||
enabled via the CONFIG_PREEMPT_RCU kernel configuration
|
||||
parameter. However, work is in progress for enabling priority
|
||||
boosting of preempted RCU read-side critical sections. This is
|
||||
needed if you have CPU-bound realtime threads.
|
||||
|
|
|
@ -26,12 +26,6 @@ CONFIG_RCU_CPU_STALL_TIMEOUT
|
|||
Stall-warning messages may be enabled and disabled completely via
|
||||
/sys/module/rcupdate/parameters/rcu_cpu_stall_suppress.
|
||||
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE
|
||||
|
||||
This kernel configuration parameter causes the stall warning to
|
||||
also dump the stacks of any tasks that are blocking the current
|
||||
RCU-preempt grace period.
|
||||
|
||||
CONFIG_RCU_CPU_STALL_INFO
|
||||
|
||||
This kernel configuration parameter causes the stall warning to
|
||||
|
@ -77,7 +71,7 @@ This message indicates that CPU 5 detected that it was causing a stall,
|
|||
and that the stall was affecting RCU-sched. This message will normally be
|
||||
followed by a stack dump of the offending CPU. On TREE_RCU kernel builds,
|
||||
RCU and RCU-sched are implemented by the same underlying mechanism,
|
||||
while on TREE_PREEMPT_RCU kernel builds, RCU is instead implemented
|
||||
while on PREEMPT_RCU kernel builds, RCU is instead implemented
|
||||
by rcu_preempt_state.
|
||||
|
||||
On the other hand, if the offending CPU fails to print out a stall-warning
|
||||
|
@ -89,7 +83,7 @@ INFO: rcu_bh_state detected stalls on CPUs/tasks: { 3 5 } (detected by 2, 2502 j
|
|||
This message indicates that CPU 2 detected that CPUs 3 and 5 were both
|
||||
causing stalls, and that the stall was affecting RCU-bh. This message
|
||||
will normally be followed by stack dumps for each CPU. Please note that
|
||||
TREE_PREEMPT_RCU builds can be stalled by tasks as well as by CPUs,
|
||||
PREEMPT_RCU builds can be stalled by tasks as well as by CPUs,
|
||||
and that the tasks will be indicated by PID, for example, "P3421".
|
||||
It is even possible for a rcu_preempt_state stall to be caused by both
|
||||
CPUs -and- tasks, in which case the offending CPUs and tasks will all
|
||||
|
@ -205,10 +199,10 @@ o A CPU-bound real-time task in a CONFIG_PREEMPT kernel, which might
|
|||
o A CPU-bound real-time task in a CONFIG_PREEMPT_RT kernel that
|
||||
is running at a higher priority than the RCU softirq threads.
|
||||
This will prevent RCU callbacks from ever being invoked,
|
||||
and in a CONFIG_TREE_PREEMPT_RCU kernel will further prevent
|
||||
and in a CONFIG_PREEMPT_RCU kernel will further prevent
|
||||
RCU grace periods from ever completing. Either way, the
|
||||
system will eventually run out of memory and hang. In the
|
||||
CONFIG_TREE_PREEMPT_RCU case, you might see stall-warning
|
||||
CONFIG_PREEMPT_RCU case, you might see stall-warning
|
||||
messages.
|
||||
|
||||
o A hardware or software issue shuts off the scheduler-clock
|
||||
|
|
|
@ -8,7 +8,7 @@ The following sections describe the debugfs files and formats, first
|
|||
for rcutree and next for rcutiny.
|
||||
|
||||
|
||||
CONFIG_TREE_RCU and CONFIG_TREE_PREEMPT_RCU debugfs Files and Formats
|
||||
CONFIG_TREE_RCU and CONFIG_PREEMPT_RCU debugfs Files and Formats
|
||||
|
||||
These implementations of RCU provide several debugfs directories under the
|
||||
top-level directory "rcu":
|
||||
|
@ -18,7 +18,7 @@ rcu/rcu_preempt
|
|||
rcu/rcu_sched
|
||||
|
||||
Each directory contains files for the corresponding flavor of RCU.
|
||||
Note that rcu/rcu_preempt is only present for CONFIG_TREE_PREEMPT_RCU.
|
||||
Note that rcu/rcu_preempt is only present for CONFIG_PREEMPT_RCU.
|
||||
For CONFIG_TREE_RCU, the RCU flavor maps onto the RCU-sched flavor,
|
||||
so that activity for both appears in rcu/rcu_sched.
|
||||
|
||||
|
|
|
@ -137,7 +137,7 @@ rcu_read_lock()
|
|||
Used by a reader to inform the reclaimer that the reader is
|
||||
entering an RCU read-side critical section. It is illegal
|
||||
to block while in an RCU read-side critical section, though
|
||||
kernels built with CONFIG_TREE_PREEMPT_RCU can preempt RCU
|
||||
kernels built with CONFIG_PREEMPT_RCU can preempt RCU
|
||||
read-side critical sections. Any RCU-protected data structure
|
||||
accessed during an RCU read-side critical section is guaranteed to
|
||||
remain unreclaimed for the full duration of that critical section.
|
||||
|
|
|
@ -7,12 +7,13 @@
|
|||
maintainers on how to implement atomic counter, bitops, and spinlock
|
||||
interfaces properly.
|
||||
|
||||
The atomic_t type should be defined as a signed integer.
|
||||
Also, it should be made opaque such that any kind of cast to a normal
|
||||
C integer type will fail. Something like the following should
|
||||
suffice:
|
||||
The atomic_t type should be defined as a signed integer and
|
||||
the atomic_long_t type as a signed long integer. Also, they should
|
||||
be made opaque such that any kind of cast to a normal C integer type
|
||||
will fail. Something like the following should suffice:
|
||||
|
||||
typedef struct { int counter; } atomic_t;
|
||||
typedef struct { long counter; } atomic_long_t;
|
||||
|
||||
Historically, counter has been declared volatile. This is now discouraged.
|
||||
See Documentation/volatile-considered-harmful.txt for the complete rationale.
|
||||
|
@ -37,6 +38,9 @@ initializer is used before runtime. If the initializer is used at runtime, a
|
|||
proper implicit or explicit read memory barrier is needed before reading the
|
||||
value with atomic_read from another thread.
|
||||
|
||||
As with all of the atomic_ interfaces, replace the leading "atomic_"
|
||||
with "atomic_long_" to operate on atomic_long_t.
|
||||
|
||||
The second interface can be used at runtime, as in:
|
||||
|
||||
struct foo { atomic_t counter; };
|
||||
|
|
|
@ -2940,6 +2940,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||
quiescent states. Units are jiffies, minimum
|
||||
value is one, and maximum value is HZ.
|
||||
|
||||
rcutree.kthread_prio= [KNL,BOOT]
|
||||
Set the SCHED_FIFO priority of the RCU
|
||||
per-CPU kthreads (rcuc/N). This value is also
|
||||
used for the priority of the RCU boost threads
|
||||
(rcub/N). Valid values are 1-99 and the default
|
||||
is 1 (the least-favored priority).
|
||||
|
||||
rcutree.rcu_nocb_leader_stride= [KNL]
|
||||
Set the number of NOCB kthread groups, which
|
||||
defaults to the square root of the number of
|
||||
|
@ -3089,6 +3096,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||
messages. Disable with a value less than or equal
|
||||
to zero.
|
||||
|
||||
rcupdate.rcu_self_test= [KNL]
|
||||
Run the RCU early boot self tests
|
||||
|
||||
rcupdate.rcu_self_test_bh= [KNL]
|
||||
Run the RCU bh early boot self tests
|
||||
|
||||
rcupdate.rcu_self_test_sched= [KNL]
|
||||
Run the RCU sched early boot self tests
|
||||
|
||||
rdinit= [KNL]
|
||||
Format: <full_path>
|
||||
Run specified binary instead of /init from the ramdisk,
|
||||
|
|
|
@ -121,22 +121,22 @@ For example, consider the following sequence of events:
|
|||
The set of accesses as seen by the memory system in the middle can be arranged
|
||||
in 24 different combinations:
|
||||
|
||||
STORE A=3, STORE B=4, x=LOAD A->3, y=LOAD B->4
|
||||
STORE A=3, STORE B=4, y=LOAD B->4, x=LOAD A->3
|
||||
STORE A=3, x=LOAD A->3, STORE B=4, y=LOAD B->4
|
||||
STORE A=3, x=LOAD A->3, y=LOAD B->2, STORE B=4
|
||||
STORE A=3, y=LOAD B->2, STORE B=4, x=LOAD A->3
|
||||
STORE A=3, y=LOAD B->2, x=LOAD A->3, STORE B=4
|
||||
STORE B=4, STORE A=3, x=LOAD A->3, y=LOAD B->4
|
||||
STORE A=3, STORE B=4, y=LOAD A->3, x=LOAD B->4
|
||||
STORE A=3, STORE B=4, x=LOAD B->4, y=LOAD A->3
|
||||
STORE A=3, y=LOAD A->3, STORE B=4, x=LOAD B->4
|
||||
STORE A=3, y=LOAD A->3, x=LOAD B->2, STORE B=4
|
||||
STORE A=3, x=LOAD B->2, STORE B=4, y=LOAD A->3
|
||||
STORE A=3, x=LOAD B->2, y=LOAD A->3, STORE B=4
|
||||
STORE B=4, STORE A=3, y=LOAD A->3, x=LOAD B->4
|
||||
STORE B=4, ...
|
||||
...
|
||||
|
||||
and can thus result in four different combinations of values:
|
||||
|
||||
x == 1, y == 2
|
||||
x == 1, y == 4
|
||||
x == 3, y == 2
|
||||
x == 3, y == 4
|
||||
x == 2, y == 1
|
||||
x == 2, y == 3
|
||||
x == 4, y == 1
|
||||
x == 4, y == 3
|
||||
|
||||
|
||||
Furthermore, the stores committed by a CPU to the memory system may not be
|
||||
|
@ -694,6 +694,24 @@ Please note once again that the stores to 'b' differ. If they were
|
|||
identical, as noted earlier, the compiler could pull this store outside
|
||||
of the 'if' statement.
|
||||
|
||||
You must also be careful not to rely too much on boolean short-circuit
|
||||
evaluation. Consider this example:
|
||||
|
||||
q = ACCESS_ONCE(a);
|
||||
if (a || 1 > 0)
|
||||
ACCESS_ONCE(b) = 1;
|
||||
|
||||
Because the second condition is always true, the compiler can transform
|
||||
this example as following, defeating control dependency:
|
||||
|
||||
q = ACCESS_ONCE(a);
|
||||
ACCESS_ONCE(b) = 1;
|
||||
|
||||
This example underscores the need to ensure that the compiler cannot
|
||||
out-guess your code. More generally, although ACCESS_ONCE() does force
|
||||
the compiler to actually emit code for a given load, it does not force
|
||||
the compiler to use the results.
|
||||
|
||||
Finally, control dependencies do -not- provide transitivity. This is
|
||||
demonstrated by two related examples, with the initial values of
|
||||
x and y both being zero:
|
||||
|
|
|
@ -102,7 +102,7 @@ extern struct group_info init_groups;
|
|||
#define INIT_IDS
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TREE_PREEMPT_RCU
|
||||
#ifdef CONFIG_PREEMPT_RCU
|
||||
#define INIT_TASK_RCU_TREE_PREEMPT() \
|
||||
.rcu_blocked_node = NULL,
|
||||
#else
|
||||
|
|
|
@ -57,7 +57,7 @@ enum rcutorture_type {
|
|||
INVALID_RCU_FLAVOR
|
||||
};
|
||||
|
||||
#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU)
|
||||
#if defined(CONFIG_TREE_RCU) || defined(CONFIG_PREEMPT_RCU)
|
||||
void rcutorture_get_gp_data(enum rcutorture_type test_type, int *flags,
|
||||
unsigned long *gpnum, unsigned long *completed);
|
||||
void rcutorture_record_test_transition(void);
|
||||
|
@ -260,7 +260,7 @@ static inline int rcu_preempt_depth(void)
|
|||
void rcu_init(void);
|
||||
void rcu_sched_qs(void);
|
||||
void rcu_bh_qs(void);
|
||||
void rcu_check_callbacks(int cpu, int user);
|
||||
void rcu_check_callbacks(int user);
|
||||
struct notifier_block;
|
||||
void rcu_idle_enter(void);
|
||||
void rcu_idle_exit(void);
|
||||
|
@ -348,8 +348,8 @@ extern struct srcu_struct tasks_rcu_exit_srcu;
|
|||
*/
|
||||
#define cond_resched_rcu_qs() \
|
||||
do { \
|
||||
rcu_note_voluntary_context_switch(current); \
|
||||
cond_resched(); \
|
||||
if (!cond_resched()) \
|
||||
rcu_note_voluntary_context_switch(current); \
|
||||
} while (0)
|
||||
|
||||
#if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_RCU_TRACE) || defined(CONFIG_SMP)
|
||||
|
@ -365,7 +365,7 @@ typedef void call_rcu_func_t(struct rcu_head *head,
|
|||
void (*func)(struct rcu_head *head));
|
||||
void wait_rcu_gp(call_rcu_func_t crf);
|
||||
|
||||
#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU)
|
||||
#if defined(CONFIG_TREE_RCU) || defined(CONFIG_PREEMPT_RCU)
|
||||
#include <linux/rcutree.h>
|
||||
#elif defined(CONFIG_TINY_RCU)
|
||||
#include <linux/rcutiny.h>
|
||||
|
@ -867,7 +867,7 @@ static inline void rcu_preempt_sleep_check(void)
|
|||
*
|
||||
* In non-preemptible RCU implementations (TREE_RCU and TINY_RCU),
|
||||
* it is illegal to block while in an RCU read-side critical section.
|
||||
* In preemptible RCU implementations (TREE_PREEMPT_RCU) in CONFIG_PREEMPT
|
||||
* In preemptible RCU implementations (PREEMPT_RCU) in CONFIG_PREEMPT
|
||||
* kernel builds, RCU read-side critical sections may be preempted,
|
||||
* but explicit blocking is illegal. Finally, in preemptible RCU
|
||||
* implementations in real-time (with -rt patchset) kernel builds, RCU
|
||||
|
@ -902,7 +902,9 @@ static inline void rcu_read_lock(void)
|
|||
* Unfortunately, this function acquires the scheduler's runqueue and
|
||||
* priority-inheritance spinlocks. This means that deadlock could result
|
||||
* if the caller of rcu_read_unlock() already holds one of these locks or
|
||||
* any lock that is ever acquired while holding them.
|
||||
* any lock that is ever acquired while holding them; or any lock which
|
||||
* can be taken from interrupt context because rcu_boost()->rt_mutex_lock()
|
||||
* does not disable irqs while taking ->wait_lock.
|
||||
*
|
||||
* That said, RCU readers are never priority boosted unless they were
|
||||
* preempted. Therefore, one way to avoid deadlock is to make sure
|
||||
|
@ -1062,6 +1064,7 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
|
|||
*/
|
||||
#define RCU_INIT_POINTER(p, v) \
|
||||
do { \
|
||||
rcu_dereference_sparse(p, __rcu); \
|
||||
p = RCU_INITIALIZER(v); \
|
||||
} while (0)
|
||||
|
||||
|
@ -1118,7 +1121,7 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
|
|||
__kfree_rcu(&((ptr)->rcu_head), offsetof(typeof(*(ptr)), rcu_head))
|
||||
|
||||
#if defined(CONFIG_TINY_RCU) || defined(CONFIG_RCU_NOCB_CPU_ALL)
|
||||
static inline int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies)
|
||||
static inline int rcu_needs_cpu(unsigned long *delta_jiffies)
|
||||
{
|
||||
*delta_jiffies = ULONG_MAX;
|
||||
return 0;
|
||||
|
|
|
@ -78,7 +78,7 @@ static inline void kfree_call_rcu(struct rcu_head *head,
|
|||
call_rcu(head, func);
|
||||
}
|
||||
|
||||
static inline void rcu_note_context_switch(int cpu)
|
||||
static inline void rcu_note_context_switch(void)
|
||||
{
|
||||
rcu_sched_qs();
|
||||
}
|
||||
|
|
|
@ -30,9 +30,9 @@
|
|||
#ifndef __LINUX_RCUTREE_H
|
||||
#define __LINUX_RCUTREE_H
|
||||
|
||||
void rcu_note_context_switch(int cpu);
|
||||
void rcu_note_context_switch(void);
|
||||
#ifndef CONFIG_RCU_NOCB_CPU_ALL
|
||||
int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies);
|
||||
int rcu_needs_cpu(unsigned long *delta_jiffies);
|
||||
#endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */
|
||||
void rcu_cpu_stall_reset(void);
|
||||
|
||||
|
@ -43,7 +43,7 @@ void rcu_cpu_stall_reset(void);
|
|||
*/
|
||||
static inline void rcu_virt_note_context_switch(int cpu)
|
||||
{
|
||||
rcu_note_context_switch(cpu);
|
||||
rcu_note_context_switch();
|
||||
}
|
||||
|
||||
void synchronize_rcu_bh(void);
|
||||
|
|
|
@ -1278,9 +1278,9 @@ struct task_struct {
|
|||
union rcu_special rcu_read_unlock_special;
|
||||
struct list_head rcu_node_entry;
|
||||
#endif /* #ifdef CONFIG_PREEMPT_RCU */
|
||||
#ifdef CONFIG_TREE_PREEMPT_RCU
|
||||
#ifdef CONFIG_PREEMPT_RCU
|
||||
struct rcu_node *rcu_blocked_node;
|
||||
#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
|
||||
#endif /* #ifdef CONFIG_PREEMPT_RCU */
|
||||
#ifdef CONFIG_TASKS_RCU
|
||||
unsigned long rcu_tasks_nvcsw;
|
||||
bool rcu_tasks_holdout;
|
||||
|
|
|
@ -36,7 +36,7 @@ TRACE_EVENT(rcu_utilization,
|
|||
|
||||
#ifdef CONFIG_RCU_TRACE
|
||||
|
||||
#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU)
|
||||
#if defined(CONFIG_TREE_RCU) || defined(CONFIG_PREEMPT_RCU)
|
||||
|
||||
/*
|
||||
* Tracepoint for grace-period events. Takes a string identifying the
|
||||
|
@ -345,7 +345,7 @@ TRACE_EVENT(rcu_fqs,
|
|||
__entry->cpu, __entry->qsevent)
|
||||
);
|
||||
|
||||
#endif /* #if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) */
|
||||
#endif /* #if defined(CONFIG_TREE_RCU) || defined(CONFIG_PREEMPT_RCU) */
|
||||
|
||||
/*
|
||||
* Tracepoint for dyntick-idle entry/exit events. These take a string
|
||||
|
|
49
init/Kconfig
49
init/Kconfig
|
@ -477,7 +477,7 @@ config TREE_RCU
|
|||
thousands of CPUs. It also scales down nicely to
|
||||
smaller systems.
|
||||
|
||||
config TREE_PREEMPT_RCU
|
||||
config PREEMPT_RCU
|
||||
bool "Preemptible tree-based hierarchical RCU"
|
||||
depends on PREEMPT
|
||||
select IRQ_WORK
|
||||
|
@ -501,12 +501,6 @@ config TINY_RCU
|
|||
|
||||
endchoice
|
||||
|
||||
config PREEMPT_RCU
|
||||
def_bool TREE_PREEMPT_RCU
|
||||
help
|
||||
This option enables preemptible-RCU code that is common between
|
||||
TREE_PREEMPT_RCU and, in the old days, TINY_PREEMPT_RCU.
|
||||
|
||||
config TASKS_RCU
|
||||
bool "Task_based RCU implementation using voluntary context switch"
|
||||
default n
|
||||
|
@ -518,7 +512,7 @@ config TASKS_RCU
|
|||
If unsure, say N.
|
||||
|
||||
config RCU_STALL_COMMON
|
||||
def_bool ( TREE_RCU || TREE_PREEMPT_RCU || RCU_TRACE )
|
||||
def_bool ( TREE_RCU || PREEMPT_RCU || RCU_TRACE )
|
||||
help
|
||||
This option enables RCU CPU stall code that is common between
|
||||
the TINY and TREE variants of RCU. The purpose is to allow
|
||||
|
@ -576,7 +570,7 @@ config RCU_FANOUT
|
|||
int "Tree-based hierarchical RCU fanout value"
|
||||
range 2 64 if 64BIT
|
||||
range 2 32 if !64BIT
|
||||
depends on TREE_RCU || TREE_PREEMPT_RCU
|
||||
depends on TREE_RCU || PREEMPT_RCU
|
||||
default 64 if 64BIT
|
||||
default 32 if !64BIT
|
||||
help
|
||||
|
@ -596,7 +590,7 @@ config RCU_FANOUT_LEAF
|
|||
int "Tree-based hierarchical RCU leaf-level fanout value"
|
||||
range 2 RCU_FANOUT if 64BIT
|
||||
range 2 RCU_FANOUT if !64BIT
|
||||
depends on TREE_RCU || TREE_PREEMPT_RCU
|
||||
depends on TREE_RCU || PREEMPT_RCU
|
||||
default 16
|
||||
help
|
||||
This option controls the leaf-level fanout of hierarchical
|
||||
|
@ -621,7 +615,7 @@ config RCU_FANOUT_LEAF
|
|||
|
||||
config RCU_FANOUT_EXACT
|
||||
bool "Disable tree-based hierarchical RCU auto-balancing"
|
||||
depends on TREE_RCU || TREE_PREEMPT_RCU
|
||||
depends on TREE_RCU || PREEMPT_RCU
|
||||
default n
|
||||
help
|
||||
This option forces use of the exact RCU_FANOUT value specified,
|
||||
|
@ -652,11 +646,11 @@ config RCU_FAST_NO_HZ
|
|||
Say N if you are unsure.
|
||||
|
||||
config TREE_RCU_TRACE
|
||||
def_bool RCU_TRACE && ( TREE_RCU || TREE_PREEMPT_RCU )
|
||||
def_bool RCU_TRACE && ( TREE_RCU || PREEMPT_RCU )
|
||||
select DEBUG_FS
|
||||
help
|
||||
This option provides tracing for the TREE_RCU and
|
||||
TREE_PREEMPT_RCU implementations, permitting Makefile to
|
||||
PREEMPT_RCU implementations, permitting Makefile to
|
||||
trivially select kernel/rcutree_trace.c.
|
||||
|
||||
config RCU_BOOST
|
||||
|
@ -672,30 +666,31 @@ config RCU_BOOST
|
|||
Say Y here if you are working with real-time apps or heavy loads
|
||||
Say N here if you are unsure.
|
||||
|
||||
config RCU_BOOST_PRIO
|
||||
int "Real-time priority to boost RCU readers to"
|
||||
config RCU_KTHREAD_PRIO
|
||||
int "Real-time priority to use for RCU worker threads"
|
||||
range 1 99
|
||||
depends on RCU_BOOST
|
||||
default 1
|
||||
help
|
||||
This option specifies the real-time priority to which long-term
|
||||
preempted RCU readers are to be boosted. If you are working
|
||||
with a real-time application that has one or more CPU-bound
|
||||
threads running at a real-time priority level, you should set
|
||||
RCU_BOOST_PRIO to a priority higher then the highest-priority
|
||||
real-time CPU-bound thread. The default RCU_BOOST_PRIO value
|
||||
of 1 is appropriate in the common case, which is real-time
|
||||
This option specifies the SCHED_FIFO priority value that will be
|
||||
assigned to the rcuc/n and rcub/n threads and is also the value
|
||||
used for RCU_BOOST (if enabled). If you are working with a
|
||||
real-time application that has one or more CPU-bound threads
|
||||
running at a real-time priority level, you should set
|
||||
RCU_KTHREAD_PRIO to a priority higher than the highest-priority
|
||||
real-time CPU-bound application thread. The default RCU_KTHREAD_PRIO
|
||||
value of 1 is appropriate in the common case, which is real-time
|
||||
applications that do not have any CPU-bound threads.
|
||||
|
||||
Some real-time applications might not have a single real-time
|
||||
thread that saturates a given CPU, but instead might have
|
||||
multiple real-time threads that, taken together, fully utilize
|
||||
that CPU. In this case, you should set RCU_BOOST_PRIO to
|
||||
that CPU. In this case, you should set RCU_KTHREAD_PRIO to
|
||||
a priority higher than the lowest-priority thread that is
|
||||
conspiring to prevent the CPU from running any non-real-time
|
||||
tasks. For example, if one thread at priority 10 and another
|
||||
thread at priority 5 are between themselves fully consuming
|
||||
the CPU time on a given CPU, then RCU_BOOST_PRIO should be
|
||||
the CPU time on a given CPU, then RCU_KTHREAD_PRIO should be
|
||||
set to priority 6 or higher.
|
||||
|
||||
Specify the real-time priority, or take the default if unsure.
|
||||
|
@ -715,7 +710,7 @@ config RCU_BOOST_DELAY
|
|||
|
||||
config RCU_NOCB_CPU
|
||||
bool "Offload RCU callback processing from boot-selected CPUs"
|
||||
depends on TREE_RCU || TREE_PREEMPT_RCU
|
||||
depends on TREE_RCU || PREEMPT_RCU
|
||||
default n
|
||||
help
|
||||
Use this option to reduce OS jitter for aggressive HPC or
|
||||
|
@ -739,6 +734,7 @@ config RCU_NOCB_CPU
|
|||
choice
|
||||
prompt "Build-forced no-CBs CPUs"
|
||||
default RCU_NOCB_CPU_NONE
|
||||
depends on RCU_NOCB_CPU
|
||||
help
|
||||
This option allows no-CBs CPUs (whose RCU callbacks are invoked
|
||||
from kthreads rather than from softirq context) to be specified
|
||||
|
@ -747,7 +743,6 @@ choice
|
|||
|
||||
config RCU_NOCB_CPU_NONE
|
||||
bool "No build_forced no-CBs CPUs"
|
||||
depends on RCU_NOCB_CPU
|
||||
help
|
||||
This option does not force any of the CPUs to be no-CBs CPUs.
|
||||
Only CPUs designated by the rcu_nocbs= boot parameter will be
|
||||
|
@ -761,7 +756,6 @@ config RCU_NOCB_CPU_NONE
|
|||
|
||||
config RCU_NOCB_CPU_ZERO
|
||||
bool "CPU 0 is a build_forced no-CBs CPU"
|
||||
depends on RCU_NOCB_CPU
|
||||
help
|
||||
This option forces CPU 0 to be a no-CBs CPU, so that its RCU
|
||||
callbacks are invoked by a per-CPU kthread whose name begins
|
||||
|
@ -776,7 +770,6 @@ config RCU_NOCB_CPU_ZERO
|
|||
|
||||
config RCU_NOCB_CPU_ALL
|
||||
bool "All CPUs are build_forced no-CBs CPUs"
|
||||
depends on RCU_NOCB_CPU
|
||||
help
|
||||
This option forces all CPUs to be no-CBs CPUs. The rcu_nocbs=
|
||||
boot parameter will be ignored. All CPUs' RCU callbacks will
|
||||
|
|
19
kernel/cpu.c
19
kernel/cpu.c
|
@ -86,6 +86,16 @@ static struct {
|
|||
#define cpuhp_lock_acquire() lock_map_acquire(&cpu_hotplug.dep_map)
|
||||
#define cpuhp_lock_release() lock_map_release(&cpu_hotplug.dep_map)
|
||||
|
||||
static void apply_puts_pending(int max)
|
||||
{
|
||||
int delta;
|
||||
|
||||
if (atomic_read(&cpu_hotplug.puts_pending) >= max) {
|
||||
delta = atomic_xchg(&cpu_hotplug.puts_pending, 0);
|
||||
cpu_hotplug.refcount -= delta;
|
||||
}
|
||||
}
|
||||
|
||||
void get_online_cpus(void)
|
||||
{
|
||||
might_sleep();
|
||||
|
@ -93,6 +103,7 @@ void get_online_cpus(void)
|
|||
return;
|
||||
cpuhp_lock_acquire_read();
|
||||
mutex_lock(&cpu_hotplug.lock);
|
||||
apply_puts_pending(65536);
|
||||
cpu_hotplug.refcount++;
|
||||
mutex_unlock(&cpu_hotplug.lock);
|
||||
}
|
||||
|
@ -105,6 +116,7 @@ bool try_get_online_cpus(void)
|
|||
if (!mutex_trylock(&cpu_hotplug.lock))
|
||||
return false;
|
||||
cpuhp_lock_acquire_tryread();
|
||||
apply_puts_pending(65536);
|
||||
cpu_hotplug.refcount++;
|
||||
mutex_unlock(&cpu_hotplug.lock);
|
||||
return true;
|
||||
|
@ -161,12 +173,7 @@ void cpu_hotplug_begin(void)
|
|||
cpuhp_lock_acquire();
|
||||
for (;;) {
|
||||
mutex_lock(&cpu_hotplug.lock);
|
||||
if (atomic_read(&cpu_hotplug.puts_pending)) {
|
||||
int delta;
|
||||
|
||||
delta = atomic_xchg(&cpu_hotplug.puts_pending, 0);
|
||||
cpu_hotplug.refcount -= delta;
|
||||
}
|
||||
apply_puts_pending(1);
|
||||
if (likely(!cpu_hotplug.refcount))
|
||||
break;
|
||||
__set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
|
|
|
@ -1022,11 +1022,14 @@ void __cleanup_sighand(struct sighand_struct *sighand)
|
|||
{
|
||||
if (atomic_dec_and_test(&sighand->count)) {
|
||||
signalfd_cleanup(sighand);
|
||||
/*
|
||||
* sighand_cachep is SLAB_DESTROY_BY_RCU so we can free it
|
||||
* without an RCU grace period, see __lock_task_sighand().
|
||||
*/
|
||||
kmem_cache_free(sighand_cachep, sighand);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Initialize POSIX timer handling for a thread group.
|
||||
*/
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
obj-y += update.o srcu.o
|
||||
obj-$(CONFIG_RCU_TORTURE_TEST) += rcutorture.o
|
||||
obj-$(CONFIG_TREE_RCU) += tree.o
|
||||
obj-$(CONFIG_TREE_PREEMPT_RCU) += tree.o
|
||||
obj-$(CONFIG_PREEMPT_RCU) += tree.o
|
||||
obj-$(CONFIG_TREE_RCU_TRACE) += tree_trace.o
|
||||
obj-$(CONFIG_TINY_RCU) += tiny.o
|
||||
|
|
|
@ -135,4 +135,6 @@ int rcu_jiffies_till_stall_check(void);
|
|||
*/
|
||||
#define TPS(x) tracepoint_string(x)
|
||||
|
||||
void rcu_early_boot_tests(void);
|
||||
|
||||
#endif /* __LINUX_RCU_H */
|
||||
|
|
|
@ -812,6 +812,7 @@ rcu_torture_cbflood(void *arg)
|
|||
cur_ops->cb_barrier();
|
||||
stutter_wait("rcu_torture_cbflood");
|
||||
} while (!torture_must_stop());
|
||||
vfree(rhp);
|
||||
torture_kthread_stopping("rcu_torture_cbflood");
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -247,7 +247,7 @@ void rcu_bh_qs(void)
|
|||
* be called from hardirq context. It is normally called from the
|
||||
* scheduling-clock interrupt.
|
||||
*/
|
||||
void rcu_check_callbacks(int cpu, int user)
|
||||
void rcu_check_callbacks(int user)
|
||||
{
|
||||
RCU_TRACE(check_cpu_stalls());
|
||||
if (user || rcu_is_cpu_rrupt_from_idle())
|
||||
|
@ -380,7 +380,9 @@ void call_rcu_bh(struct rcu_head *head, void (*func)(struct rcu_head *rcu))
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(call_rcu_bh);
|
||||
|
||||
void rcu_init(void)
|
||||
void __init rcu_init(void)
|
||||
{
|
||||
open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);
|
||||
|
||||
rcu_early_boot_tests();
|
||||
}
|
||||
|
|
|
@ -105,7 +105,7 @@ struct rcu_state sname##_state = { \
|
|||
.name = RCU_STATE_NAME(sname), \
|
||||
.abbr = sabbr, \
|
||||
}; \
|
||||
DEFINE_PER_CPU(struct rcu_data, sname##_data)
|
||||
DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_data, sname##_data)
|
||||
|
||||
RCU_STATE_INITIALIZER(rcu_sched, 's', call_rcu_sched);
|
||||
RCU_STATE_INITIALIZER(rcu_bh, 'b', call_rcu_bh);
|
||||
|
@ -152,19 +152,6 @@ EXPORT_SYMBOL_GPL(rcu_scheduler_active);
|
|||
*/
|
||||
static int rcu_scheduler_fully_active __read_mostly;
|
||||
|
||||
#ifdef CONFIG_RCU_BOOST
|
||||
|
||||
/*
|
||||
* Control variables for per-CPU and per-rcu_node kthreads. These
|
||||
* handle all flavors of RCU.
|
||||
*/
|
||||
static DEFINE_PER_CPU(struct task_struct *, rcu_cpu_kthread_task);
|
||||
DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_status);
|
||||
DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_loops);
|
||||
DEFINE_PER_CPU(char, rcu_cpu_has_work);
|
||||
|
||||
#endif /* #ifdef CONFIG_RCU_BOOST */
|
||||
|
||||
static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu);
|
||||
static void invoke_rcu_core(void);
|
||||
static void invoke_rcu_callbacks(struct rcu_state *rsp, struct rcu_data *rdp);
|
||||
|
@ -286,11 +273,11 @@ static void rcu_momentary_dyntick_idle(void)
|
|||
* and requires special handling for preemptible RCU.
|
||||
* The caller must have disabled preemption.
|
||||
*/
|
||||
void rcu_note_context_switch(int cpu)
|
||||
void rcu_note_context_switch(void)
|
||||
{
|
||||
trace_rcu_utilization(TPS("Start context switch"));
|
||||
rcu_sched_qs();
|
||||
rcu_preempt_note_context_switch(cpu);
|
||||
rcu_preempt_note_context_switch();
|
||||
if (unlikely(raw_cpu_read(rcu_sched_qs_mask)))
|
||||
rcu_momentary_dyntick_idle();
|
||||
trace_rcu_utilization(TPS("End context switch"));
|
||||
|
@ -325,7 +312,7 @@ static void force_qs_rnp(struct rcu_state *rsp,
|
|||
unsigned long *maxj),
|
||||
bool *isidle, unsigned long *maxj);
|
||||
static void force_quiescent_state(struct rcu_state *rsp);
|
||||
static int rcu_pending(int cpu);
|
||||
static int rcu_pending(void);
|
||||
|
||||
/*
|
||||
* Return the number of RCU-sched batches processed thus far for debug & stats.
|
||||
|
@ -510,11 +497,11 @@ cpu_needs_another_gp(struct rcu_state *rsp, struct rcu_data *rdp)
|
|||
* we really have entered idle, and must do the appropriate accounting.
|
||||
* The caller must have disabled interrupts.
|
||||
*/
|
||||
static void rcu_eqs_enter_common(struct rcu_dynticks *rdtp, long long oldval,
|
||||
bool user)
|
||||
static void rcu_eqs_enter_common(long long oldval, bool user)
|
||||
{
|
||||
struct rcu_state *rsp;
|
||||
struct rcu_data *rdp;
|
||||
struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks);
|
||||
|
||||
trace_rcu_dyntick(TPS("Start"), oldval, rdtp->dynticks_nesting);
|
||||
if (!user && !is_idle_task(current)) {
|
||||
|
@ -531,7 +518,7 @@ static void rcu_eqs_enter_common(struct rcu_dynticks *rdtp, long long oldval,
|
|||
rdp = this_cpu_ptr(rsp->rda);
|
||||
do_nocb_deferred_wakeup(rdp);
|
||||
}
|
||||
rcu_prepare_for_idle(smp_processor_id());
|
||||
rcu_prepare_for_idle();
|
||||
/* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */
|
||||
smp_mb__before_atomic(); /* See above. */
|
||||
atomic_inc(&rdtp->dynticks);
|
||||
|
@ -565,7 +552,7 @@ static void rcu_eqs_enter(bool user)
|
|||
WARN_ON_ONCE((oldval & DYNTICK_TASK_NEST_MASK) == 0);
|
||||
if ((oldval & DYNTICK_TASK_NEST_MASK) == DYNTICK_TASK_NEST_VALUE) {
|
||||
rdtp->dynticks_nesting = 0;
|
||||
rcu_eqs_enter_common(rdtp, oldval, user);
|
||||
rcu_eqs_enter_common(oldval, user);
|
||||
} else {
|
||||
rdtp->dynticks_nesting -= DYNTICK_TASK_NEST_VALUE;
|
||||
}
|
||||
|
@ -589,7 +576,7 @@ void rcu_idle_enter(void)
|
|||
|
||||
local_irq_save(flags);
|
||||
rcu_eqs_enter(false);
|
||||
rcu_sysidle_enter(this_cpu_ptr(&rcu_dynticks), 0);
|
||||
rcu_sysidle_enter(0);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rcu_idle_enter);
|
||||
|
@ -639,8 +626,8 @@ void rcu_irq_exit(void)
|
|||
if (rdtp->dynticks_nesting)
|
||||
trace_rcu_dyntick(TPS("--="), oldval, rdtp->dynticks_nesting);
|
||||
else
|
||||
rcu_eqs_enter_common(rdtp, oldval, true);
|
||||
rcu_sysidle_enter(rdtp, 1);
|
||||
rcu_eqs_enter_common(oldval, true);
|
||||
rcu_sysidle_enter(1);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
|
@ -651,16 +638,17 @@ void rcu_irq_exit(void)
|
|||
* we really have exited idle, and must do the appropriate accounting.
|
||||
* The caller must have disabled interrupts.
|
||||
*/
|
||||
static void rcu_eqs_exit_common(struct rcu_dynticks *rdtp, long long oldval,
|
||||
int user)
|
||||
static void rcu_eqs_exit_common(long long oldval, int user)
|
||||
{
|
||||
struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks);
|
||||
|
||||
rcu_dynticks_task_exit();
|
||||
smp_mb__before_atomic(); /* Force ordering w/previous sojourn. */
|
||||
atomic_inc(&rdtp->dynticks);
|
||||
/* CPUs seeing atomic_inc() must see later RCU read-side crit sects */
|
||||
smp_mb__after_atomic(); /* See above. */
|
||||
WARN_ON_ONCE(!(atomic_read(&rdtp->dynticks) & 0x1));
|
||||
rcu_cleanup_after_idle(smp_processor_id());
|
||||
rcu_cleanup_after_idle();
|
||||
trace_rcu_dyntick(TPS("End"), oldval, rdtp->dynticks_nesting);
|
||||
if (!user && !is_idle_task(current)) {
|
||||
struct task_struct *idle __maybe_unused =
|
||||
|
@ -691,7 +679,7 @@ static void rcu_eqs_exit(bool user)
|
|||
rdtp->dynticks_nesting += DYNTICK_TASK_NEST_VALUE;
|
||||
} else {
|
||||
rdtp->dynticks_nesting = DYNTICK_TASK_EXIT_IDLE;
|
||||
rcu_eqs_exit_common(rdtp, oldval, user);
|
||||
rcu_eqs_exit_common(oldval, user);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -712,7 +700,7 @@ void rcu_idle_exit(void)
|
|||
|
||||
local_irq_save(flags);
|
||||
rcu_eqs_exit(false);
|
||||
rcu_sysidle_exit(this_cpu_ptr(&rcu_dynticks), 0);
|
||||
rcu_sysidle_exit(0);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rcu_idle_exit);
|
||||
|
@ -763,8 +751,8 @@ void rcu_irq_enter(void)
|
|||
if (oldval)
|
||||
trace_rcu_dyntick(TPS("++="), oldval, rdtp->dynticks_nesting);
|
||||
else
|
||||
rcu_eqs_exit_common(rdtp, oldval, true);
|
||||
rcu_sysidle_exit(rdtp, 1);
|
||||
rcu_eqs_exit_common(oldval, true);
|
||||
rcu_sysidle_exit(1);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
|
@ -2387,7 +2375,7 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp)
|
|||
* invoked from the scheduling-clock interrupt. If rcu_pending returns
|
||||
* false, there is no point in invoking rcu_check_callbacks().
|
||||
*/
|
||||
void rcu_check_callbacks(int cpu, int user)
|
||||
void rcu_check_callbacks(int user)
|
||||
{
|
||||
trace_rcu_utilization(TPS("Start scheduler-tick"));
|
||||
increment_cpu_stall_ticks();
|
||||
|
@ -2419,8 +2407,8 @@ void rcu_check_callbacks(int cpu, int user)
|
|||
|
||||
rcu_bh_qs();
|
||||
}
|
||||
rcu_preempt_check_callbacks(cpu);
|
||||
if (rcu_pending(cpu))
|
||||
rcu_preempt_check_callbacks();
|
||||
if (rcu_pending())
|
||||
invoke_rcu_core();
|
||||
if (user)
|
||||
rcu_note_voluntary_context_switch(current);
|
||||
|
@ -2963,6 +2951,9 @@ static int synchronize_sched_expedited_cpu_stop(void *data)
|
|||
*/
|
||||
void synchronize_sched_expedited(void)
|
||||
{
|
||||
cpumask_var_t cm;
|
||||
bool cma = false;
|
||||
int cpu;
|
||||
long firstsnap, s, snap;
|
||||
int trycount = 0;
|
||||
struct rcu_state *rsp = &rcu_sched_state;
|
||||
|
@ -2997,11 +2988,26 @@ void synchronize_sched_expedited(void)
|
|||
}
|
||||
WARN_ON_ONCE(cpu_is_offline(raw_smp_processor_id()));
|
||||
|
||||
/* Offline CPUs, idle CPUs, and any CPU we run on are quiescent. */
|
||||
cma = zalloc_cpumask_var(&cm, GFP_KERNEL);
|
||||
if (cma) {
|
||||
cpumask_copy(cm, cpu_online_mask);
|
||||
cpumask_clear_cpu(raw_smp_processor_id(), cm);
|
||||
for_each_cpu(cpu, cm) {
|
||||
struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu);
|
||||
|
||||
if (!(atomic_add_return(0, &rdtp->dynticks) & 0x1))
|
||||
cpumask_clear_cpu(cpu, cm);
|
||||
}
|
||||
if (cpumask_weight(cm) == 0)
|
||||
goto all_cpus_idle;
|
||||
}
|
||||
|
||||
/*
|
||||
* Each pass through the following loop attempts to force a
|
||||
* context switch on each CPU.
|
||||
*/
|
||||
while (try_stop_cpus(cpu_online_mask,
|
||||
while (try_stop_cpus(cma ? cm : cpu_online_mask,
|
||||
synchronize_sched_expedited_cpu_stop,
|
||||
NULL) == -EAGAIN) {
|
||||
put_online_cpus();
|
||||
|
@ -3013,6 +3019,7 @@ void synchronize_sched_expedited(void)
|
|||
/* ensure test happens before caller kfree */
|
||||
smp_mb__before_atomic(); /* ^^^ */
|
||||
atomic_long_inc(&rsp->expedited_workdone1);
|
||||
free_cpumask_var(cm);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3022,6 +3029,7 @@ void synchronize_sched_expedited(void)
|
|||
} else {
|
||||
wait_rcu_gp(call_rcu_sched);
|
||||
atomic_long_inc(&rsp->expedited_normal);
|
||||
free_cpumask_var(cm);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3031,6 +3039,7 @@ void synchronize_sched_expedited(void)
|
|||
/* ensure test happens before caller kfree */
|
||||
smp_mb__before_atomic(); /* ^^^ */
|
||||
atomic_long_inc(&rsp->expedited_workdone2);
|
||||
free_cpumask_var(cm);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3045,6 +3054,7 @@ void synchronize_sched_expedited(void)
|
|||
/* CPU hotplug operation in flight, use normal GP. */
|
||||
wait_rcu_gp(call_rcu_sched);
|
||||
atomic_long_inc(&rsp->expedited_normal);
|
||||
free_cpumask_var(cm);
|
||||
return;
|
||||
}
|
||||
snap = atomic_long_read(&rsp->expedited_start);
|
||||
|
@ -3052,6 +3062,9 @@ void synchronize_sched_expedited(void)
|
|||
}
|
||||
atomic_long_inc(&rsp->expedited_stoppedcpus);
|
||||
|
||||
all_cpus_idle:
|
||||
free_cpumask_var(cm);
|
||||
|
||||
/*
|
||||
* Everyone up to our most recent fetch is covered by our grace
|
||||
* period. Update the counter, but only if our work is still
|
||||
|
@ -3143,12 +3156,12 @@ static int __rcu_pending(struct rcu_state *rsp, struct rcu_data *rdp)
|
|||
* by the current CPU, returning 1 if so. This function is part of the
|
||||
* RCU implementation; it is -not- an exported member of the RCU API.
|
||||
*/
|
||||
static int rcu_pending(int cpu)
|
||||
static int rcu_pending(void)
|
||||
{
|
||||
struct rcu_state *rsp;
|
||||
|
||||
for_each_rcu_flavor(rsp)
|
||||
if (__rcu_pending(rsp, per_cpu_ptr(rsp->rda, cpu)))
|
||||
if (__rcu_pending(rsp, this_cpu_ptr(rsp->rda)))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
@ -3158,7 +3171,7 @@ static int rcu_pending(int cpu)
|
|||
* non-NULL, store an indication of whether all callbacks are lazy.
|
||||
* (If there are no callbacks, all of them are deemed to be lazy.)
|
||||
*/
|
||||
static int __maybe_unused rcu_cpu_has_callbacks(int cpu, bool *all_lazy)
|
||||
static int __maybe_unused rcu_cpu_has_callbacks(bool *all_lazy)
|
||||
{
|
||||
bool al = true;
|
||||
bool hc = false;
|
||||
|
@ -3166,7 +3179,7 @@ static int __maybe_unused rcu_cpu_has_callbacks(int cpu, bool *all_lazy)
|
|||
struct rcu_state *rsp;
|
||||
|
||||
for_each_rcu_flavor(rsp) {
|
||||
rdp = per_cpu_ptr(rsp->rda, cpu);
|
||||
rdp = this_cpu_ptr(rsp->rda);
|
||||
if (!rdp->nxtlist)
|
||||
continue;
|
||||
hc = true;
|
||||
|
@ -3485,8 +3498,10 @@ static int rcu_cpu_notify(struct notifier_block *self,
|
|||
case CPU_DEAD_FROZEN:
|
||||
case CPU_UP_CANCELED:
|
||||
case CPU_UP_CANCELED_FROZEN:
|
||||
for_each_rcu_flavor(rsp)
|
||||
for_each_rcu_flavor(rsp) {
|
||||
rcu_cleanup_dead_cpu(cpu, rsp);
|
||||
do_nocb_deferred_wakeup(per_cpu_ptr(rsp->rda, cpu));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -3766,6 +3781,8 @@ void __init rcu_init(void)
|
|||
pm_notifier(rcu_pm_notify, 0);
|
||||
for_each_online_cpu(cpu)
|
||||
rcu_cpu_notify(NULL, CPU_UP_PREPARE, (void *)(long)cpu);
|
||||
|
||||
rcu_early_boot_tests();
|
||||
}
|
||||
|
||||
#include "tree_plugin.h"
|
||||
|
|
|
@ -139,7 +139,7 @@ struct rcu_node {
|
|||
unsigned long expmask; /* Groups that have ->blkd_tasks */
|
||||
/* elements that need to drain to allow the */
|
||||
/* current expedited grace period to */
|
||||
/* complete (only for TREE_PREEMPT_RCU). */
|
||||
/* complete (only for PREEMPT_RCU). */
|
||||
unsigned long qsmaskinit;
|
||||
/* Per-GP initial value for qsmask & expmask. */
|
||||
unsigned long grpmask; /* Mask to apply to parent qsmask. */
|
||||
|
@ -530,10 +530,10 @@ DECLARE_PER_CPU(struct rcu_data, rcu_sched_data);
|
|||
extern struct rcu_state rcu_bh_state;
|
||||
DECLARE_PER_CPU(struct rcu_data, rcu_bh_data);
|
||||
|
||||
#ifdef CONFIG_TREE_PREEMPT_RCU
|
||||
#ifdef CONFIG_PREEMPT_RCU
|
||||
extern struct rcu_state rcu_preempt_state;
|
||||
DECLARE_PER_CPU(struct rcu_data, rcu_preempt_data);
|
||||
#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
|
||||
#endif /* #ifdef CONFIG_PREEMPT_RCU */
|
||||
|
||||
#ifdef CONFIG_RCU_BOOST
|
||||
DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_status);
|
||||
|
@ -547,7 +547,7 @@ DECLARE_PER_CPU(char, rcu_cpu_has_work);
|
|||
/* Forward declarations for rcutree_plugin.h */
|
||||
static void rcu_bootup_announce(void);
|
||||
long rcu_batches_completed(void);
|
||||
static void rcu_preempt_note_context_switch(int cpu);
|
||||
static void rcu_preempt_note_context_switch(void);
|
||||
static int rcu_preempt_blocked_readers_cgp(struct rcu_node *rnp);
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
static void rcu_report_unblock_qs_rnp(struct rcu_node *rnp,
|
||||
|
@ -561,12 +561,12 @@ static int rcu_preempt_offline_tasks(struct rcu_state *rsp,
|
|||
struct rcu_node *rnp,
|
||||
struct rcu_data *rdp);
|
||||
#endif /* #ifdef CONFIG_HOTPLUG_CPU */
|
||||
static void rcu_preempt_check_callbacks(int cpu);
|
||||
static void rcu_preempt_check_callbacks(void);
|
||||
void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu));
|
||||
#if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_TREE_PREEMPT_RCU)
|
||||
#if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_PREEMPT_RCU)
|
||||
static void rcu_report_exp_rnp(struct rcu_state *rsp, struct rcu_node *rnp,
|
||||
bool wake);
|
||||
#endif /* #if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_TREE_PREEMPT_RCU) */
|
||||
#endif /* #if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_PREEMPT_RCU) */
|
||||
static void __init __rcu_init_preempt(void);
|
||||
static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags);
|
||||
static void rcu_preempt_boost_start_gp(struct rcu_node *rnp);
|
||||
|
@ -579,8 +579,8 @@ static int rcu_spawn_one_boost_kthread(struct rcu_state *rsp,
|
|||
#endif /* #ifdef CONFIG_RCU_BOOST */
|
||||
static void __init rcu_spawn_boost_kthreads(void);
|
||||
static void rcu_prepare_kthreads(int cpu);
|
||||
static void rcu_cleanup_after_idle(int cpu);
|
||||
static void rcu_prepare_for_idle(int cpu);
|
||||
static void rcu_cleanup_after_idle(void);
|
||||
static void rcu_prepare_for_idle(void);
|
||||
static void rcu_idle_count_callbacks_posted(void);
|
||||
static void print_cpu_stall_info_begin(void);
|
||||
static void print_cpu_stall_info(struct rcu_state *rsp, int cpu);
|
||||
|
@ -606,8 +606,8 @@ static void __init rcu_organize_nocb_kthreads(struct rcu_state *rsp);
|
|||
#endif /* #ifdef CONFIG_RCU_NOCB_CPU */
|
||||
static void __maybe_unused rcu_kick_nohz_cpu(int cpu);
|
||||
static bool init_nocb_callback_list(struct rcu_data *rdp);
|
||||
static void rcu_sysidle_enter(struct rcu_dynticks *rdtp, int irq);
|
||||
static void rcu_sysidle_exit(struct rcu_dynticks *rdtp, int irq);
|
||||
static void rcu_sysidle_enter(int irq);
|
||||
static void rcu_sysidle_exit(int irq);
|
||||
static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle,
|
||||
unsigned long *maxj);
|
||||
static bool is_sysidle_rcu_state(struct rcu_state *rsp);
|
||||
|
|
|
@ -30,14 +30,24 @@
|
|||
#include <linux/smpboot.h>
|
||||
#include "../time/tick-internal.h"
|
||||
|
||||
#define RCU_KTHREAD_PRIO 1
|
||||
|
||||
#ifdef CONFIG_RCU_BOOST
|
||||
|
||||
#include "../locking/rtmutex_common.h"
|
||||
#define RCU_BOOST_PRIO CONFIG_RCU_BOOST_PRIO
|
||||
#else
|
||||
#define RCU_BOOST_PRIO RCU_KTHREAD_PRIO
|
||||
#endif
|
||||
|
||||
/* rcuc/rcub kthread realtime priority */
|
||||
static int kthread_prio = CONFIG_RCU_KTHREAD_PRIO;
|
||||
module_param(kthread_prio, int, 0644);
|
||||
|
||||
/*
|
||||
* Control variables for per-CPU and per-rcu_node kthreads. These
|
||||
* handle all flavors of RCU.
|
||||
*/
|
||||
static DEFINE_PER_CPU(struct task_struct *, rcu_cpu_kthread_task);
|
||||
DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_status);
|
||||
DEFINE_PER_CPU(unsigned int, rcu_cpu_kthread_loops);
|
||||
DEFINE_PER_CPU(char, rcu_cpu_has_work);
|
||||
|
||||
#endif /* #ifdef CONFIG_RCU_BOOST */
|
||||
|
||||
#ifdef CONFIG_RCU_NOCB_CPU
|
||||
static cpumask_var_t rcu_nocb_mask; /* CPUs to have callbacks offloaded. */
|
||||
|
@ -72,9 +82,6 @@ static void __init rcu_bootup_announce_oddness(void)
|
|||
#ifdef CONFIG_RCU_TORTURE_TEST_RUNNABLE
|
||||
pr_info("\tRCU torture testing starts during boot.\n");
|
||||
#endif
|
||||
#if defined(CONFIG_TREE_PREEMPT_RCU) && !defined(CONFIG_RCU_CPU_STALL_VERBOSE)
|
||||
pr_info("\tDump stacks of tasks blocking RCU-preempt GP.\n");
|
||||
#endif
|
||||
#if defined(CONFIG_RCU_CPU_STALL_INFO)
|
||||
pr_info("\tAdditional per-CPU info printed with stalls.\n");
|
||||
#endif
|
||||
|
@ -85,9 +92,12 @@ static void __init rcu_bootup_announce_oddness(void)
|
|||
pr_info("\tBoot-time adjustment of leaf fanout to %d.\n", rcu_fanout_leaf);
|
||||
if (nr_cpu_ids != NR_CPUS)
|
||||
pr_info("\tRCU restricting CPUs from NR_CPUS=%d to nr_cpu_ids=%d.\n", NR_CPUS, nr_cpu_ids);
|
||||
#ifdef CONFIG_RCU_BOOST
|
||||
pr_info("\tRCU kthread priority: %d.\n", kthread_prio);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TREE_PREEMPT_RCU
|
||||
#ifdef CONFIG_PREEMPT_RCU
|
||||
|
||||
RCU_STATE_INITIALIZER(rcu_preempt, 'p', call_rcu);
|
||||
static struct rcu_state *rcu_state_p = &rcu_preempt_state;
|
||||
|
@ -156,7 +166,7 @@ static void rcu_preempt_qs(void)
|
|||
*
|
||||
* Caller must disable preemption.
|
||||
*/
|
||||
static void rcu_preempt_note_context_switch(int cpu)
|
||||
static void rcu_preempt_note_context_switch(void)
|
||||
{
|
||||
struct task_struct *t = current;
|
||||
unsigned long flags;
|
||||
|
@ -167,7 +177,7 @@ static void rcu_preempt_note_context_switch(int cpu)
|
|||
!t->rcu_read_unlock_special.b.blocked) {
|
||||
|
||||
/* Possibly blocking in an RCU read-side critical section. */
|
||||
rdp = per_cpu_ptr(rcu_preempt_state.rda, cpu);
|
||||
rdp = this_cpu_ptr(rcu_preempt_state.rda);
|
||||
rnp = rdp->mynode;
|
||||
raw_spin_lock_irqsave(&rnp->lock, flags);
|
||||
smp_mb__after_unlock_lock();
|
||||
|
@ -415,8 +425,6 @@ void rcu_read_unlock_special(struct task_struct *t)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_RCU_CPU_STALL_VERBOSE
|
||||
|
||||
/*
|
||||
* Dump detailed information for all tasks blocking the current RCU
|
||||
* grace period on the specified rcu_node structure.
|
||||
|
@ -451,14 +459,6 @@ static void rcu_print_detail_task_stall(struct rcu_state *rsp)
|
|||
rcu_print_detail_task_stall_rnp(rnp);
|
||||
}
|
||||
|
||||
#else /* #ifdef CONFIG_RCU_CPU_STALL_VERBOSE */
|
||||
|
||||
static void rcu_print_detail_task_stall(struct rcu_state *rsp)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* #else #ifdef CONFIG_RCU_CPU_STALL_VERBOSE */
|
||||
|
||||
#ifdef CONFIG_RCU_CPU_STALL_INFO
|
||||
|
||||
static void rcu_print_task_stall_begin(struct rcu_node *rnp)
|
||||
|
@ -621,7 +621,7 @@ static int rcu_preempt_offline_tasks(struct rcu_state *rsp,
|
|||
*
|
||||
* Caller must disable hard irqs.
|
||||
*/
|
||||
static void rcu_preempt_check_callbacks(int cpu)
|
||||
static void rcu_preempt_check_callbacks(void)
|
||||
{
|
||||
struct task_struct *t = current;
|
||||
|
||||
|
@ -630,8 +630,8 @@ static void rcu_preempt_check_callbacks(int cpu)
|
|||
return;
|
||||
}
|
||||
if (t->rcu_read_lock_nesting > 0 &&
|
||||
per_cpu(rcu_preempt_data, cpu).qs_pending &&
|
||||
!per_cpu(rcu_preempt_data, cpu).passed_quiesce)
|
||||
__this_cpu_read(rcu_preempt_data.qs_pending) &&
|
||||
!__this_cpu_read(rcu_preempt_data.passed_quiesce))
|
||||
t->rcu_read_unlock_special.b.need_qs = true;
|
||||
}
|
||||
|
||||
|
@ -919,7 +919,7 @@ void exit_rcu(void)
|
|||
__rcu_read_unlock();
|
||||
}
|
||||
|
||||
#else /* #ifdef CONFIG_TREE_PREEMPT_RCU */
|
||||
#else /* #ifdef CONFIG_PREEMPT_RCU */
|
||||
|
||||
static struct rcu_state *rcu_state_p = &rcu_sched_state;
|
||||
|
||||
|
@ -945,7 +945,7 @@ EXPORT_SYMBOL_GPL(rcu_batches_completed);
|
|||
* Because preemptible RCU does not exist, we never have to check for
|
||||
* CPUs being in quiescent states.
|
||||
*/
|
||||
static void rcu_preempt_note_context_switch(int cpu)
|
||||
static void rcu_preempt_note_context_switch(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1017,7 +1017,7 @@ static int rcu_preempt_offline_tasks(struct rcu_state *rsp,
|
|||
* Because preemptible RCU does not exist, it never has any callbacks
|
||||
* to check.
|
||||
*/
|
||||
static void rcu_preempt_check_callbacks(int cpu)
|
||||
static void rcu_preempt_check_callbacks(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1070,7 +1070,7 @@ void exit_rcu(void)
|
|||
{
|
||||
}
|
||||
|
||||
#endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */
|
||||
#endif /* #else #ifdef CONFIG_PREEMPT_RCU */
|
||||
|
||||
#ifdef CONFIG_RCU_BOOST
|
||||
|
||||
|
@ -1326,7 +1326,7 @@ static int rcu_spawn_one_boost_kthread(struct rcu_state *rsp,
|
|||
smp_mb__after_unlock_lock();
|
||||
rnp->boost_kthread_task = t;
|
||||
raw_spin_unlock_irqrestore(&rnp->lock, flags);
|
||||
sp.sched_priority = RCU_BOOST_PRIO;
|
||||
sp.sched_priority = kthread_prio;
|
||||
sched_setscheduler_nocheck(t, SCHED_FIFO, &sp);
|
||||
wake_up_process(t); /* get to TASK_INTERRUPTIBLE quickly. */
|
||||
return 0;
|
||||
|
@ -1343,7 +1343,7 @@ static void rcu_cpu_kthread_setup(unsigned int cpu)
|
|||
{
|
||||
struct sched_param sp;
|
||||
|
||||
sp.sched_priority = RCU_KTHREAD_PRIO;
|
||||
sp.sched_priority = kthread_prio;
|
||||
sched_setscheduler_nocheck(current, SCHED_FIFO, &sp);
|
||||
}
|
||||
|
||||
|
@ -1512,10 +1512,10 @@ static void rcu_prepare_kthreads(int cpu)
|
|||
* any flavor of RCU.
|
||||
*/
|
||||
#ifndef CONFIG_RCU_NOCB_CPU_ALL
|
||||
int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies)
|
||||
int rcu_needs_cpu(unsigned long *delta_jiffies)
|
||||
{
|
||||
*delta_jiffies = ULONG_MAX;
|
||||
return rcu_cpu_has_callbacks(cpu, NULL);
|
||||
return rcu_cpu_has_callbacks(NULL);
|
||||
}
|
||||
#endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */
|
||||
|
||||
|
@ -1523,7 +1523,7 @@ int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies)
|
|||
* Because we do not have RCU_FAST_NO_HZ, don't bother cleaning up
|
||||
* after it.
|
||||
*/
|
||||
static void rcu_cleanup_after_idle(int cpu)
|
||||
static void rcu_cleanup_after_idle(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1531,7 +1531,7 @@ static void rcu_cleanup_after_idle(int cpu)
|
|||
* Do the idle-entry grace-period work, which, because CONFIG_RCU_FAST_NO_HZ=n,
|
||||
* is nothing.
|
||||
*/
|
||||
static void rcu_prepare_for_idle(int cpu)
|
||||
static void rcu_prepare_for_idle(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1624,15 +1624,15 @@ static bool __maybe_unused rcu_try_advance_all_cbs(void)
|
|||
* The caller must have disabled interrupts.
|
||||
*/
|
||||
#ifndef CONFIG_RCU_NOCB_CPU_ALL
|
||||
int rcu_needs_cpu(int cpu, unsigned long *dj)
|
||||
int rcu_needs_cpu(unsigned long *dj)
|
||||
{
|
||||
struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu);
|
||||
struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks);
|
||||
|
||||
/* Snapshot to detect later posting of non-lazy callback. */
|
||||
rdtp->nonlazy_posted_snap = rdtp->nonlazy_posted;
|
||||
|
||||
/* If no callbacks, RCU doesn't need the CPU. */
|
||||
if (!rcu_cpu_has_callbacks(cpu, &rdtp->all_lazy)) {
|
||||
if (!rcu_cpu_has_callbacks(&rdtp->all_lazy)) {
|
||||
*dj = ULONG_MAX;
|
||||
return 0;
|
||||
}
|
||||
|
@ -1666,12 +1666,12 @@ int rcu_needs_cpu(int cpu, unsigned long *dj)
|
|||
*
|
||||
* The caller must have disabled interrupts.
|
||||
*/
|
||||
static void rcu_prepare_for_idle(int cpu)
|
||||
static void rcu_prepare_for_idle(void)
|
||||
{
|
||||
#ifndef CONFIG_RCU_NOCB_CPU_ALL
|
||||
bool needwake;
|
||||
struct rcu_data *rdp;
|
||||
struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu);
|
||||
struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks);
|
||||
struct rcu_node *rnp;
|
||||
struct rcu_state *rsp;
|
||||
int tne;
|
||||
|
@ -1679,7 +1679,7 @@ static void rcu_prepare_for_idle(int cpu)
|
|||
/* Handle nohz enablement switches conservatively. */
|
||||
tne = ACCESS_ONCE(tick_nohz_active);
|
||||
if (tne != rdtp->tick_nohz_enabled_snap) {
|
||||
if (rcu_cpu_has_callbacks(cpu, NULL))
|
||||
if (rcu_cpu_has_callbacks(NULL))
|
||||
invoke_rcu_core(); /* force nohz to see update. */
|
||||
rdtp->tick_nohz_enabled_snap = tne;
|
||||
return;
|
||||
|
@ -1688,7 +1688,7 @@ static void rcu_prepare_for_idle(int cpu)
|
|||
return;
|
||||
|
||||
/* If this is a no-CBs CPU, no callbacks, just return. */
|
||||
if (rcu_is_nocb_cpu(cpu))
|
||||
if (rcu_is_nocb_cpu(smp_processor_id()))
|
||||
return;
|
||||
|
||||
/*
|
||||
|
@ -1712,7 +1712,7 @@ static void rcu_prepare_for_idle(int cpu)
|
|||
return;
|
||||
rdtp->last_accelerate = jiffies;
|
||||
for_each_rcu_flavor(rsp) {
|
||||
rdp = per_cpu_ptr(rsp->rda, cpu);
|
||||
rdp = this_cpu_ptr(rsp->rda);
|
||||
if (!*rdp->nxttail[RCU_DONE_TAIL])
|
||||
continue;
|
||||
rnp = rdp->mynode;
|
||||
|
@ -1731,10 +1731,10 @@ static void rcu_prepare_for_idle(int cpu)
|
|||
* any grace periods that elapsed while the CPU was idle, and if any
|
||||
* callbacks are now ready to invoke, initiate invocation.
|
||||
*/
|
||||
static void rcu_cleanup_after_idle(int cpu)
|
||||
static void rcu_cleanup_after_idle(void)
|
||||
{
|
||||
#ifndef CONFIG_RCU_NOCB_CPU_ALL
|
||||
if (rcu_is_nocb_cpu(cpu))
|
||||
if (rcu_is_nocb_cpu(smp_processor_id()))
|
||||
return;
|
||||
if (rcu_try_advance_all_cbs())
|
||||
invoke_rcu_core();
|
||||
|
@ -2573,9 +2573,13 @@ static void rcu_spawn_one_nocb_kthread(struct rcu_state *rsp, int cpu)
|
|||
rdp->nocb_leader = rdp_spawn;
|
||||
if (rdp_last && rdp != rdp_spawn)
|
||||
rdp_last->nocb_next_follower = rdp;
|
||||
rdp_last = rdp;
|
||||
rdp = rdp->nocb_next_follower;
|
||||
rdp_last->nocb_next_follower = NULL;
|
||||
if (rdp == rdp_spawn) {
|
||||
rdp = rdp->nocb_next_follower;
|
||||
} else {
|
||||
rdp_last = rdp;
|
||||
rdp = rdp->nocb_next_follower;
|
||||
rdp_last->nocb_next_follower = NULL;
|
||||
}
|
||||
} while (rdp);
|
||||
rdp_spawn->nocb_next_follower = rdp_old_leader;
|
||||
}
|
||||
|
@ -2761,9 +2765,10 @@ static int full_sysidle_state; /* Current system-idle state. */
|
|||
* to detect full-system idle states, not RCU quiescent states and grace
|
||||
* periods. The caller must have disabled interrupts.
|
||||
*/
|
||||
static void rcu_sysidle_enter(struct rcu_dynticks *rdtp, int irq)
|
||||
static void rcu_sysidle_enter(int irq)
|
||||
{
|
||||
unsigned long j;
|
||||
struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks);
|
||||
|
||||
/* If there are no nohz_full= CPUs, no need to track this. */
|
||||
if (!tick_nohz_full_enabled())
|
||||
|
@ -2832,8 +2837,10 @@ void rcu_sysidle_force_exit(void)
|
|||
* usermode execution does -not- count as idle here! The caller must
|
||||
* have disabled interrupts.
|
||||
*/
|
||||
static void rcu_sysidle_exit(struct rcu_dynticks *rdtp, int irq)
|
||||
static void rcu_sysidle_exit(int irq)
|
||||
{
|
||||
struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks);
|
||||
|
||||
/* If there are no nohz_full= CPUs, no need to track this. */
|
||||
if (!tick_nohz_full_enabled())
|
||||
return;
|
||||
|
@ -3127,11 +3134,11 @@ static void rcu_sysidle_init_percpu_data(struct rcu_dynticks *rdtp)
|
|||
|
||||
#else /* #ifdef CONFIG_NO_HZ_FULL_SYSIDLE */
|
||||
|
||||
static void rcu_sysidle_enter(struct rcu_dynticks *rdtp, int irq)
|
||||
static void rcu_sysidle_enter(int irq)
|
||||
{
|
||||
}
|
||||
|
||||
static void rcu_sysidle_exit(struct rcu_dynticks *rdtp, int irq)
|
||||
static void rcu_sysidle_exit(int irq)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -306,7 +306,7 @@ struct debug_obj_descr rcuhead_debug_descr = {
|
|||
EXPORT_SYMBOL_GPL(rcuhead_debug_descr);
|
||||
#endif /* #ifdef CONFIG_DEBUG_OBJECTS_RCU_HEAD */
|
||||
|
||||
#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) || defined(CONFIG_RCU_TRACE)
|
||||
#if defined(CONFIG_TREE_RCU) || defined(CONFIG_PREEMPT_RCU) || defined(CONFIG_RCU_TRACE)
|
||||
void do_trace_rcu_torture_read(const char *rcutorturename, struct rcu_head *rhp,
|
||||
unsigned long secs,
|
||||
unsigned long c_old, unsigned long c)
|
||||
|
@ -531,7 +531,8 @@ static int __noreturn rcu_tasks_kthread(void *arg)
|
|||
struct rcu_head *next;
|
||||
LIST_HEAD(rcu_tasks_holdouts);
|
||||
|
||||
/* FIXME: Add housekeeping affinity. */
|
||||
/* Run on housekeeping CPUs by default. Sysadm can move if desired. */
|
||||
housekeeping_affine(current);
|
||||
|
||||
/*
|
||||
* Each pass through the following loop makes one check for
|
||||
|
@ -690,3 +691,87 @@ static void rcu_spawn_tasks_kthread(void)
|
|||
}
|
||||
|
||||
#endif /* #ifdef CONFIG_TASKS_RCU */
|
||||
|
||||
#ifdef CONFIG_PROVE_RCU
|
||||
|
||||
/*
|
||||
* Early boot self test parameters, one for each flavor
|
||||
*/
|
||||
static bool rcu_self_test;
|
||||
static bool rcu_self_test_bh;
|
||||
static bool rcu_self_test_sched;
|
||||
|
||||
module_param(rcu_self_test, bool, 0444);
|
||||
module_param(rcu_self_test_bh, bool, 0444);
|
||||
module_param(rcu_self_test_sched, bool, 0444);
|
||||
|
||||
static int rcu_self_test_counter;
|
||||
|
||||
static void test_callback(struct rcu_head *r)
|
||||
{
|
||||
rcu_self_test_counter++;
|
||||
pr_info("RCU test callback executed %d\n", rcu_self_test_counter);
|
||||
}
|
||||
|
||||
static void early_boot_test_call_rcu(void)
|
||||
{
|
||||
static struct rcu_head head;
|
||||
|
||||
call_rcu(&head, test_callback);
|
||||
}
|
||||
|
||||
static void early_boot_test_call_rcu_bh(void)
|
||||
{
|
||||
static struct rcu_head head;
|
||||
|
||||
call_rcu_bh(&head, test_callback);
|
||||
}
|
||||
|
||||
static void early_boot_test_call_rcu_sched(void)
|
||||
{
|
||||
static struct rcu_head head;
|
||||
|
||||
call_rcu_sched(&head, test_callback);
|
||||
}
|
||||
|
||||
void rcu_early_boot_tests(void)
|
||||
{
|
||||
pr_info("Running RCU self tests\n");
|
||||
|
||||
if (rcu_self_test)
|
||||
early_boot_test_call_rcu();
|
||||
if (rcu_self_test_bh)
|
||||
early_boot_test_call_rcu_bh();
|
||||
if (rcu_self_test_sched)
|
||||
early_boot_test_call_rcu_sched();
|
||||
}
|
||||
|
||||
static int rcu_verify_early_boot_tests(void)
|
||||
{
|
||||
int ret = 0;
|
||||
int early_boot_test_counter = 0;
|
||||
|
||||
if (rcu_self_test) {
|
||||
early_boot_test_counter++;
|
||||
rcu_barrier();
|
||||
}
|
||||
if (rcu_self_test_bh) {
|
||||
early_boot_test_counter++;
|
||||
rcu_barrier_bh();
|
||||
}
|
||||
if (rcu_self_test_sched) {
|
||||
early_boot_test_counter++;
|
||||
rcu_barrier_sched();
|
||||
}
|
||||
|
||||
if (rcu_self_test_counter != early_boot_test_counter) {
|
||||
WARN_ON(1);
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
late_initcall(rcu_verify_early_boot_tests);
|
||||
#else
|
||||
void rcu_early_boot_tests(void) {}
|
||||
#endif /* CONFIG_PROVE_RCU */
|
||||
|
|
|
@ -2773,7 +2773,7 @@ need_resched:
|
|||
preempt_disable();
|
||||
cpu = smp_processor_id();
|
||||
rq = cpu_rq(cpu);
|
||||
rcu_note_context_switch(cpu);
|
||||
rcu_note_context_switch();
|
||||
prev = rq->curr;
|
||||
|
||||
schedule_debug(prev);
|
||||
|
|
|
@ -1275,7 +1275,17 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
|
|||
local_irq_restore(*flags);
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* This sighand can be already freed and even reused, but
|
||||
* we rely on SLAB_DESTROY_BY_RCU and sighand_ctor() which
|
||||
* initializes ->siglock: this slab can't go away, it has
|
||||
* the same object type, ->siglock can't be reinitialized.
|
||||
*
|
||||
* We need to ensure that tsk->sighand is still the same
|
||||
* after we take the lock, we can race with de_thread() or
|
||||
* __exit_signal(). In the latter case the next iteration
|
||||
* must see ->sighand == NULL.
|
||||
*/
|
||||
spin_lock(&sighand->siglock);
|
||||
if (likely(sighand == tsk->sighand)) {
|
||||
rcu_read_unlock();
|
||||
|
@ -1331,23 +1341,21 @@ int kill_pid_info(int sig, struct siginfo *info, struct pid *pid)
|
|||
int error = -ESRCH;
|
||||
struct task_struct *p;
|
||||
|
||||
rcu_read_lock();
|
||||
retry:
|
||||
p = pid_task(pid, PIDTYPE_PID);
|
||||
if (p) {
|
||||
error = group_send_sig_info(sig, info, p);
|
||||
if (unlikely(error == -ESRCH))
|
||||
/*
|
||||
* The task was unhashed in between, try again.
|
||||
* If it is dead, pid_task() will return NULL,
|
||||
* if we race with de_thread() it will find the
|
||||
* new leader.
|
||||
*/
|
||||
goto retry;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
for (;;) {
|
||||
rcu_read_lock();
|
||||
p = pid_task(pid, PIDTYPE_PID);
|
||||
if (p)
|
||||
error = group_send_sig_info(sig, info, p);
|
||||
rcu_read_unlock();
|
||||
if (likely(!p || error != -ESRCH))
|
||||
return error;
|
||||
|
||||
return error;
|
||||
/*
|
||||
* The task was unhashed in between, try again. If it
|
||||
* is dead, pid_task() will return NULL, if we race with
|
||||
* de_thread() it will find the new leader.
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
int kill_proc_info(int sig, struct siginfo *info, pid_t pid)
|
||||
|
|
|
@ -656,7 +656,7 @@ static void run_ksoftirqd(unsigned int cpu)
|
|||
* in the task stack here.
|
||||
*/
|
||||
__do_softirq();
|
||||
rcu_note_context_switch(cpu);
|
||||
rcu_note_context_switch();
|
||||
local_irq_enable();
|
||||
cond_resched();
|
||||
return;
|
||||
|
|
|
@ -585,7 +585,7 @@ static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts,
|
|||
last_jiffies = jiffies;
|
||||
} while (read_seqretry(&jiffies_lock, seq));
|
||||
|
||||
if (rcu_needs_cpu(cpu, &rcu_delta_jiffies) ||
|
||||
if (rcu_needs_cpu(&rcu_delta_jiffies) ||
|
||||
arch_needs_cpu() || irq_work_needs_cpu()) {
|
||||
next_jiffies = last_jiffies + 1;
|
||||
delta_jiffies = 1;
|
||||
|
|
|
@ -1377,12 +1377,11 @@ unsigned long get_next_timer_interrupt(unsigned long now)
|
|||
void update_process_times(int user_tick)
|
||||
{
|
||||
struct task_struct *p = current;
|
||||
int cpu = smp_processor_id();
|
||||
|
||||
/* Note: this timer irq context must be accounted for as well. */
|
||||
account_process_tick(p, user_tick);
|
||||
run_local_timers();
|
||||
rcu_check_callbacks(cpu, user_tick);
|
||||
rcu_check_callbacks(user_tick);
|
||||
#ifdef CONFIG_IRQ_WORK
|
||||
if (in_irq())
|
||||
irq_work_tick();
|
||||
|
|
|
@ -1238,21 +1238,9 @@ config RCU_CPU_STALL_TIMEOUT
|
|||
RCU grace period persists, additional CPU stall warnings are
|
||||
printed at more widely spaced intervals.
|
||||
|
||||
config RCU_CPU_STALL_VERBOSE
|
||||
bool "Print additional per-task information for RCU_CPU_STALL_DETECTOR"
|
||||
depends on TREE_PREEMPT_RCU
|
||||
default y
|
||||
help
|
||||
This option causes RCU to printk detailed per-task information
|
||||
for any tasks that are stalling the current RCU grace period.
|
||||
|
||||
Say N if you are unsure.
|
||||
|
||||
Say Y if you want to enable such checks.
|
||||
|
||||
config RCU_CPU_STALL_INFO
|
||||
bool "Print additional diagnostics on RCU CPU stall"
|
||||
depends on (TREE_RCU || TREE_PREEMPT_RCU) && DEBUG_KERNEL
|
||||
depends on (TREE_RCU || PREEMPT_RCU) && DEBUG_KERNEL
|
||||
default n
|
||||
help
|
||||
For each stalled CPU that is aware of the current RCU grace
|
||||
|
|
|
@ -45,7 +45,7 @@ trap 'rm -rf $T' 0
|
|||
touch $T
|
||||
|
||||
. $KVM/bin/functions.sh
|
||||
. $KVPATH/ver_functions.sh
|
||||
. $CONFIGFRAG/ver_functions.sh
|
||||
|
||||
config_template=${1}
|
||||
config_dir=`echo $config_template | sed -e 's,/[^/]*$,,'`
|
||||
|
@ -168,8 +168,8 @@ then
|
|||
touch $resdir/buildonly
|
||||
exit 0
|
||||
fi
|
||||
echo $QEMU $qemu_args -m 512 -kernel $builddir/$BOOT_IMAGE -append \"$qemu_append $boot_args\" > $resdir/qemu-cmd
|
||||
( $QEMU $qemu_args -m 512 -kernel $builddir/$BOOT_IMAGE -append "$qemu_append $boot_args"; echo $? > $resdir/qemu-retval ) &
|
||||
echo $QEMU $qemu_args -m 512 -kernel $resdir/bzImage -append \"$qemu_append $boot_args\" > $resdir/qemu-cmd
|
||||
( $QEMU $qemu_args -m 512 -kernel $resdir/bzImage -append "$qemu_append $boot_args"; echo $? > $resdir/qemu-retval ) &
|
||||
qemu_pid=$!
|
||||
commandcompleted=0
|
||||
echo Monitoring qemu job at pid $qemu_pid
|
||||
|
|
|
@ -47,7 +47,6 @@ resdir=""
|
|||
configs=""
|
||||
cpus=0
|
||||
ds=`date +%Y.%m.%d-%H:%M:%S`
|
||||
kversion=""
|
||||
|
||||
. functions.sh
|
||||
|
||||
|
@ -64,7 +63,6 @@ usage () {
|
|||
echo " --duration minutes"
|
||||
echo " --interactive"
|
||||
echo " --kmake-arg kernel-make-arguments"
|
||||
echo " --kversion vN.NN"
|
||||
echo " --mac nn:nn:nn:nn:nn:nn"
|
||||
echo " --no-initrd"
|
||||
echo " --qemu-args qemu-system-..."
|
||||
|
@ -128,11 +126,6 @@ do
|
|||
TORTURE_KMAKE_ARG="$2"
|
||||
shift
|
||||
;;
|
||||
--kversion)
|
||||
checkarg --kversion "(kernel version)" $# "$2" '^v[0-9.]*$' '^error'
|
||||
kversion=$2
|
||||
shift
|
||||
;;
|
||||
--mac)
|
||||
checkarg --mac "(MAC address)" $# "$2" '^\([0-9a-fA-F]\{2\}:\)\{5\}[0-9a-fA-F]\{2\}$' error
|
||||
TORTURE_QEMU_MAC=$2
|
||||
|
@ -170,11 +163,10 @@ do
|
|||
done
|
||||
|
||||
CONFIGFRAG=${KVM}/configs/${TORTURE_SUITE}; export CONFIGFRAG
|
||||
KVPATH=${CONFIGFRAG}/$kversion; export KVPATH
|
||||
|
||||
if test -z "$configs"
|
||||
then
|
||||
configs="`cat $CONFIGFRAG/$kversion/CFLIST`"
|
||||
configs="`cat $CONFIGFRAG/CFLIST`"
|
||||
fi
|
||||
|
||||
if test -z "$resdir"
|
||||
|
@ -186,10 +178,10 @@ fi
|
|||
touch $T/cfgcpu
|
||||
for CF in $configs
|
||||
do
|
||||
if test -f "$CONFIGFRAG/$kversion/$CF"
|
||||
if test -f "$CONFIGFRAG/$CF"
|
||||
then
|
||||
cpu_count=`configNR_CPUS.sh $CONFIGFRAG/$kversion/$CF`
|
||||
cpu_count=`configfrag_boot_cpus "$TORTURE_BOOTARGS" "$CONFIGFRAG/$kversion/$CF" "$cpu_count"`
|
||||
cpu_count=`configNR_CPUS.sh $CONFIGFRAG/$CF`
|
||||
cpu_count=`configfrag_boot_cpus "$TORTURE_BOOTARGS" "$CONFIGFRAG/$CF" "$cpu_count"`
|
||||
echo $CF $cpu_count >> $T/cfgcpu
|
||||
else
|
||||
echo "The --configs file $CF does not exist, terminating."
|
||||
|
@ -252,7 +244,6 @@ END {
|
|||
cat << ___EOF___ > $T/script
|
||||
CONFIGFRAG="$CONFIGFRAG"; export CONFIGFRAG
|
||||
KVM="$KVM"; export KVM
|
||||
KVPATH="$KVPATH"; export KVPATH
|
||||
PATH="$PATH"; export PATH
|
||||
TORTURE_BOOT_IMAGE="$TORTURE_BOOT_IMAGE"; export TORTURE_BOOT_IMAGE
|
||||
TORTURE_BUILDONLY="$TORTURE_BUILDONLY"; export TORTURE_BUILDONLY
|
||||
|
@ -285,7 +276,7 @@ then
|
|||
fi
|
||||
___EOF___
|
||||
awk < $T/cfgcpu.pack \
|
||||
-v CONFIGDIR="$CONFIGFRAG/$kversion/" \
|
||||
-v CONFIGDIR="$CONFIGFRAG/" \
|
||||
-v KVM="$KVM" \
|
||||
-v ncpus=$cpus \
|
||||
-v rd=$resdir/$ds/ \
|
||||
|
|
|
@ -7,6 +7,8 @@ CONFIG_HZ_PERIODIC=y
|
|||
CONFIG_NO_HZ_IDLE=n
|
||||
CONFIG_NO_HZ_FULL=n
|
||||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_DEBUG_LOCK_ALLOC=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
||||
CONFIG_PREEMPT_COUNT=y
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
rcupdate.rcu_self_test=1
|
||||
rcupdate.rcu_self_test_bh=1
|
|
@ -2,7 +2,7 @@ CONFIG_SMP=y
|
|||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
#CHECK#CONFIG_PREEMPT_RCU=y
|
||||
CONFIG_HZ_PERIODIC=n
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NO_HZ_FULL=n
|
||||
|
@ -14,6 +14,5 @@ CONFIG_RCU_NOCB_CPU=y
|
|||
CONFIG_RCU_NOCB_CPU_ZERO=y
|
||||
CONFIG_DEBUG_LOCK_ALLOC=n
|
||||
CONFIG_RCU_CPU_STALL_INFO=n
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE=n
|
||||
CONFIG_RCU_BOOST=n
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
||||
|
|
|
@ -3,7 +3,7 @@ CONFIG_NR_CPUS=8
|
|||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
#CHECK#CONFIG_PREEMPT_RCU=y
|
||||
CONFIG_HZ_PERIODIC=n
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NO_HZ_FULL=n
|
||||
|
@ -19,6 +19,5 @@ CONFIG_RCU_NOCB_CPU=n
|
|||
CONFIG_DEBUG_LOCK_ALLOC=y
|
||||
CONFIG_PROVE_LOCKING=n
|
||||
CONFIG_RCU_CPU_STALL_INFO=n
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE=y
|
||||
CONFIG_RCU_BOOST=n
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
||||
|
|
|
@ -3,7 +3,7 @@ CONFIG_NR_CPUS=8
|
|||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
#CHECK#CONFIG_PREEMPT_RCU=y
|
||||
CONFIG_HZ_PERIODIC=n
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NO_HZ_FULL=n
|
||||
|
@ -19,6 +19,5 @@ CONFIG_RCU_NOCB_CPU=n
|
|||
CONFIG_DEBUG_LOCK_ALLOC=y
|
||||
CONFIG_PROVE_LOCKING=n
|
||||
CONFIG_RCU_CPU_STALL_INFO=n
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE=y
|
||||
CONFIG_RCU_BOOST=n
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
||||
|
|
|
@ -3,7 +3,7 @@ CONFIG_NR_CPUS=8
|
|||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
#CHECK#CONFIG_PREEMPT_RCU=y
|
||||
CONFIG_HZ_PERIODIC=y
|
||||
CONFIG_NO_HZ_IDLE=n
|
||||
CONFIG_NO_HZ_FULL=n
|
||||
|
@ -15,7 +15,6 @@ CONFIG_RCU_FANOUT_EXACT=n
|
|||
CONFIG_RCU_NOCB_CPU=n
|
||||
CONFIG_DEBUG_LOCK_ALLOC=n
|
||||
CONFIG_RCU_CPU_STALL_INFO=n
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE=n
|
||||
CONFIG_RCU_BOOST=y
|
||||
CONFIG_RCU_BOOST_PRIO=2
|
||||
CONFIG_RCU_KTHREAD_PRIO=2
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
||||
|
|
|
@ -19,5 +19,4 @@ CONFIG_RCU_FANOUT_EXACT=n
|
|||
CONFIG_RCU_NOCB_CPU=n
|
||||
CONFIG_DEBUG_LOCK_ALLOC=n
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
||||
|
|
|
@ -19,5 +19,4 @@ CONFIG_DEBUG_LOCK_ALLOC=y
|
|||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=n
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE=n
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
rcutorture.torture_type=sched
|
||||
rcupdate.rcu_self_test_sched=1
|
||||
|
|
|
@ -20,5 +20,4 @@ CONFIG_DEBUG_LOCK_ALLOC=y
|
|||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=n
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE=n
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
rcupdate.rcu_self_test=1
|
||||
rcupdate.rcu_self_test_bh=1
|
||||
rcupdate.rcu_self_test_sched=1
|
|
@ -19,5 +19,4 @@ CONFIG_RCU_FANOUT_EXACT=n
|
|||
CONFIG_RCU_NOCB_CPU=n
|
||||
CONFIG_DEBUG_LOCK_ALLOC=n
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE=n
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
||||
|
|
|
@ -3,7 +3,7 @@ CONFIG_NR_CPUS=16
|
|||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
#CHECK#CONFIG_PREEMPT_RCU=y
|
||||
CONFIG_HZ_PERIODIC=n
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NO_HZ_FULL=n
|
||||
|
@ -18,7 +18,8 @@ CONFIG_RCU_FANOUT_LEAF=2
|
|||
CONFIG_RCU_NOCB_CPU=y
|
||||
CONFIG_RCU_NOCB_CPU_ALL=y
|
||||
CONFIG_DEBUG_LOCK_ALLOC=n
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=n
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE=n
|
||||
CONFIG_RCU_BOOST=n
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
||||
|
|
|
@ -3,7 +3,7 @@ CONFIG_NR_CPUS=16
|
|||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
#CHECK#CONFIG_PREEMPT_RCU=y
|
||||
CONFIG_HZ_PERIODIC=n
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NO_HZ_FULL=n
|
||||
|
@ -19,6 +19,5 @@ CONFIG_RCU_NOCB_CPU=y
|
|||
CONFIG_RCU_NOCB_CPU_ALL=y
|
||||
CONFIG_DEBUG_LOCK_ALLOC=n
|
||||
CONFIG_RCU_CPU_STALL_INFO=n
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE=n
|
||||
CONFIG_RCU_BOOST=n
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
rcutorture.torture_type=sched
|
||||
rcupdate.rcu_self_test=1
|
||||
rcupdate.rcu_self_test_sched=1
|
||||
|
|
|
@ -3,7 +3,7 @@ CONFIG_NR_CPUS=1
|
|||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
#CHECK#CONFIG_PREEMPT_RCU=y
|
||||
CONFIG_HZ_PERIODIC=n
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NO_HZ_FULL=n
|
||||
|
@ -14,6 +14,5 @@ CONFIG_HIBERNATION=n
|
|||
CONFIG_RCU_NOCB_CPU=n
|
||||
CONFIG_DEBUG_LOCK_ALLOC=n
|
||||
CONFIG_RCU_CPU_STALL_INFO=n
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE=n
|
||||
CONFIG_RCU_BOOST=n
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
P1-S-T-NH-SD-SMP-HP
|
||||
P2-2-t-nh-sd-SMP-hp
|
||||
P3-3-T-nh-SD-SMP-hp
|
||||
P4-A-t-NH-sd-SMP-HP
|
||||
P5-U-T-NH-sd-SMP-hp
|
||||
N1-S-T-NH-SD-SMP-HP
|
||||
N2-2-t-nh-sd-SMP-hp
|
||||
N3-3-T-nh-SD-SMP-hp
|
||||
N4-A-t-NH-sd-SMP-HP
|
||||
N5-U-T-NH-sd-SMP-hp
|
||||
PT1-nh
|
||||
PT2-NH
|
||||
NT1-nh
|
||||
NT3-NH
|
|
@ -1,18 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=8
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=4
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=2
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=6
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=6
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=y
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
#CHECK#CONFIG_TINY_RCU=y
|
||||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
#
|
||||
CONFIG_SMP=n
|
||||
#
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
#
|
||||
CONFIG_NO_HZ=n
|
||||
#
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
#CHECK#CONFIG_TINY_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
#
|
||||
CONFIG_SMP=n
|
||||
#
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
#
|
||||
CONFIG_NO_HZ=y
|
||||
#
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=8
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=4
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=2
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=6
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_RCU_BOOST=y
|
||||
CONFIG_RCU_BOOST_PRIO=2
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=6
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=y
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_OBJECTS=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_RCU_BOOST=y
|
||||
CONFIG_RCU_BOOST_PRIO=2
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
CONFIG_TINY_PREEMPT_RCU=y
|
||||
CONFIG_RCU_BOOST=y
|
||||
CONFIG_RCU_BOOST_PRIO=2
|
||||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
#
|
||||
CONFIG_SMP=n
|
||||
#
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
#
|
||||
CONFIG_NO_HZ=n
|
||||
#
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
CONFIG_TINY_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
#
|
||||
CONFIG_SMP=n
|
||||
#
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
#
|
||||
CONFIG_NO_HZ=y
|
||||
#
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Kernel-version-dependent shell functions for the rest of the scripts.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you can access it online at
|
||||
# http://www.gnu.org/licenses/gpl-2.0.html.
|
||||
#
|
||||
# Copyright (C) IBM Corporation, 2013
|
||||
#
|
||||
# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
|
||||
|
||||
# per_version_boot_params bootparam-string config-file seconds
|
||||
#
|
||||
# Adds per-version torture-module parameters to kernels supporting them.
|
||||
# Which old kernels do not.
|
||||
per_version_boot_params () {
|
||||
echo rcutorture.stat_interval=15 \
|
||||
rcutorture.shutdown_secs=$3 \
|
||||
rcutorture.rcutorture_runnable=1 \
|
||||
rcutorture.test_no_idle_hz=1 \
|
||||
rcutorture.verbose=1
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
sysidleY.2013.06.19a
|
||||
sysidleN.2013.06.19a
|
||||
P1-S-T-NH-SD-SMP-HP
|
||||
P2-2-t-nh-sd-SMP-hp
|
||||
P3-3-T-nh-SD-SMP-hp
|
||||
P4-A-t-NH-sd-SMP-HP
|
||||
P5-U-T-NH-sd-SMP-hp
|
||||
P6---t-nh-SD-smp-hp
|
||||
N1-S-T-NH-SD-SMP-HP
|
||||
N2-2-t-nh-sd-SMP-hp
|
||||
N3-3-T-nh-SD-SMP-hp
|
||||
N4-A-t-NH-sd-SMP-HP
|
||||
N5-U-T-NH-sd-SMP-hp
|
||||
PT1-nh
|
||||
PT2-NH
|
||||
NT1-nh
|
||||
NT3-NH
|
|
@ -1,19 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_FAST_NO_HZ=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=8
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=4
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=2
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=6
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=6
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=y
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=1
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=2
|
||||
CONFIG_NR_CPUS=16
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_RCU_NOCB_CPU=y
|
||||
CONFIG_RCU_NOCB_CPU_NONE=y
|
||||
CONFIG_RCU_NOCB_CPU_ZERO=n
|
||||
CONFIG_RCU_NOCB_CPU_ALL=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=14
|
||||
CONFIG_NR_CPUS=16
|
||||
CONFIG_RCU_FANOUT_EXACT=y
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
#CHECK#CONFIG_TINY_RCU=y
|
||||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
#
|
||||
CONFIG_SMP=n
|
||||
#
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
#
|
||||
CONFIG_NO_HZ=n
|
||||
#
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
#CHECK#CONFIG_TINY_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
#
|
||||
CONFIG_SMP=n
|
||||
#
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
#
|
||||
CONFIG_NO_HZ=y
|
||||
#
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_RCU_FAST_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=8
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=4
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=2
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=6
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_RCU_BOOST=y
|
||||
CONFIG_RCU_BOOST_PRIO=2
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=6
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=y
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_OBJECTS=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_RCU_BOOST=y
|
||||
CONFIG_RCU_BOOST_PRIO=2
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=n
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=2
|
||||
CONFIG_NR_CPUS=16
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_RCU_NOCB_CPU=y
|
||||
CONFIG_RCU_NOCB_CPU_NONE=n
|
||||
CONFIG_RCU_NOCB_CPU_ZERO=n
|
||||
CONFIG_RCU_NOCB_CPU_ALL=y
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_OBJECTS=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_SLUB=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=2
|
||||
CONFIG_NR_CPUS=16
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_RCU_NOCB_CPU=y
|
||||
CONFIG_RCU_NOCB_CPU_NONE=y
|
||||
CONFIG_RCU_NOCB_CPU_ZERO=n
|
||||
CONFIG_RCU_NOCB_CPU_ALL=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_OBJECTS=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_SLUB=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=2
|
||||
CONFIG_NR_CPUS=16
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_RCU_NOCB_CPU=y
|
||||
CONFIG_RCU_NOCB_CPU_NONE=y
|
||||
CONFIG_RCU_NOCB_CPU_ZERO=n
|
||||
CONFIG_RCU_NOCB_CPU_ALL=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_OBJECTS=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_SLUB=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=2
|
||||
CONFIG_NR_CPUS=16
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_RCU_NOCB_CPU=y
|
||||
CONFIG_RCU_NOCB_CPU_NONE=n
|
||||
CONFIG_RCU_NOCB_CPU_ZERO=y
|
||||
CONFIG_RCU_NOCB_CPU_ALL=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_OBJECTS=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_SLUB=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
CONFIG_TINY_PREEMPT_RCU=y
|
||||
CONFIG_RCU_BOOST=y
|
||||
CONFIG_RCU_BOOST_PRIO=2
|
||||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
#
|
||||
CONFIG_SMP=n
|
||||
#
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
#
|
||||
CONFIG_NO_HZ=n
|
||||
#
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
CONFIG_TINY_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
#
|
||||
CONFIG_SMP=n
|
||||
#
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
#
|
||||
CONFIG_NO_HZ=y
|
||||
#
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
P1-S-T-NH-SD-SMP-HP
|
||||
P2-2-t-nh-sd-SMP-hp
|
||||
P3-3-T-nh-SD-SMP-hp
|
||||
P4-A-t-NH-sd-SMP-HP
|
||||
P5-U-T-NH-sd-SMP-hp
|
||||
N1-S-T-NH-SD-SMP-HP
|
||||
N2-2-t-nh-sd-SMP-hp
|
||||
N3-3-T-nh-SD-SMP-hp
|
||||
N4-A-t-NH-sd-SMP-HP
|
||||
N5-U-T-NH-sd-SMP-hp
|
||||
PT1-nh
|
||||
PT2-NH
|
||||
NT1-nh
|
||||
NT3-NH
|
|
@ -1,19 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_FAST_NO_HZ=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=8
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=4
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=2
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=6
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=6
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=y
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
#CHECK#CONFIG_TREE_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
#CHECK#CONFIG_TINY_RCU=y
|
||||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
#
|
||||
CONFIG_SMP=n
|
||||
#
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
#
|
||||
CONFIG_NO_HZ=n
|
||||
#
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
#CHECK#CONFIG_TINY_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
#
|
||||
CONFIG_SMP=n
|
||||
#
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
#
|
||||
CONFIG_NO_HZ=y
|
||||
#
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_RCU_FAST_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=8
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=4
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_NO_HZ=n
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=2
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
CONFIG_RCU_TRACE=n
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=6
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_RCU_BOOST=y
|
||||
CONFIG_RCU_BOOST_PRIO=2
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_CPU_STALL_INFO=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_RCU_FANOUT=6
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_RCU_FANOUT_EXACT=y
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_OBJECTS=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_RCU_BOOST=y
|
||||
CONFIG_RCU_BOOST_PRIO=2
|
||||
CONFIG_RCU_TORTURE_TEST=m
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче