v2 RCU cleanups and simplified preemptable RCU
Subsystems (6)
cover v2 RCU cleanups and simplified preemptable RCU
[Not yet for inclusion, but making good progress.]
This patchset contains some RCU cleanups as follows:
o Move private definitions from include/linux/rcutree.h to
kernel/rcutree.h
o Rename variables and functions so that RCU-sched is an
underlying definition, along with RCU-bh and (when so configured) RCU-preempt. RCU then maps to either RCU-sched or RCU-preempt, depending on configuration.
o Consolidate sparse and lockdep into include/linux/rcupdate.h
so that all RCU implementations are set up properly.
With these in place, we add configurable preemptable-RCU functionality to kernel/rcutree.c. This new implementation has much faster and simpler read-side primitives (roughly that of Classic RCU built with CONFIG_PREEMPT), and has update-side performance equal to Classic RCU (at least in absence of blocking/preemption of read-side critical sections). This new implementation should eventually replace the old preemptable RCU, which would remove 2099 lines of code from the kernel, for a net removal of more than 1000 lines of code.
This patchset is undoubtably buggy, and does not have RCU priority boosting, though it does have the necessary tracking of tasks blocked in RCU read-side critical sections.
Changes from v1 (http://lkml.org/lkml/2009/7/23/294):
o Fixes some locking problems detected by lockdep.
o Disable irqs in quiescent-state-detection code, and fix handling
of scheduling-clock interrupt always occurring in RCU read-side critical section.
o Fix sparse annotations.
o Apply feedback from Mathieu Desnoyers.
o Fix x86 kernel-build errors.
o Now passes moderate (multi-hour) rcutorture tests.
Shortcomings:
o Only moderately tested, probably still quite buggy. CPU hotplug
not yet tested heavily, for example.
o Probably does not even compile for all of the relevant
combinations of kernel configuration variables.
o Lacks RCU priority boosting.
b/Documentation/RCU/trace.txt | 7 b/include/linux/init_task.h | 15 + b/include/linux/rcupdate.h | 21 +- b/include/linux/rcupreempt.h | 4 b/include/linux/rcutree.h | 211 -------------------- b/include/linux/sched.h | 37 +++ b/init/Kconfig | 22 +- b/kernel/Makefile | 1 b/kernel/exit.c | 1 b/kernel/fork.c | 5 b/kernel/rcupreempt.c | 8 b/kernel/rcutree.c | 2 b/kernel/rcutree.h | 238 +++++++++++++++++++++++ b/kernel/rcutree_plugin.h | 428 ++++++++++++++++++++++++++++++++++++++++++ b/kernel/rcutree_trace.c | 2 b/kernel/sched.c | 2 b/kernel/softirq.c | 5 include/linux/rcupdate.h | 48 ++++ include/linux/rcupreempt.h | 8 include/linux/rcutree.h | 43 ++-- kernel/rcutree.c | 207 +++++++++++++------- kernel/rcutree.h | 13 + kernel/rcutree_trace.c | 40 ++- 23 files changed, 1018 insertions(+), 350 deletions(-)
RFC PATCH 3/4 v2 Consolidate sparse and lockdep declarations in include/linux/rcupdate.h
From: Paul E. McKenney <[email protected]>
--- include/linux/rcupdate.h | 46 ++++++++++++++++++++++++++++++++++++++++--- include/linux/rcupreempt.h | 4 +- include/linux/rcutree.h | 18 ----------------- 3 files changed, 44 insertions(+), 24 deletions(-)
include/linux/rcupdate.h +42 -4
@@ -80,6 +80,16 @@ extern int rcu_scheduler_active; (ptr)->next =NULL ; (ptr)->func =NULL ; \ } while (0) +#ifdef CONFIG_DEBUG_LOCK_ALLOC +extern struct lockdep_map rcu_lock_map; +# define rcu_read_acquire () \ + lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) +# define rcu_read_release () lock_release(&rcu_lock_map, 1, _THIS_IP_) +#else +# define rcu_read_acquire () do { } while (0) +# define rcu_read_release () do { } while (0) +#endif +/** * rcu_read_lock - mark the beginning of an RCU read-side critical section. *
@@ -109,7 +119,12 @@ extern int rcu_scheduler_active;* * It is illegal to block while in an RCU read-side critical section. */ -#define rcu_read_lock () __rcu_read_lock() +static inline void rcu_read_lock (void ) +{ +__rcu_read_lock (); +__acquire (RCU ); +rcu_read_acquire (); +}/** * rcu_read_unlock - marks the end of an RCU read-side critical section.
@@ -126,7 +141,12 @@ extern int rcu_scheduler_active;* used as well. RCU does not care how the writers keep out of each * others' way, as long as they do so. */ -#define rcu_read_unlock () __rcu_read_unlock() +static inline void rcu_read_unlock (void ) +{ +rcu_read_release (); +__release (RCU ); +__rcu_read_unlock (); +}/** * rcu_read_lock_bh - mark the beginning of a softirq-only RCU critical section
@@ -139,14 +159,24 @@ extern int rcu_scheduler_active;* can use just rcu_read_lock(). * */ -#define rcu_read_lock_bh () __rcu_read_lock_bh() +static inline void rcu_read_lock_bh (void ) +{ +__rcu_read_lock_bh (); +__acquire (RCU_BH ); +rcu_read_acquire (); +}/* * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section * * See rcu_read_lock_bh() for more information. */ -#define rcu_read_unlock_bh () __rcu_read_unlock_bh() +static inline void rcu_read_unlock_bh (void ) +{ +rcu_read_release (); +__release (RCU_BH ); +__rcu_read_unlock_bh (); +}/** * rcu_read_lock_sched - mark the beginning of a RCU-classic critical section
@@ -160,10 +190,14 @@ extern int rcu_scheduler_active;static inline void rcu_read_lock_sched (void ) {preempt_disable (); +__acquire (RCU_SCHED ); +rcu_read_acquire (); }static inline void rcu_read_lock_sched_notrace (void ) {preempt_disable_notrace (); +__acquire (RCU_SCHED ); +rcu_read_acquire (); }/*
@@ -173,10 +207,14 @@ static inline void rcu_read_lock_sched_notrace(void)*/ static inline void rcu_read_unlock_sched (void ) { +rcu_read_release (); +__release (RCU_SCHED );preempt_enable (); }static inline void rcu_read_unlock_sched_notrace (void ) { +rcu_read_release (); +__release (RCU_SCHED );preempt_enable_notrace (); }
include/linux/rcupreempt.h +2 -2
@@ -64,8 +64,8 @@ static inline void rcu_bh_qs(int cpu) { }extern void call_rcu_sched (struct rcu_head *head,void (*func)(struct rcu_head *head)); -extern void __rcu_read_lock(void) __acquires(RCU); -extern void __rcu_read_unlock(void) __releases(RCU); +extern void __rcu_read_lock (void ); +extern void __rcu_read_unlock (void );extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu);
include/linux/rcutree.h +0 -18
@@ -36,38 +36,20 @@ extern void rcu_bh_qs(int cpu);extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu); -#ifdef CONFIG_DEBUG_LOCK_ALLOC -extern struct lockdep_map rcu_lock_map; -# define rcu_read_acquire () \ - lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) -# define rcu_read_release () lock_release(&rcu_lock_map, 1, _THIS_IP_) -#else -# define rcu_read_acquire () do { } while (0) -# define rcu_read_release () do { } while (0) -#endif -static inline void __rcu_read_lock (void ) {preempt_disable (); -__acquire (RCU ); -rcu_read_acquire (); }static inline void __rcu_read_unlock (void ) { -rcu_read_release (); -__release (RCU );preempt_enable (); }static inline void __rcu_read_lock_bh (void ) {local_bh_disable (); -__acquire (RCU_BH ); -rcu_read_acquire (); }static inline void __rcu_read_unlock_bh (void ) { -rcu_read_release (); -__release (RCU_BH );local_bh_enable (); }
Signature · 1 line
1.5.2.5
RFC PATCH 4/4 v2 Merge preemptable-RCU functionality into hierarchical RCU
In reply to Paul E. McKenneyFrom: Paul E. McKenney <[email protected]>
Create a kernel/rcutree_plugin.h file that contains definitions for preemptable RCU (or, under #else, empty definitions). These definitions fit into plugins defined in kernel/rcutree.c for this purpose.
This variant of preemptable RCU uses a new algorithm whose read-side expense is roughly that of classic hierarchical RCU under CONFIG_PREEMPT. This new algorithm's update-side expense is similar to that of classic hierarchical RCU, and, in absence of read-side preemption or blocking, is exactly that of classic hierarchical RCU. Perhaps more important, this new algorithm has a much simpler implementation, saving well over 1,000 lines of code compared to mainline's implementation of preemptable RCU, which will hopefully be retired in favor of this new algorithm.
The simplifications are obtained by maintaining per-task nesting state for running tasks, and using a simple lock-protected algorithm to handle accounting when tasks block within RCU read-side critical sections, making use of lessons learned while creating numerous user-level RCU algorithms over the past 18 months.
---
include/linux/init_task.h | 15 + include/linux/rcupdate.h | 2 include/linux/rcupreempt.h | 4 include/linux/rcutree.h | 16 + include/linux/sched.h | 37 +++ init/Kconfig | 22 +- kernel/Makefile | 1 kernel/exit.c | 1 kernel/fork.c | 5 kernel/rcutree.c | 129 +++++++++---- kernel/rcutree.h | 9 kernel/rcutree_plugin.h | 428 +++++++++++++++++++++++++++++++++++++++++++++ kernel/rcutree_trace.c | 20 ++ 13 files changed, 639 insertions(+), 50 deletions(-)
include/linux/init_task.h +15 -0
@@ -94,6 +94,20 @@ extern struct group_info init_groups;# define CAP_INIT_BSET CAP_INIT_EFF_SET#endif +#ifdef CONFIG_PREEMPT_RCU +#define INIT_TASK_RCU_PREEMPT (tsk) \ + .rcu_read_lock_nesting = 0, \ + .rcu_flipctr_idx = 0, +#elif defined(CONFIG_TREE_PREEMPT_RCU ) +#define INIT_TASK_RCU_PREEMPT (tsk) \ + .rcu_read_lock_nesting = 0, \ + .rcu_read_unlock_special = 0, \ + .rcu_blocked_cpu = -1, \ + .rcu_node_entry = LIST_HEAD_INIT(tsk.rcu_node_entry), +#else +#define INIT_TASK_RCU_PREEMPT (tsk) +#endif +extern struct cred init_cred;#ifdef CONFIG_PERF_COUNTERS
@@ -173,6 +187,7 @@ extern struct cred init_cred;INIT_LOCKDEP \ INIT_FTRACE_GRAPH \ INIT_TRACE_RECURSION \ + INIT_TASK_RCU_PREEMPT(tsk) \ }
include/linux/rcupdate.h +1 -1
@@ -66,7 +66,7 @@ extern void rcu_scheduler_starting(void);extern int rcu_needs_cpu (int cpu);extern int rcu_scheduler_active; -#if defined(CONFIG_TREE_RCU ) +#if defined(CONFIG_TREE_RCU ) || defined(CONFIG_TREE_PREEMPT_RCU )#include <linux/rcutree.h> #elif defined(CONFIG_PREEMPT_RCU )#include <linux/rcupreempt.h>
include/linux/rcupreempt.h +4 -0
@@ -99,6 +99,10 @@ static inline long rcu_batches_completed_bh(void)return rcu_batches_completed (); } +static inline void exit_rcu (void ) +{ +} +#ifdef CONFIG_RCU_TRACE struct rcupreempt_trace ;extern long *rcupreempt_flipctr (int cpu);
include/linux/rcutree.h +16 -0
@@ -36,14 +36,30 @@ extern void rcu_bh_qs(int cpu);extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu); +#ifdef CONFIG_TREE_PREEMPT_RCU + +extern void __rcu_read_lock (void ); +extern void __rcu_read_unlock (void ); +extern void exit_rcu (void ); + +#else /* #ifdef CONFIG_TREE_PREEMPT_RCU */ +static inline void __rcu_read_lock (void ) {preempt_disable (); } +static inline void __rcu_read_unlock (void ) {preempt_enable (); } + +static inline void exit_rcu (void ) +{ +} + +#endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */ +static inline void __rcu_read_lock_bh (void ) {local_bh_disable ();
include/linux/sched.h +37 -0
@@ -1189,6 +1189,13 @@ struct task_struct {int rcu_flipctr_idx;#endif /* #ifdef CONFIG_PREEMPT_RCU */ +#ifdef CONFIG_TREE_PREEMPT_RCU +int rcu_read_lock_nesting; +char rcu_read_unlock_special; +int rcu_blocked_cpu; +struct list_head rcu_node_entry; +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ +#if defined(CONFIG_SCHEDSTATS ) || defined(CONFIG_TASK_DELAY_ACCT )struct sched_info sched_info;#endif
@@ -1701,6 +1708,36 @@ extern cputime_t task_gtime(struct task_struct *p);#define tsk_used_math (p) ((p)->flags & PF_USED_MATH)#define used_math () tsk_used_math(current) +#ifdef CONFIG_TREE_PREEMPT_RCU + +#define RCU_READ_UNLOCK_BLOCKED (1 << 0)/* blocked while in RCU read-side. */ +#define RCU_READ_UNLOCK_NEED_GEN (1 << 1)/* RCU core needs CPU response. */ +#define RCU_READ_UNLOCK_GOT_GEN (1 << 2)/* CPU has responded to RCU core. */ + +static inline void rcu_copy_process (struct task_struct *p) +{ + p->rcu_read_lock_nesting =0 ; + p->rcu_read_unlock_special =0 ; + p->rcu_blocked_cpu =-1 ; +INIT_LIST_HEAD (&p->rcu_node_entry); +} + +#elif defined(CONFIG_PREEMPT_RCU ) + +static inline void rcu_copy_process (struct task_struct *p) +{ + p->rcu_read_lock_nesting =0 ; + p->rcu_flipctr_idx =0 ; +} + +#else + +static inline void rcu_copy_process (struct task_struct *p) +{ +} + +#endif +#ifdef CONFIG_SMP extern int set_cpus_allowed_ptr (struct task_struct *p,const struct cpumask *new_mask);
init/Kconfig +16 -6
@@ -335,11 +335,20 @@ config PREEMPT_RCU now-naive assumptions about each RCU read-side critical section remaining on a given CPU through its execution. +config TREE_PREEMPT_RCU + bool "Preemptable tree-based hierarchical RCU" + depends on PREEMPT + help + This option selects the RCU implementation that is + designed for very large SMP systems with hundreds or + thousands of CPUs, but for which real-time response + is also required. + endchoice config RCU_TRACE bool "Enable tracing for RCU" - depends on TREE_RCU || PREEMPT_RCU + depends on TREE_RCU || PREEMPT_RCU || TREE_PREEMPT_RCU help This option provides tracing in RCU which presents stats in debugfs for debugging RCU implementation.
@@ -351,7 +360,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 + depends on TREE_RCU || TREE_PREEMPT_RCU default 64 if 64BIT default 32 if !64BIT help
@@ -366,7 +375,7 @@ config RCU_FANOUT config RCU_FANOUT_EXACT bool "Disable tree-based hierarchical RCU auto-balancing" - depends on TREE_RCU + depends on TREE_RCU || TREE_PREEMPT_RCU default n help This option forces use of the exact RCU_FANOUT value specified,
@@ -379,11 +388,12 @@ config RCU_FANOUT_EXACT Say N if unsure. config TREE_RCU_TRACE - def_bool RCU_TRACE && TREE_RCU + def_bool RCU_TRACE && ( TREE_RCU || TREE_PREEMPT_RCU ) select DEBUG_FS help - This option provides tracing for the TREE_RCU implementation, - permitting Makefile to trivially select kernel/rcutree_trace.c. + This option provides tracing for the TREE_RCU and + TREE_PREEMPT_RCU implementations, permitting Makefile to + trivially select kernel/rcutree_trace.c. config PREEMPT_RCU_TRACE def_bool RCU_TRACE && PREEMPT_RCU
kernel/Makefile +1 -0
@@ -81,6 +81,7 @@ obj-$(CONFIG_GENERIC_HARDIRQS) += irq/ obj-$(CONFIG_SECCOMP) += seccomp.o obj-$(CONFIG_RCU_TORTURE_TEST) += rcutorture.o obj-$(CONFIG_TREE_RCU) += rcutree.o +obj-$(CONFIG_TREE_PREEMPT_RCU) += rcutree.o obj-$(CONFIG_PREEMPT_RCU) += rcupreempt.o obj-$(CONFIG_TREE_RCU_TRACE) += rcutree_trace.o obj-$(CONFIG_PREEMPT_RCU_TRACE) += rcupreempt_trace.o
kernel/exit.c +1 -0
@@ -1011,6 +1011,7 @@ NORET_TYPE void do_exit(long code)__free_pipe_info (tsk->splice_pipe);preempt_disable (); +exit_rcu ();/* causes final put_task_struct in finish_task_switch(). */ tsk->state =TASK_DEAD ;schedule ();
kernel/fork.c +1 -4
@@ -1022,10 +1022,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,copy_flags (clone_flags, p);INIT_LIST_HEAD (&p->children);INIT_LIST_HEAD (&p->sibling); -#ifdef CONFIG_PREEMPT_RCU - p->rcu_read_lock_nesting =0 ; - p->rcu_flipctr_idx =0 ; -#endif /* #ifdef CONFIG_PREEMPT_RCU */ +rcu_copy_process (p); p->vfork_done =NULL ;spin_lock_init (&p->alloc_lock);
kernel/rcutree.c +90 -39
269 lines not on this page · raw message
kernel/rcutree.h +9 -0
@@ -80,6 +80,7 @@ struct rcu_dynticks {*/ struct rcu_node {spinlock_t lock; +long gpnum;/* Current grace period for this node. */ unsigned long qsmask;/* CPUs or groups that need to switch in */ /* order for current grace period to proceed.*/ unsigned long qsmaskinit;
@@ -90,6 +91,8 @@ struct rcu_node {u8 grpnum;/* CPU/group number for next level up. */ u8 level;/* root is at level 0. */ struct rcu_node *parent; +struct list_head blocked_tasks[2 ]; +/* Tasks blocked in RCU read-side critsect. */ }____cacheline_internodealigned_in_smp ;/* Index values for nxttail array in struct rcu_data. */
@@ -111,6 +114,7 @@ struct rcu_data {bool passed_quiesc;/* User-mode/idle loop etc. */ bool qs_pending;/* Core waits for quiesc state. */ bool beenonline;/* CPU online at least once. */ +bool preemptable;/* Preemptable RCU? */ struct rcu_node *mynode;/* This CPU's leaf of hierarchy */ unsigned long grpmask;/* Mask to apply to leaf qsmask. */
@@ -244,5 +248,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 +extern struct rcu_state rcu_preempt_state; +DECLARE_PER_CPU(struct rcu_data, rcu_preempt_data); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ +#endif /* #ifdef RCU_TREE_NONCORE */
kernel/rcutree_plugin.h new file +428 -0
428 lines not on this page · raw message
kernel/rcutree_trace.c +20 -0
@@ -77,6 +77,10 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)static int show_rcudata (struct seq_file *m,void *unused) { +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_puts (m,"rcu_preempt:\n" ); +PRINT_RCU_DATA (rcu_preempt_data, print_one_rcu_data, m); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_puts (m,"rcu_sched:\n" );PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data, m);seq_puts (m,"rcu_bh:\n" );
@@ -125,6 +129,10 @@ static int show_rcudata_csv(struct seq_file *m, void *unused)seq_puts (m,"\"dt\",\"dt nesting\",\"dn\",\"df\"," );#endif /* #ifdef CONFIG_NO_HZ */ seq_puts (m,"\"of\",\"ri\",\"ql\",\"b\"\n" ); +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_puts (m,"\"rcu_preempt:\"\n" ); +PRINT_RCU_DATA (rcu_preempt_data, print_one_rcu_data_csv, m); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_puts (m,"\"rcu_sched:\"\n" );PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data_csv, m);seq_puts (m,"\"rcu_bh:\"\n" );
@@ -172,6 +180,10 @@ static void print_one_rcu_state(struct seq_file *m, struct rcu_state *rsp)static int show_rcuhier (struct seq_file *m,void *unused) { +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_puts (m,"rcu_preempt:\n" ); +print_one_rcu_state (m, &rcu_preempt_state); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_puts (m,"rcu_sched:\n" );print_one_rcu_state (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );
@@ -194,6 +206,10 @@ static struct file_operations rcuhier_fops = {static int show_rcugp (struct seq_file *m,void *unused) { +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_printf (m,"rcu_preempt: completed=%ld gpnum=%ld\n" , + rcu_preempt_state.completed, rcu_preempt_state.gpnum); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_printf (m,"rcu_sched: completed=%ld gpnum=%ld\n" , rcu_sched_state.completed, rcu_sched_state.gpnum); seq_printf(m, "rcu_bh: completed=%ld gpnum=%ld\n",
@@ -244,6 +260,10 @@ static void print_rcu_pendings(struct seq_file *m, struct rcu_state *rsp)static int show_rcu_pending (struct seq_file *m,void *unused) { +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_puts (m,"rcu_preempt:\n" ); +print_rcu_pendings (m, &rcu_preempt_state); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_puts (m,"rcu_sched:\n" );print_rcu_pendings (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );
RFC PATCH 2/4 v2 Renamings to increase RCU clarity.
In reply to Paul E. McKenneyFrom: Paul E. McKenney <[email protected]>
Make RCU-sched, RCU-bh, and RCU-preempt be underlying implementations, with "RCU" defined in terms of one of the three. Update the outdated rcu_qsctr_inc() names, as these functions no longer increment anything.
--- Documentation/RCU/trace.txt | 7 ++-- include/linux/rcupdate.h | 21 +++++++++--- include/linux/rcupreempt.h | 4 +- include/linux/rcutree.h | 8 +++-- kernel/rcupreempt.c | 8 ++-- kernel/rcutree.c | 78 +++++++++++++++++++++++++++---------------- kernel/rcutree.h | 4 +- kernel/rcutree_trace.c | 20 +++++----- kernel/sched.c | 2 +- kernel/softirq.c | 4 +- 10 files changed, 94 insertions(+), 62 deletions(-)
Documentation/RCU/trace.txt +3 -4
@@ -191,8 +191,7 @@ rcu/rcuhier (which displays the struct rcu_node hierarchy). The output of "cat rcu/rcudata" looks as follows: -rcu: -rcu: +rcu_sched: 0 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=10951/1 dn=0 df=1101 of=0 ri=36 ql=0 b=10 1 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=16117/1 dn=0 df=1015 of=0 ri=0 ql=0 b=10 2 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=1445/1 dn=0 df=1839 of=0 ri=0 ql=0 b=10
@@ -306,7 +305,7 @@ comma-separated-variable spreadsheet format. The output of "cat rcu/rcugp" looks as follows: -rcu: completed=33062 gpnum=33063 +rcu_sched: completed=33062 gpnum=33063 rcu_bh: completed=464 gpnum=464 Again, this output is for both "rcu" and "rcu_bh". The fields are
@@ -413,7 +412,7 @@ o Each element of the form "1/1 0:127 ^0" represents one struct The output of "cat rcu/rcu_pending" looks as follows: -rcu: +rcu_sched: 0 np=255892 qsp=53936 cbr=0 cng=14417 gpc=10033 gps=24320 nf=6445 nn=146741 1 np=261224 qsp=54638 cbr=0 cng=25723 gpc=16310 gps=2849 nf=5912 nn=155792 2 np=237496 qsp=49664 cbr=0 cng=2762 gpc=45478 gps=1762 nf=1201 nn=136629
include/linux/rcupdate.h +16 -5
@@ -157,17 +157,28 @@ extern int rcu_scheduler_active;* - call_rcu_sched() and rcu_barrier_sched() * on the write-side to insure proper synchronization. */ -#define rcu_read_lock_sched () preempt_disable() -#define rcu_read_lock_sched_notrace () preempt_disable_notrace() +static inline void rcu_read_lock_sched (void ) +{ +preempt_disable (); +} +static inline void rcu_read_lock_sched_notrace (void ) +{ +preempt_disable_notrace (); +}/* * rcu_read_unlock_sched - marks the end of a RCU-classic critical section * * See rcu_read_lock_sched for more information. */ -#define rcu_read_unlock_sched () preempt_enable() -#define rcu_read_unlock_sched_notrace () preempt_enable_notrace() - +static inline void rcu_read_unlock_sched (void ) +{ +preempt_enable (); +} +static inline void rcu_read_unlock_sched_notrace (void ) +{ +preempt_enable_notrace (); +}/**
include/linux/rcupreempt.h +2 -2
@@ -40,8 +40,8 @@#include <linux/cpumask.h> #include <linux/seqlock.h> -extern void rcu_qsctr_inc (int cpu); -static inline void rcu_bh_qsctr_inc (int cpu) { } +extern void rcu_sched_qs (int cpu); +static inline void rcu_bh_qs (int cpu) { }/* * Someone might want to pass call_rcu_bh as a function pointer.
include/linux/rcutree.h +5 -3
@@ -30,8 +30,8 @@#ifndef __LINUX_RCUTREE_H#define __LINUX_RCUTREE_H -extern void rcu_qsctr_inc (int cpu); -extern void rcu_bh_qsctr_inc (int cpu); +extern void rcu_sched_qs (int cpu); +extern void rcu_bh_qs (int cpu);extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu);
@@ -73,7 +73,8 @@ static inline void __rcu_read_unlock_bh(void)#define __synchronize_sched () synchronize_rcu() -#define call_rcu_sched (head, func) call_rcu(head, func) +extern void call_rcu_sched (struct rcu_head *head, +void (*func)(struct rcu_head *rcu));static inline void synchronize_rcu_expedited (void ) {
@@ -91,6 +92,7 @@ extern void rcu_restart_cpu(int cpu);extern long rcu_batches_completed (void );extern long rcu_batches_completed_bh (void ); +extern long rcu_batches_completed_sched (void );static inline void rcu_init_sched (void ) {
kernel/rcupreempt.c +4 -4
@@ -159,7 +159,7 @@ static DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_dyntick_sched, rcu_dyntick_sched .dynticks = 1, }; -void rcu_qsctr_inc (int cpu) +void rcu_sched_qs (int cpu) {struct rcu_dyntick_sched *rdssp = &per_cpu (rcu_dyntick_sched, cpu);
@@ -967,12 +967,12 @@ void rcu_check_callbacks(int cpu, int user)* If this CPU took its interrupt from user mode or from the * idle loop, and this is not a nested interrupt, then * this CPU has to have exited all prior preept-disable -* sections of code. So increment the counter to note this. +* sections of code. So invoke rcu_sched_qs() to note this. * * The memory barrier is needed to handle the case where * writes from a preempt-disable section of code get reordered * into schedule() by this CPU's write buffer. So the memory -* barrier makes sure that the rcu_qsctr_inc() is seen by other +* barrier makes sure that the rcu_sched_qs() is seen by other * CPUs to happen after any such write. */
@@ -980,7 +980,7 @@ void rcu_check_callbacks(int cpu, int user) (idle_cpu(cpu) && !in_softirq() && hardirq_count() <= (1 << HARDIRQ_SHIFT))) {smp_mb ();/* Guard against aggressive schedule(). */ -rcu_qsctr_inc (cpu); +rcu_sched_qs (cpu); }rcu_check_mb (cpu);
kernel/rcutree.c +49 -29
184 lines not on this page · raw message
kernel/rcutree.h +2 -2
@@ -238,8 +238,8 @@ struct rcu_state {/* * RCU implementation internal declarations: */ -extern struct rcu_state rcu_state; -DECLARE_PER_CPU(struct rcu_data, rcu_data); +extern struct rcu_state rcu_sched_state; +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);
kernel/rcutree_trace.c +10 -10
@@ -77,8 +77,8 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)static int show_rcudata (struct seq_file *m,void *unused) { -seq_puts (m,"rcu:\n" ); -PRINT_RCU_DATA (rcu_data, print_one_rcu_data, m); +seq_puts (m,"rcu_sched:\n" ); +PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data, m);seq_puts (m,"rcu_bh:\n" );PRINT_RCU_DATA (rcu_bh_data, print_one_rcu_data, m);return 0 ;
@@ -125,8 +125,8 @@ static int show_rcudata_csv(struct seq_file *m, void *unused)seq_puts (m,"\"dt\",\"dt nesting\",\"dn\",\"df\"," );#endif /* #ifdef CONFIG_NO_HZ */ seq_puts (m,"\"of\",\"ri\",\"ql\",\"b\"\n" ); -seq_puts (m,"\"rcu:\"\n" ); -PRINT_RCU_DATA (rcu_data, print_one_rcu_data_csv, m); +seq_puts (m,"\"rcu_sched:\"\n" ); +PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data_csv, m);seq_puts (m,"\"rcu_bh:\"\n" );PRINT_RCU_DATA (rcu_bh_data, print_one_rcu_data_csv, m);return 0 ;
@@ -172,8 +172,8 @@ static void print_one_rcu_state(struct seq_file *m, struct rcu_state *rsp)static int show_rcuhier (struct seq_file *m,void *unused) { -seq_puts (m,"rcu:\n" ); -print_one_rcu_state (m, &rcu_state); +seq_puts (m,"rcu_sched:\n" ); +print_one_rcu_state (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );print_one_rcu_state (m, &rcu_bh_state);return 0 ;
@@ -194,8 +194,8 @@ static struct file_operations rcuhier_fops = {static int show_rcugp (struct seq_file *m,void *unused) { -seq_printf (m,"rcu: completed=%ld gpnum=%ld\n" , - rcu_state.completed, rcu_state.gpnum); +seq_printf (m,"rcu_sched: completed=%ld gpnum=%ld\n" , + rcu_sched_state.completed, rcu_sched_state.gpnum);seq_printf (m,"rcu_bh: completed=%ld gpnum=%ld\n" , rcu_bh_state.completed, rcu_bh_state.gpnum);return 0 ;
@@ -244,8 +244,8 @@ static void print_rcu_pendings(struct seq_file *m, struct rcu_state *rsp)static int show_rcu_pending (struct seq_file *m,void *unused) { -seq_puts (m,"rcu:\n" ); -print_rcu_pendings (m, &rcu_state); +seq_puts (m,"rcu_sched:\n" ); +print_rcu_pendings (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );print_rcu_pendings (m, &rcu_bh_state);return 0 ;
kernel/sched.c +1 -1
@@ -5302,7 +5302,7 @@ need_resched:preempt_disable (); cpu =smp_processor_id (); rq =cpu_rq (cpu); -rcu_qsctr_inc (cpu); +rcu_sched_qs (cpu); prev = rq->curr; switch_count = &prev->nivcsw;
kernel/softirq.c +2 -2
@@ -227,7 +227,7 @@ restart:preempt_count () = prev_count; } -rcu_bh_qsctr_inc (cpu); +rcu_bh_qs (cpu); } h++; pending >>=1 ;
@@ -659,7 +659,7 @@ static int ksoftirqd(void * __bind_cpu)preempt_enable_no_resched ();cond_resched ();preempt_disable (); -rcu_qsctr_inc ((long )__bind_cpu); +rcu_sched_qs ((long )__bind_cpu); }preempt_enable ();set_current_state (TASK_INTERRUPTIBLE );
Signature · 1 line
1.5.2.5
RFC PATCH 1/4 v2 Move private definitions from include/linux/rcutree.h to kernel/rcutree.h
In reply to Paul E. McKenneySome information hiding that makes it easier to merge preemptability into rcutree without descending into #include hell.
--- include/linux/rcutree.h | 211 ----------------------------------------- kernel/rcutree.c | 2 + kernel/rcutree.h | 238 +++++++++++++++++++++++++++++++++++++++++++++++ kernel/rcutree_trace.c | 1 + 4 files changed, 241 insertions(+), 211 deletions(-)
include/linux/rcutree.h +0 -211
@@ -30,217 +30,6 @@#ifndef __LINUX_RCUTREE_H#define __LINUX_RCUTREE_H -#include <linux/cache.h> -#include <linux/spinlock.h> -#include <linux/threads.h> -#include <linux/cpumask.h> -#include <linux/seqlock.h> - -/* -* Define shape of hierarchy based on NR_CPUS and CONFIG_RCU_FANOUT. -* In theory, it should be possible to add more levels straightforwardly. -* In practice, this has not been tested, so there is probably some -* bug somewhere. -*/ -#define MAX_RCU_LVLS 3 -#define RCU_FANOUT (CONFIG_RCU_FANOUT) -#define RCU_FANOUT_SQ (RCU_FANOUT * RCU_FANOUT) -#define RCU_FANOUT_CUBE (RCU_FANOUT_SQ * RCU_FANOUT) - -#if NR_CPUS <=RCU_FANOUT -# define NUM_RCU_LVLS 1 -# define NUM_RCU_LVL_0 1 -# define NUM_RCU_LVL_1 (NR_CPUS) -# define NUM_RCU_LVL_2 0 -# define NUM_RCU_LVL_3 0 -#elif NR_CPUS <=RCU_FANOUT_SQ -# define NUM_RCU_LVLS 2 -# define NUM_RCU_LVL_0 1 -# define NUM_RCU_LVL_1 (((NR_CPUS) + RCU_FANOUT - 1) / RCU_FANOUT) -# define NUM_RCU_LVL_2 (NR_CPUS) -# define NUM_RCU_LVL_3 0 -#elif NR_CPUS <=RCU_FANOUT_CUBE -# define NUM_RCU_LVLS 3 -# define NUM_RCU_LVL_0 1 -# define NUM_RCU_LVL_1 (((NR_CPUS) + RCU_FANOUT_SQ - 1) / RCU_FANOUT_SQ) -# define NUM_RCU_LVL_2 (((NR_CPUS) + (RCU_FANOUT) - 1) / (RCU_FANOUT)) -# define NUM_RCU_LVL_3 NR_CPUS -#else -# error "CONFIG_RCU_FANOUT insufficient for NR_CPUS" -#endif /* #if (NR_CPUS) <= RCU_FANOUT */ - -#define RCU_SUM (NUM_RCU_LVL_0 + NUM_RCU_LVL_1 + NUM_RCU_LVL_2 + NUM_RCU_LVL_3) -#define NUM_RCU_NODES (RCU_SUM - NR_CPUS) - -/* -* Dynticks per-CPU state. -*/ -struct rcu_dynticks { -int dynticks_nesting;/* Track nesting level, sort of. */ -int dynticks;/* Even value for dynticks-idle, else odd. */ -int dynticks_nmi;/* Even value for either dynticks-idle or */ -/* not in nmi handler, else odd. So this */ -/* remains even for nmi from irq handler. */ -}; - -/* -* Definition for node within the RCU grace-period-detection hierarchy. -*/ -struct rcu_node { -spinlock_t lock; -unsigned long qsmask;/* CPUs or groups that need to switch in */ -/* order for current grace period to proceed.*/ -unsigned long qsmaskinit; -/* Per-GP initialization for qsmask. */ -unsigned long grpmask;/* Mask to apply to parent qsmask. */ -int grplo;/* lowest-numbered CPU or group here. */ -int grphi;/* highest-numbered CPU or group here. */ -u8 grpnum;/* CPU/group number for next level up. */ -u8 level;/* root is at level 0. */ -struct rcu_node *parent; -}____cacheline_internodealigned_in_smp ; - -/* Index values for nxttail array in struct rcu_data. */ -#define RCU_DONE_TAIL 0/* Also RCU_WAIT head. */ -#define RCU_WAIT_TAIL 1/* Also RCU_NEXT_READY head. */ -#define RCU_NEXT_READY_TAIL 2/* Also RCU_NEXT head. */ -#define RCU_NEXT_TAIL 3 -#define RCU_NEXT_SIZE 4 - -/* Per-CPU data for read-copy update. */ -struct rcu_data { -/* 1) quiescent-state and grace-period handling : */ -long completed;/* Track rsp->completed gp number */ -/* in order to detect GP end. */ -long gpnum;/* Highest gp number that this CPU */ -/* is aware of having started. */ -long passed_quiesc_completed; -/* Value of completed at time of qs. */ -bool passed_quiesc;/* User-mode/idle loop etc. */ -bool qs_pending;/* Core waits for quiesc state. */ -bool beenonline;/* CPU online at least once. */ -struct rcu_node *mynode;/* This CPU's leaf of hierarchy */ -unsigned long grpmask;/* Mask to apply to leaf qsmask. */ - -/* 2) batch handling */ -/* -* If nxtlist is not NULL, it is partitioned as follows. -* Any of the partitions might be empty, in which case the -* pointer to that partition will be equal to the pointer for -* the following partition. When the list is empty, all of -* the nxttail elements point to nxtlist, which is NULL. -* -* [*nxttail[RCU_NEXT_READY_TAIL], NULL = *nxttail[RCU_NEXT_TAIL]): -* Entries that might have arrived after current GP ended -* [*nxttail[RCU_WAIT_TAIL], *nxttail[RCU_NEXT_READY_TAIL]): -* Entries known to have arrived before current GP ended -* [*nxttail[RCU_DONE_TAIL], *nxttail[RCU_WAIT_TAIL]): -* Entries that batch # <= ->completed - 1: waiting for current GP -* [nxtlist, *nxttail[RCU_DONE_TAIL]): -* Entries that batch # <= ->completed -* The grace period for these entries has completed, and -* the other grace-period-completed entries may be moved -* here temporarily in rcu_process_callbacks(). -*/ -struct rcu_head *nxtlist; -struct rcu_head **nxttail[RCU_NEXT_SIZE ]; -long qlen;/* # of queued callbacks */ -long blimit;/* Upper limit on a processed batch */ - -#ifdef CONFIG_NO_HZ -/* 3) dynticks interface. */ -struct rcu_dynticks *dynticks;/* Shared per-CPU dynticks state. */ -int dynticks_snap;/* Per-GP tracking for dynticks. */ -int dynticks_nmi_snap;/* Per-GP tracking for dynticks_nmi. */ -#endif /* #ifdef CONFIG_NO_HZ */ - -/* 4) reasons this CPU needed to be kicked by force_quiescent_state */ -#ifdef CONFIG_NO_HZ -unsigned long dynticks_fqs;/* Kicked due to dynticks idle. */ -#endif /* #ifdef CONFIG_NO_HZ */ -unsigned long offline_fqs;/* Kicked due to being offline. */ -unsigned long resched_ipi;/* Sent a resched IPI. */ - -/* 5) __rcu_pending() statistics. */ -long n_rcu_pending;/* rcu_pending() calls since boot. */ -long n_rp_qs_pending; -long n_rp_cb_ready; -long n_rp_cpu_needs_gp; -long n_rp_gp_completed; -long n_rp_gp_started; -long n_rp_need_fqs; -long n_rp_need_nothing; - -int cpu; -}; - -/* Values for signaled field in struct rcu_state. */ -#define RCU_GP_INIT 0/* Grace period being initialized. */ -#define RCU_SAVE_DYNTICK 1/* Need to scan dyntick state. */ -#define RCU_FORCE_QS 2/* Need to force quiescent state. */ -#ifdef CONFIG_NO_HZ -#define RCU_SIGNAL_INIT RCU_SAVE_DYNTICK -#else /* #ifdef CONFIG_NO_HZ */ -#define RCU_SIGNAL_INIT RCU_FORCE_QS -#endif /* #else #ifdef CONFIG_NO_HZ */ - -#define RCU_JIFFIES_TILL_FORCE_QS 3/* for rsp->jiffies_force_qs */ -#ifdef CONFIG_RCU_CPU_STALL_DETECTOR -#define RCU_SECONDS_TILL_STALL_CHECK (10 * HZ)/* for rsp->jiffies_stall */ -#define RCU_SECONDS_TILL_STALL_RECHECK (30 * HZ)/* for rsp->jiffies_stall */ -#define RCU_STALL_RAT_DELAY 2/* Allow other CPUs time */ -/* to take at least one */ -/* scheduling clock irq */ -/* before ratting on them. */ - -#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ - -/* -* RCU global state, including node hierarchy. This hierarchy is -* represented in "heap" form in a dense array. The root (first level) -* of the hierarchy is in ->node[0] (referenced by ->level[0]), the second -* level in ->node[1] through ->node[m] (->node[1] referenced by ->level[1]), -* and the third level in ->node[m+1] and following (->node[m+1] referenced -* by ->level[2]). The number of levels is determined by the number of -* CPUs and by CONFIG_RCU_FANOUT. Small systems will have a "hierarchy" -* consisting of a single rcu_node. -*/ -struct rcu_state { -struct rcu_node node[NUM_RCU_NODES ];/* Hierarchy. */ -struct rcu_node *level[NUM_RCU_LVLS ];/* Hierarchy levels. */ -u32 levelcnt[MAX_RCU_LVLS +1 ];/* # nodes in each level. */ -u8 levelspread[NUM_RCU_LVLS ];/* kids/node in each level. */ -struct rcu_data *rda[NR_CPUS ];/* array of rdp pointers. */ - -/* The following fields are guarded by the root rcu_node's lock. */ - -u8 signaled____cacheline_internodealigned_in_smp ; -/* Force QS state. */ -long gpnum;/* Current gp number. */ -long completed;/* # of last completed gp. */ -spinlock_t onofflock;/* exclude on/offline and */ -/* starting new GP. */ -spinlock_t fqslock;/* Only one task forcing */ -/* quiescent states. */ -unsigned long jiffies_force_qs;/* Time at which to invoke */ -/* force_quiescent_state(). */ -unsigned long n_force_qs;/* Number of calls to */ -/* force_quiescent_state(). */ -unsigned long n_force_qs_lh;/* ~Number of calls leaving */ -/* due to lock unavailable. */ -unsigned long n_force_qs_ngp;/* Number of calls leaving */ -/* due to no GP active. */ -#ifdef CONFIG_RCU_CPU_STALL_DETECTOR -unsigned long gp_start;/* Time at which GP started, */ -/* but in jiffies. */ -unsigned long jiffies_stall;/* Time at which to check */ -/* for CPU stalls. */ -#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ -#ifdef CONFIG_NO_HZ -long dynticks_completed;/* Value of completed @ snap. */ -#endif /* #ifdef CONFIG_NO_HZ */ -}; -extern void rcu_qsctr_inc (int cpu);extern void rcu_bh_qsctr_inc (int cpu);
kernel/rcutree.c +2 -0
@@ -46,6 +46,8 @@#include <linux/mutex.h> #include <linux/time.h> +#include "rcutree.h" +#ifdef CONFIG_DEBUG_LOCK_ALLOC static struct lock_class_key rcu_lock_key; struct lockdep_map rcu_lock_map =
kernel/rcutree.h +238 -0
244 lines not on this page · raw message
kernel/rcutree_trace.c +1 -0
@@ -43,6 +43,7 @@#include <linux/debugfs.h> #include <linux/seq_file.h> +#define RCU_TREE_NONCORE #include "rcutree.h" static void print_one_rcu_data (struct seq_file *m,struct rcu_data *rdp)
Signature · 1 line
1.5.2.5
Quoted 70 lines · Paul E. McKenney
[Not yet for inclusion, but making good progress.]
This patchset contains some RCU cleanups as follows:
o Move private definitions from
include/linux/rcutree.hto
kernel/rcutree.ho Rename variables and functions so that RCU-sched is an
underlying definition, along with RCU-bh and (when so configured) RCU-preempt. RCU then maps to either RCU-sched or RCU-preempt, depending on configuration.o Consolidate sparse and lockdep into
include/linux/rcupdate.h
so that all RCU implementations are set up properly.With these in place, we add configurable preemptable-RCU functionality to
kernel/rcutree.c. This new implementation has much faster and simpler read-side primitives (roughly that of Classic RCU built withCONFIG_PREEMPT), and has update-side performance equal to Classic RCU (at least in absence of blocking/preemption of read-side critical sections). This new implementation should eventually replace the old preemptable RCU, which would remove 2099 lines of code from the kernel, for a net removal of more than 1000 lines of code.This patchset is undoubtably buggy, and does not have RCU priority boosting, though it does have the necessary tracking of tasks blocked in RCU read-side critical sections.
Changes from v1 (http://lkml.org/lkml/2009/7/23/294):
o Fixes some locking problems detected by lockdep.
o Disable irqs in quiescent-state-detection code, and fix handling
of scheduling-clock interrupt always occurring in RCU read-side critical section.o Fix sparse annotations.
o Apply feedback from Mathieu Desnoyers.
o Fix x86 kernel-build errors.
o Now passes moderate (multi-hour) rcutorture tests.
Shortcomings:
o Only moderately tested, probably still quite buggy. CPU hotplug
not yet tested heavily, for example.o Probably does not even compile for all of the relevant
combinations of kernel configuration variables.o Lacks RCU priority boosting.
b/Documentation/RCU/trace.txt | 7 b/include/linux/init_task.h | 15 + b/include/linux/rcupdate.h | 21 +- b/include/linux/rcupreempt.h | 4 b/include/linux/rcutree.h | 211 -------------------- b/include/linux/sched.h | 37 +++ b/init/Kconfig | 22 +- b/kernel/Makefile | 1 b/kernel/exit.c | 1 b/kernel/fork.c | 5 b/kernel/rcupreempt.c | 8 b/kernel/rcutree.c | 2 b/kernel/rcutree.h | 238 +++++++++++++++++++++++ b/kernel/rcutree_plugin.h | 428 ++++++++++++++++++++++++++++++++++++++++++ b/kernel/rcutree_trace.c | 2 b/kernel/sched.c | 2
Quoted 8 lines
b/kernel/softirq.c | 5 include/linux/rcupdate.h | 48 ++++ include/linux/rcupreempt.h | 8 include/linux/rcutree.h | 43 ++-- kernel/rcutree.c | 207 +++++++++++++------- kernel/rcutree.h | 13 + kernel/rcutree_trace.c | 40 ++- 23 files changed, 1018 insertions(+), 350 deletions(-)
The structure looks really nice. If feasible i'd suggest to remove preemptible-rcu in this same patch-set as well, to simplify the testing matrix and to get the net code removal effect as well.
An added benefit is that that way the -rt folks will test out the new preemptible-rcu code with enthusiasm as well ;-)
Ingo
Quoted 82 lines · Ingo Molnar
Quoted 70 lines · Paul E. McKenney
[Not yet for inclusion, but making good progress.]
This patchset contains some RCU cleanups as follows:
o Move private definitions from
include/linux/rcutree.hto
kernel/rcutree.ho Rename variables and functions so that RCU-sched is an
underlying definition, along with RCU-bh and (when so configured) RCU-preempt. RCU then maps to either RCU-sched or RCU-preempt, depending on configuration.o Consolidate sparse and lockdep into
include/linux/rcupdate.h
so that all RCU implementations are set up properly.With these in place, we add configurable preemptable-RCU functionality to
kernel/rcutree.c. This new implementation has much faster and simpler read-side primitives (roughly that of Classic RCU built withCONFIG_PREEMPT), and has update-side performance equal to Classic RCU (at least in absence of blocking/preemption of read-side critical sections). This new implementation should eventually replace the old preemptable RCU, which would remove 2099 lines of code from the kernel, for a net removal of more than 1000 lines of code.This patchset is undoubtably buggy, and does not have RCU priority boosting, though it does have the necessary tracking of tasks blocked in RCU read-side critical sections.
Changes from v1 (http://lkml.org/lkml/2009/7/23/294):
o Fixes some locking problems detected by lockdep.
o Disable irqs in quiescent-state-detection code, and fix handling
of scheduling-clock interrupt always occurring in RCU read-side critical section.o Fix sparse annotations.
o Apply feedback from Mathieu Desnoyers.
o Fix x86 kernel-build errors.
o Now passes moderate (multi-hour) rcutorture tests.
Shortcomings:
o Only moderately tested, probably still quite buggy. CPU hotplug
not yet tested heavily, for example.o Probably does not even compile for all of the relevant
combinations of kernel configuration variables.o Lacks RCU priority boosting.
b/Documentation/RCU/trace.txt | 7 b/include/linux/init_task.h | 15 + b/include/linux/rcupdate.h | 21 +- b/include/linux/rcupreempt.h | 4 b/include/linux/rcutree.h | 211 -------------------- b/include/linux/sched.h | 37 +++ b/init/Kconfig | 22 +- b/kernel/Makefile | 1 b/kernel/exit.c | 1 b/kernel/fork.c | 5 b/kernel/rcupreempt.c | 8 b/kernel/rcutree.c | 2 b/kernel/rcutree.h | 238 +++++++++++++++++++++++ b/kernel/rcutree_plugin.h | 428 ++++++++++++++++++++++++++++++++++++++++++ b/kernel/rcutree_trace.c | 2 b/kernel/sched.c | 2Quoted 8 lines
b/kernel/softirq.c | 5 include/linux/rcupdate.h | 48 ++++ include/linux/rcupreempt.h | 8 include/linux/rcutree.h | 43 ++-- kernel/rcutree.c | 207 +++++++++++++------- kernel/rcutree.h | 13 + kernel/rcutree_trace.c | 40 ++- 23 files changed, 1018 insertions(+), 350 deletions(-)
Quoted 3 lines
The structure looks really nice. If feasible i'd suggest to remove preemptible-rcu in this same patch-set as well, to simplify the testing matrix and to get the net code removal effect as well.
Glad you like it, and I do like the idea of removing the old rcupreempt in the same patch set. I will include that in the next submission. Currently having strange problems with CPU hotplug -- RCU does just fine, but CPU hotplug operations hang. Might be related to the problem that you have been seeing.
Quoted 2 lines
An added benefit is that that way the -rt folks will test out the new preemptible-rcu code with enthusiasm as well ;-)
;-)
Thanx, Paul
PATCH 1/1 v3 Consolidate sparse and lockdep declarations in include/linux/rcupdate.h
In reply to Paul E. McKenneyFrom: Paul E. McKenney <[email protected]>
--- include/linux/rcupdate.h | 46 ++++++++++++++++++++++++++++++++++++++++--- include/linux/rcupreempt.h | 4 +- include/linux/rcutree.h | 18 ----------------- 3 files changed, 44 insertions(+), 24 deletions(-)
include/linux/rcupdate.h +42 -4
@@ -80,6 +80,16 @@ extern int rcu_scheduler_active; (ptr)->next =NULL ; (ptr)->func =NULL ; \ } while (0) +#ifdef CONFIG_DEBUG_LOCK_ALLOC +extern struct lockdep_map rcu_lock_map; +# define rcu_read_acquire () \ + lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) +# define rcu_read_release () lock_release(&rcu_lock_map, 1, _THIS_IP_) +#else +# define rcu_read_acquire () do { } while (0) +# define rcu_read_release () do { } while (0) +#endif +/** * rcu_read_lock - mark the beginning of an RCU read-side critical section. *
@@ -109,7 +119,12 @@ extern int rcu_scheduler_active;* * It is illegal to block while in an RCU read-side critical section. */ -#define rcu_read_lock () __rcu_read_lock() +static inline void rcu_read_lock (void ) +{ +__rcu_read_lock (); +__acquire (RCU ); +rcu_read_acquire (); +}/** * rcu_read_unlock - marks the end of an RCU read-side critical section.
@@ -126,7 +141,12 @@ extern int rcu_scheduler_active;* used as well. RCU does not care how the writers keep out of each * others' way, as long as they do so. */ -#define rcu_read_unlock () __rcu_read_unlock() +static inline void rcu_read_unlock (void ) +{ +rcu_read_release (); +__release (RCU ); +__rcu_read_unlock (); +}/** * rcu_read_lock_bh - mark the beginning of a softirq-only RCU critical section
@@ -139,14 +159,24 @@ extern int rcu_scheduler_active;* can use just rcu_read_lock(). * */ -#define rcu_read_lock_bh () __rcu_read_lock_bh() +static inline void rcu_read_lock_bh (void ) +{ +__rcu_read_lock_bh (); +__acquire (RCU_BH ); +rcu_read_acquire (); +}/* * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section * * See rcu_read_lock_bh() for more information. */ -#define rcu_read_unlock_bh () __rcu_read_unlock_bh() +static inline void rcu_read_unlock_bh (void ) +{ +rcu_read_release (); +__release (RCU_BH ); +__rcu_read_unlock_bh (); +}/** * rcu_read_lock_sched - mark the beginning of a RCU-classic critical section
@@ -160,10 +190,14 @@ extern int rcu_scheduler_active;static inline void rcu_read_lock_sched (void ) {preempt_disable (); +__acquire (RCU_SCHED ); +rcu_read_acquire (); }static inline void rcu_read_lock_sched_notrace (void ) {preempt_disable_notrace (); +__acquire (RCU_SCHED ); +rcu_read_acquire (); }/*
@@ -173,10 +207,14 @@ static inline void rcu_read_lock_sched_notrace(void)*/ static inline void rcu_read_unlock_sched (void ) { +rcu_read_release (); +__release (RCU_SCHED );preempt_enable (); }static inline void rcu_read_unlock_sched_notrace (void ) { +rcu_read_release (); +__release (RCU_SCHED );preempt_enable_notrace (); }
include/linux/rcupreempt.h +2 -2
@@ -64,8 +64,8 @@ static inline void rcu_bh_qs(int cpu) { }extern void call_rcu_sched (struct rcu_head *head,void (*func)(struct rcu_head *head)); -extern void __rcu_read_lock(void) __acquires(RCU); -extern void __rcu_read_unlock(void) __releases(RCU); +extern void __rcu_read_lock (void ); +extern void __rcu_read_unlock (void );extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu);
include/linux/rcutree.h +0 -18
@@ -36,38 +36,20 @@ extern void rcu_bh_qs(int cpu);extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu); -#ifdef CONFIG_DEBUG_LOCK_ALLOC -extern struct lockdep_map rcu_lock_map; -# define rcu_read_acquire () \ - lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) -# define rcu_read_release () lock_release(&rcu_lock_map, 1, _THIS_IP_) -#else -# define rcu_read_acquire () do { } while (0) -# define rcu_read_release () do { } while (0) -#endif -static inline void __rcu_read_lock (void ) {preempt_disable (); -__acquire (RCU ); -rcu_read_acquire (); }static inline void __rcu_read_unlock (void ) { -rcu_read_release (); -__release (RCU );preempt_enable (); }static inline void __rcu_read_lock_bh (void ) {local_bh_disable (); -__acquire (RCU_BH ); -rcu_read_acquire (); }static inline void __rcu_read_unlock_bh (void ) { -rcu_read_release (); -__release (RCU_BH );local_bh_enable (); }
Signature · 1 line
1.5.2.5
PATCH 1/1 v3 Fix online/offline indication for rcudata.csv trace file
In reply to Paul E. McKenneyFrom: Paul E. McKenney <[email protected]>
The heading said "Online?", but the column had "Y" for offline CPUs and "N" for online CPUs. Swap the "Y" and "N" to match the heading.
--- kernel/rcutree_trace.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
kernel/rcutree_trace.c +1 -1
@@ -103,7 +103,7 @@ static void print_one_rcu_data_csv(struct seq_file *m, struct rcu_data *rdp)return ;seq_printf (m,"%d,%s,%ld,%ld,%d,%ld,%d" , rdp->cpu, -cpu_is_offline (rdp->cpu) ?"\"Y\"" :"\"N\"" , +cpu_is_offline (rdp->cpu) ?"\"N\"" :"\"Y\"" , rdp->completed, rdp->gpnum, rdp->passed_quiesc, rdp->passed_quiesc_completed, rdp->qs_pending);
Signature · 1 line
1.5.2.5
PATCH 1/1 v3 Merge preemptable-RCU functionality into hierarchical RCU
In reply to Paul E. McKenneyFrom: Paul E. McKenney <[email protected]>
Create a kernel/rcutree_plugin.h file that contains definitions for preemptable RCU (or, under the #else branch of the #ifdef, empty definitions for the classic non-preemptable semantics). These definitions fit into plugins defined in kernel/rcutree.c for this purpose.
This variant of preemptable RCU uses a new algorithm whose read-side expense is roughly that of classic hierarchical RCU under CONFIG_PREEMPT. This new algorithm's update-side expense is similar to that of classic hierarchical RCU, and, in absence of read-side preemption or blocking, is exactly that of classic hierarchical RCU. Perhaps more important, this new algorithm has a much simpler implementation, saving well over 1,000 lines of code compared to mainline's implementation of preemptable RCU, which will hopefully be retired in favor of this new algorithm.
The simplifications are obtained by maintaining per-task nesting state for running tasks, and using a simple lock-protected algorithm to handle accounting when tasks block within RCU read-side critical sections, making use of lessons learned while creating numerous user-level RCU implementations over the past 18 months.
--- include/linux/init_task.h | 15 ++ include/linux/rcupdate.h | 2 +- include/linux/rcupreempt.h | 4 + include/linux/rcutree.h | 16 ++ include/linux/sched.h | 37 ++++ init/Kconfig | 22 ++- kernel/Makefile | 1 + kernel/exit.c | 1 + kernel/fork.c | 5 +- kernel/rcupreempt.c | 2 +- kernel/rcutree.c | 135 +++++++++----- kernel/rcutree.h | 9 + kernel/rcutree_plugin.h | 447 ++++++++++++++++++++++++++++++++++++++++++++ kernel/rcutree_trace.c | 20 ++ lib/Kconfig.debug | 2 +- 15 files changed, 662 insertions(+), 56 deletions(-) create mode 100644 kernel/rcutree_plugin.h
include/linux/init_task.h +15 -0
@@ -94,6 +94,20 @@ extern struct group_info init_groups;# define CAP_INIT_BSET CAP_INIT_EFF_SET#endif +#ifdef CONFIG_PREEMPT_RCU +#define INIT_TASK_RCU_PREEMPT (tsk) \ + .rcu_read_lock_nesting = 0, \ + .rcu_flipctr_idx = 0, +#elif defined(CONFIG_TREE_PREEMPT_RCU ) +#define INIT_TASK_RCU_PREEMPT (tsk) \ + .rcu_read_lock_nesting = 0, \ + .rcu_read_unlock_special = 0, \ + .rcu_blocked_cpu = -1, \ + .rcu_node_entry = LIST_HEAD_INIT(tsk.rcu_node_entry), +#else +#define INIT_TASK_RCU_PREEMPT (tsk) +#endif +extern struct cred init_cred;#ifdef CONFIG_PERF_COUNTERS
@@ -173,6 +187,7 @@ extern struct cred init_cred;INIT_LOCKDEP \ INIT_FTRACE_GRAPH \ INIT_TRACE_RECURSION \ + INIT_TASK_RCU_PREEMPT(tsk) \ }
include/linux/rcupdate.h +1 -1
@@ -66,7 +66,7 @@ extern void rcu_scheduler_starting(void);extern int rcu_needs_cpu (int cpu);extern int rcu_scheduler_active; -#if defined(CONFIG_TREE_RCU ) +#if defined(CONFIG_TREE_RCU ) || defined(CONFIG_TREE_PREEMPT_RCU )#include <linux/rcutree.h> #elif defined(CONFIG_PREEMPT_RCU )#include <linux/rcupreempt.h>
include/linux/rcupreempt.h +4 -0
@@ -98,6 +98,10 @@ static inline long rcu_batches_completed_bh(void)return rcu_batches_completed (); } +static inline void exit_rcu (void ) +{ +} +#ifdef CONFIG_RCU_TRACE struct rcupreempt_trace ;extern long *rcupreempt_flipctr (int cpu);
include/linux/rcutree.h +16 -0
@@ -35,14 +35,30 @@ extern void rcu_bh_qs(int cpu);extern int rcu_needs_cpu (int cpu); +#ifdef CONFIG_TREE_PREEMPT_RCU + +extern void __rcu_read_lock (void ); +extern void __rcu_read_unlock (void ); +extern void exit_rcu (void ); + +#else /* #ifdef CONFIG_TREE_PREEMPT_RCU */ +static inline void __rcu_read_lock (void ) {preempt_disable (); } +static inline void __rcu_read_unlock (void ) {preempt_enable (); } + +static inline void exit_rcu (void ) +{ +} + +#endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */ +static inline void __rcu_read_lock_bh (void ) {local_bh_disable ();
include/linux/sched.h +37 -0
@@ -1210,6 +1210,13 @@ struct task_struct {int rcu_flipctr_idx;#endif /* #ifdef CONFIG_PREEMPT_RCU */ +#ifdef CONFIG_TREE_PREEMPT_RCU +int rcu_read_lock_nesting; +char rcu_read_unlock_special; +int rcu_blocked_cpu; +struct list_head rcu_node_entry; +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ +#if defined(CONFIG_SCHEDSTATS ) || defined(CONFIG_TASK_DELAY_ACCT )struct sched_info sched_info;#endif
@@ -1723,6 +1730,36 @@ extern cputime_t task_gtime(struct task_struct *p);#define tsk_used_math (p) ((p)->flags & PF_USED_MATH)#define used_math () tsk_used_math(current) +#ifdef CONFIG_TREE_PREEMPT_RCU + +#define RCU_READ_UNLOCK_BLOCKED (1 << 0)/* blocked while in RCU read-side. */ +#define RCU_READ_UNLOCK_NEED_QS (1 << 1)/* RCU core needs CPU response. */ +#define RCU_READ_UNLOCK_GOT_QS (1 << 2)/* CPU has responded to RCU core. */ + +static inline void rcu_copy_process (struct task_struct *p) +{ + p->rcu_read_lock_nesting =0 ; + p->rcu_read_unlock_special =0 ; + p->rcu_blocked_cpu =-1 ; +INIT_LIST_HEAD (&p->rcu_node_entry); +} + +#elif defined(CONFIG_PREEMPT_RCU ) + +static inline void rcu_copy_process (struct task_struct *p) +{ + p->rcu_read_lock_nesting =0 ; + p->rcu_flipctr_idx =0 ; +} + +#else + +static inline void rcu_copy_process (struct task_struct *p) +{ +} + +#endif +#ifdef CONFIG_SMP extern int set_cpus_allowed_ptr (struct task_struct *p,const struct cpumask *new_mask);
init/Kconfig +16 -6
@@ -335,11 +335,20 @@ config PREEMPT_RCU now-naive assumptions about each RCU read-side critical section remaining on a given CPU through its execution. +config TREE_PREEMPT_RCU + bool "Preemptable tree-based hierarchical RCU" + depends on PREEMPT + help + This option selects the RCU implementation that is + designed for very large SMP systems with hundreds or + thousands of CPUs, but for which real-time response + is also required. + endchoice config RCU_TRACE bool "Enable tracing for RCU" - depends on TREE_RCU || PREEMPT_RCU + depends on TREE_RCU || PREEMPT_RCU || TREE_PREEMPT_RCU help This option provides tracing in RCU which presents stats in debugfs for debugging RCU implementation.
@@ -351,7 +360,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 + depends on TREE_RCU || TREE_PREEMPT_RCU default 64 if 64BIT default 32 if !64BIT help
@@ -366,7 +375,7 @@ config RCU_FANOUT config RCU_FANOUT_EXACT bool "Disable tree-based hierarchical RCU auto-balancing" - depends on TREE_RCU + depends on TREE_RCU || TREE_PREEMPT_RCU default n help This option forces use of the exact RCU_FANOUT value specified,
@@ -379,11 +388,12 @@ config RCU_FANOUT_EXACT Say N if unsure. config TREE_RCU_TRACE - def_bool RCU_TRACE && TREE_RCU + def_bool RCU_TRACE && ( TREE_RCU || TREE_PREEMPT_RCU ) select DEBUG_FS help - This option provides tracing for the TREE_RCU implementation, - permitting Makefile to trivially select kernel/rcutree_trace.c. + This option provides tracing for the TREE_RCU and + TREE_PREEMPT_RCU implementations, permitting Makefile to + trivially select kernel/rcutree_trace.c. config PREEMPT_RCU_TRACE def_bool RCU_TRACE && PREEMPT_RCU
kernel/Makefile +1 -0
@@ -81,6 +81,7 @@ obj-$(CONFIG_GENERIC_HARDIRQS) += irq/ obj-$(CONFIG_SECCOMP) += seccomp.o obj-$(CONFIG_RCU_TORTURE_TEST) += rcutorture.o obj-$(CONFIG_TREE_RCU) += rcutree.o +obj-$(CONFIG_TREE_PREEMPT_RCU) += rcutree.o obj-$(CONFIG_PREEMPT_RCU) += rcupreempt.o obj-$(CONFIG_TREE_RCU_TRACE) += rcutree_trace.o obj-$(CONFIG_PREEMPT_RCU_TRACE) += rcupreempt_trace.o
kernel/exit.c +1 -0
@@ -1010,6 +1010,7 @@ NORET_TYPE void do_exit(long code)__free_pipe_info (tsk->splice_pipe);preempt_disable (); +exit_rcu ();/* causes final put_task_struct in finish_task_switch(). */ tsk->state =TASK_DEAD ;schedule ();
kernel/fork.c +1 -4
@@ -1022,10 +1022,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,copy_flags (clone_flags, p);INIT_LIST_HEAD (&p->children);INIT_LIST_HEAD (&p->sibling); -#ifdef CONFIG_PREEMPT_RCU - p->rcu_read_lock_nesting =0 ; - p->rcu_flipctr_idx =0 ; -#endif /* #ifdef CONFIG_PREEMPT_RCU */ +rcu_copy_process (p); p->vfork_done =NULL ;spin_lock_init (&p->alloc_lock);
kernel/rcupreempt.c +1 -1
@@ -986,7 +986,7 @@ void rcu_check_callbacks(int cpu, int user) (idle_cpu(cpu) && !in_softirq() && hardirq_count() <= (1 << HARDIRQ_SHIFT))) {smp_mb ();/* Guard against aggressive schedule(). */ -rcu_sched_qs (cpu); +rcu_sched_qs (cpu); }rcu_check_mb (cpu);
kernel/rcutree.c +92 -43
285 lines not on this page · raw message
kernel/rcutree.h +9 -0
@@ -80,6 +80,7 @@ struct rcu_dynticks {*/ struct rcu_node {spinlock_t lock; +long gpnum;/* Current grace period for this node. */ unsigned long qsmask;/* CPUs or groups that need to switch in */ /* order for current grace period to proceed.*/ unsigned long qsmaskinit;
@@ -90,6 +91,8 @@ struct rcu_node {u8 grpnum;/* CPU/group number for next level up. */ u8 level;/* root is at level 0. */ struct rcu_node *parent; +struct list_head blocked_tasks[2 ]; +/* Tasks blocked in RCU read-side critsect. */ }____cacheline_internodealigned_in_smp ;/* Index values for nxttail array in struct rcu_data. */
@@ -111,6 +114,7 @@ struct rcu_data {bool passed_quiesc;/* User-mode/idle loop etc. */ bool qs_pending;/* Core waits for quiesc state. */ bool beenonline;/* CPU online at least once. */ +bool preemptable;/* Preemptable RCU? */ struct rcu_node *mynode;/* This CPU's leaf of hierarchy */ unsigned long grpmask;/* Mask to apply to leaf qsmask. */
@@ -244,5 +248,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 +extern struct rcu_state rcu_preempt_state; +DECLARE_PER_CPU(struct rcu_data, rcu_preempt_data); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ +#endif /* #ifdef RCU_TREE_NONCORE */
kernel/rcutree_plugin.h new file +447 -0
447 lines not on this page · raw message
kernel/rcutree_trace.c +20 -0
@@ -77,6 +77,10 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)static int show_rcudata (struct seq_file *m,void *unused) { +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_puts (m,"rcu_preempt:\n" ); +PRINT_RCU_DATA (rcu_preempt_data, print_one_rcu_data, m); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_puts (m,"rcu_sched:\n" );PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data, m);seq_puts (m,"rcu_bh:\n" );
@@ -125,6 +129,10 @@ static int show_rcudata_csv(struct seq_file *m, void *unused)seq_puts (m,"\"dt\",\"dt nesting\",\"dn\",\"df\"," );#endif /* #ifdef CONFIG_NO_HZ */ seq_puts (m,"\"of\",\"ri\",\"ql\",\"b\"\n" ); +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_puts (m,"\"rcu_preempt:\"\n" ); +PRINT_RCU_DATA (rcu_preempt_data, print_one_rcu_data_csv, m); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_puts (m,"\"rcu_sched:\"\n" );PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data_csv, m);seq_puts (m,"\"rcu_bh:\"\n" );
@@ -172,6 +180,10 @@ static void print_one_rcu_state(struct seq_file *m, struct rcu_state *rsp)static int show_rcuhier (struct seq_file *m,void *unused) { +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_puts (m,"rcu_preempt:\n" ); +print_one_rcu_state (m, &rcu_preempt_state); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_puts (m,"rcu_sched:\n" );print_one_rcu_state (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );
@@ -194,6 +206,10 @@ static struct file_operations rcuhier_fops = {static int show_rcugp (struct seq_file *m,void *unused) { +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_printf (m,"rcu_preempt: completed=%ld gpnum=%ld\n" , + rcu_preempt_state.completed, rcu_preempt_state.gpnum); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_printf (m,"rcu_sched: completed=%ld gpnum=%ld\n" , rcu_sched_state.completed, rcu_sched_state.gpnum); seq_printf(m, "rcu_bh: completed=%ld gpnum=%ld\n",
@@ -244,6 +260,10 @@ static void print_rcu_pendings(struct seq_file *m, struct rcu_state *rsp)static int show_rcu_pending (struct seq_file *m,void *unused) { +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_puts (m,"rcu_preempt:\n" ); +print_rcu_pendings (m, &rcu_preempt_state); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_puts (m,"rcu_sched:\n" );print_rcu_pendings (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );
lib/Kconfig.debug +1 -1
@@ -725,7 +725,7 @@ config RCU_TORTURE_TEST_RUNNABLE config RCU_CPU_STALL_DETECTOR bool "Check for stalled CPUs delaying RCU grace periods" - depends on CLASSIC_RCU || TREE_RCU + depends on CLASSIC_RCU || TREE_RCU || TREE_PREEMPT_RCU default n help This option causes RCU to printk information on which
Signature · 1 line
1.5.2.5
PATCH 1/1 v3 Remove CONFIG_PREEMPT_RCU
In reply to Paul E. McKenneyFrom: Paul E. McKenney <[email protected]>
Now that CONFIG_TREE_PREEMPT_RCU is in place, there is no further need for CONFIG_PREEMPT_RCU. Remove it, along with whatever subtle bugs it may (or may not) contain.
--- Documentation/RCU/rcu.txt | 10 +- Documentation/RCU/whatisRCU.txt | 8 +- include/linux/init_task.h | 6 +- include/linux/rcupdate.h | 4 +- include/linux/rcupreempt.h | 140 ---- include/linux/rcupreempt_trace.h | 97 --- include/linux/sched.h | 13 - init/Kconfig | 20 +- kernel/Makefile | 2 - kernel/rcupreempt.c | 1518 -------------------------------------- kernel/rcupreempt_trace.c | 335 --------- lib/Kconfig.debug | 2 +- 12 files changed, 13 insertions(+), 2142 deletions(-) delete mode 100644 include/linux/rcupreempt.h delete mode 100644 include/linux/rcupreempt_trace.h delete mode 100644 kernel/rcupreempt.c delete mode 100644 kernel/rcupreempt_trace.c
Documentation/RCU/rcu.txt +5 -5
@@ -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_PREEMPT_RCU) get the + Preemptible variants of RCU (CONFIG_TREE_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
@@ -79,10 +79,10 @@ 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_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. + enabled via the CONFIG_TREE_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. o Where can I find more information on RCU?
Documentation/RCU/whatisRCU.txt +4 -4
@@ -136,10 +136,10 @@ 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_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. + kernels built with CONFIG_TREE_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. Reference counts may be used in conjunction with RCU to maintain longer-term references to data structures.
include/linux/init_task.h +1 -5
@@ -94,11 +94,7 @@ extern struct group_info init_groups;# define CAP_INIT_BSET CAP_INIT_EFF_SET#endif -#ifdef CONFIG_PREEMPT_RCU -#define INIT_TASK_RCU_PREEMPT (tsk) \ - .rcu_read_lock_nesting = 0, \ - .rcu_flipctr_idx = 0, -#elif defined(CONFIG_TREE_PREEMPT_RCU ) +#ifdef CONFIG_TREE_PREEMPT_RCU #define INIT_TASK_RCU_PREEMPT (tsk) \ .rcu_read_lock_nesting = 0, \ .rcu_read_unlock_special = 0, \
include/linux/rcupdate.h +1 -3
@@ -68,11 +68,9 @@ extern int rcu_scheduler_active;#if defined(CONFIG_TREE_RCU ) || defined(CONFIG_TREE_PREEMPT_RCU )#include <linux/rcutree.h> -#elif defined(CONFIG_PREEMPT_RCU ) -#include <linux/rcupreempt.h> #else #error "Unknown RCU implementation specified to kernel configuration" -#endif /* #else #if defined(CONFIG_CLASSIC_RCU) */ +#endif #define RCU_HEAD_INIT { .next = NULL, .func = NULL }#define RCU_HEAD (head) struct rcu_head head = RCU_HEAD_INIT
include/linux/rcupreempt.h deleted +0 -140
140 lines not on this page · raw message
include/linux/rcupreempt_trace.h deleted +0 -97
97 lines not on this page · raw message
include/linux/sched.h +0 -13
@@ -1205,11 +1205,6 @@ struct task_struct {unsigned int policy;cpumask_t cpus_allowed; -#ifdef CONFIG_PREEMPT_RCU -int rcu_read_lock_nesting; -int rcu_flipctr_idx; -#endif /* #ifdef CONFIG_PREEMPT_RCU */ -#ifdef CONFIG_TREE_PREEMPT_RCU int rcu_read_lock_nesting;char rcu_read_unlock_special;
@@ -1744,14 +1739,6 @@ static inline void rcu_copy_process(struct task_struct *p) INIT_LIST_HEAD(&p->rcu_node_entry); } -#elif defined(CONFIG_PREEMPT_RCU) - -static inline void rcu_copy_process (struct task_struct *p) -{ - p->rcu_read_lock_nesting =0 ; - p->rcu_flipctr_idx =0 ; -} -#else static inline void rcu_copy_process (struct task_struct *p)
init/Kconfig +1 -19
@@ -324,17 +324,6 @@ config TREE_RCU thousands of CPUs. It also scales down nicely to smaller systems. -config PREEMPT_RCU - bool "Preemptible RCU" - depends on PREEMPT - help - This option reduces the latency of the kernel by making certain - RCU sections preemptible. Normally RCU code is non-preemptible, if - this option is selected then read-only RCU sections become - preemptible. This helps latency, but may expose bugs due to - now-naive assumptions about each RCU read-side critical section - remaining on a given CPU through its execution. - config TREE_PREEMPT_RCU bool "Preemptable tree-based hierarchical RCU" depends on PREEMPT
@@ -348,7 +337,7 @@ endchoice config RCU_TRACE bool "Enable tracing for RCU" - depends on TREE_RCU || PREEMPT_RCU || TREE_PREEMPT_RCU + depends on TREE_RCU || TREE_PREEMPT_RCU help This option provides tracing in RCU which presents stats in debugfs for debugging RCU implementation.
@@ -395,13 +384,6 @@ config TREE_RCU_TRACE TREE_PREEMPT_RCU implementations, permitting Makefile to trivially select kernel/rcutree_trace.c. -config PREEMPT_RCU_TRACE - def_bool RCU_TRACE && PREEMPT_RCU - select DEBUG_FS - help - This option provides tracing for the PREEMPT_RCU implementation, - permitting Makefile to trivially select kernel/rcupreempt_trace.c. - endmenu # "RCU Subsystem" config IKCONFIG
kernel/Makefile +0 -2
@@ -82,9 +82,7 @@ obj-$(CONFIG_SECCOMP) += seccomp.o obj-$(CONFIG_RCU_TORTURE_TEST) += rcutorture.o obj-$(CONFIG_TREE_RCU) += rcutree.o obj-$(CONFIG_TREE_PREEMPT_RCU) += rcutree.o -obj-$(CONFIG_PREEMPT_RCU) += rcupreempt.o obj-$(CONFIG_TREE_RCU_TRACE) += rcutree_trace.o -obj-$(CONFIG_PREEMPT_RCU_TRACE) += rcupreempt_trace.o obj-$(CONFIG_RELAY) += relay.o obj-$(CONFIG_SYSCTL) += utsname_sysctl.o obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
kernel/rcupreempt.c deleted +0 -1518
1,518 lines not on this page · raw message
kernel/rcupreempt_trace.c deleted +0 -335
335 lines not on this page · raw message
lib/Kconfig.debug +1 -1
@@ -725,7 +725,7 @@ config RCU_TORTURE_TEST_RUNNABLE config RCU_CPU_STALL_DETECTOR bool "Check for stalled CPUs delaying RCU grace periods" - depends on CLASSIC_RCU || TREE_RCU || TREE_PREEMPT_RCU + depends on TREE_RCU || TREE_PREEMPT_RCU default n help This option causes RCU to printk information on which
Signature · 1 line
1.5.2.5
PATCH 1/1 v3 Simplify rcu_pending()/rcu_check_callbacks() API
In reply to Paul E. McKenneyFrom: Paul E. McKenney <[email protected]>
All calls from outside RCU are of the form:
if (rcu_pending(cpu)) rcu_check_callbacks(cpu, user);
This is silly, instead we put a call to rcu_pending() in rcu_check_callbacks(), and then make the outside calls be to rcu_check_callbacks(). This cuts down on the code a bit and also gives the compiler a better chance of optimizing.
--- arch/ia64/xen/time.c | 3 +-- include/linux/rcupreempt.h | 1 - include/linux/rcutree.h | 1 - kernel/rcupreempt.c | 10 ++++++++-- kernel/rcutree.c | 5 ++++- kernel/timer.c | 3 +-- 6 files changed, 14 insertions(+), 9 deletions(-)
arch/ia64/xen/time.c +1 -2
@@ -133,8 +133,7 @@ consider_steal_time(unsigned long new_itm)account_idle_ticks (blocked);run_local_timers (); -if (rcu_pending (cpu)) -rcu_check_callbacks (cpu,user_mode (get_irq_regs ())); +rcu_check_callbacks (cpu,user_mode (get_irq_regs ()));scheduler_tick ();run_posix_cpu_timers (p);
include/linux/rcupreempt.h +0 -1
@@ -66,7 +66,6 @@ extern void call_rcu_sched(struct rcu_head *head,extern void __rcu_read_lock (void );extern void __rcu_read_unlock (void ); -extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu);#define __rcu_read_lock_bh () { rcu_read_lock(); local_bh_disable(); }
include/linux/rcutree.h +0 -1
@@ -33,7 +33,6 @@extern void rcu_sched_qs (int cpu);extern void rcu_bh_qs (int cpu); -extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu);static inline void __rcu_read_lock (void )
kernel/rcupreempt.c +8 -2
@@ -159,6 +159,8 @@ static DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_dyntick_sched, rcu_dyntick_sched .dynticks = 1, }; +static int rcu_pending (int cpu); +void rcu_sched_qs (int cpu) {struct rcu_dyntick_sched *rdssp = &per_cpu (rcu_dyntick_sched, cpu);
@@ -961,7 +963,10 @@ static void rcu_check_mb(int cpu)void rcu_check_callbacks (int cpu,int user) {unsigned long flags; -struct rcu_data *rdp =RCU_DATA_CPU (cpu); +struct rcu_data *rdp; + +if (!rcu_pending (cpu)) +return ;/* if nothing for RCU to do. */ /* * If this CPU took its interrupt from user mode or from the
@@ -976,6 +981,7 @@ void rcu_check_callbacks(int cpu, int user)* CPUs to happen after any such write. */ + rdp =RCU_DATA_CPU (cpu);if (user || (idle_cpu (cpu) && !in_softirq () &&hardirq_count () <= (1 <<HARDIRQ_SHIFT ))) {
@@ -1382,7 +1388,7 @@ int rcu_needs_cpu(int cpu) rdp->waitschedlist != NULL); } -int rcu_pending (int cpu) +static int rcu_pending (int cpu) {struct rcu_data *rdp =RCU_DATA_CPU (cpu);
kernel/rcutree.c +4 -1
@@ -111,6 +111,7 @@ static int qhimark = 10000; /* If this many pending, ignore blimit. */static int qlowmark =100 ;/* Once only this many pending, use blimit. */ static void force_quiescent_state (struct rcu_state *rsp,int relaxed); +static int rcu_pending (int cpu);/* * Return the number of RCU-sched batches processed thus far for debug & stats.
@@ -974,6 +975,8 @@ static void rcu_do_batch(struct rcu_data *rdp)*/ void rcu_check_callbacks (int cpu,int user) { +if (!rcu_pending (cpu)) +return ;/* if nothing for RCU to do. */ if (user || (idle_cpu (cpu) && rcu_scheduler_active && !in_softirq () &&hardirq_count () <= (1 <<HARDIRQ_SHIFT ))) {
@@ -1329,7 +1332,7 @@ 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. */ -int rcu_pending (int cpu) +static int rcu_pending (int cpu) {return __rcu_pending (&rcu_sched_state, &per_cpu (rcu_sched_data, cpu)) ||__rcu_pending (&rcu_bh_state, &per_cpu (rcu_bh_data, cpu));
kernel/timer.c +1 -2
@@ -1156,8 +1156,7 @@ void update_process_times(int user_tick)/* Note: this timer irq context must be accounted for as well. */ account_process_tick (p, user_tick);run_local_timers (); -if (rcu_pending (cpu)) -rcu_check_callbacks (cpu, user_tick); +rcu_check_callbacks (cpu, user_tick);printk_tick ();scheduler_tick ();run_posix_cpu_timers (p);
Signature · 1 line
1.5.2.5
PATCH 1/1 v3 Renamings to increase RCU clarity.
In reply to Paul E. McKenneyFrom: Paul E. McKenney <[email protected]>
Make RCU-sched, RCU-bh, and RCU-preempt be underlying implementations, with "RCU" defined in terms of one of the three. Update the outdated rcu_qsctr_inc() names, as these functions no longer increment anything.
--- Documentation/RCU/trace.txt | 7 ++-- include/linux/rcupdate.h | 21 ++++++++--- include/linux/rcupreempt.h | 4 +- include/linux/rcutree.h | 8 +++-- kernel/rcupreempt.c | 8 ++-- kernel/rcutree.c | 80 +++++++++++++++++++++++++++---------------- kernel/rcutree.h | 4 +- kernel/rcutree_trace.c | 20 +++++----- kernel/sched.c | 2 +- kernel/softirq.c | 4 +- 10 files changed, 95 insertions(+), 63 deletions(-)
Documentation/RCU/trace.txt +3 -4
@@ -191,8 +191,7 @@ rcu/rcuhier (which displays the struct rcu_node hierarchy). The output of "cat rcu/rcudata" looks as follows: -rcu: -rcu: +rcu_sched: 0 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=10951/1 dn=0 df=1101 of=0 ri=36 ql=0 b=10 1 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=16117/1 dn=0 df=1015 of=0 ri=0 ql=0 b=10 2 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=1445/1 dn=0 df=1839 of=0 ri=0 ql=0 b=10
@@ -306,7 +305,7 @@ comma-separated-variable spreadsheet format. The output of "cat rcu/rcugp" looks as follows: -rcu: completed=33062 gpnum=33063 +rcu_sched: completed=33062 gpnum=33063 rcu_bh: completed=464 gpnum=464 Again, this output is for both "rcu" and "rcu_bh". The fields are
@@ -413,7 +412,7 @@ o Each element of the form "1/1 0:127 ^0" represents one struct The output of "cat rcu/rcu_pending" looks as follows: -rcu: +rcu_sched: 0 np=255892 qsp=53936 cbr=0 cng=14417 gpc=10033 gps=24320 nf=6445 nn=146741 1 np=261224 qsp=54638 cbr=0 cng=25723 gpc=16310 gps=2849 nf=5912 nn=155792 2 np=237496 qsp=49664 cbr=0 cng=2762 gpc=45478 gps=1762 nf=1201 nn=136629
include/linux/rcupdate.h +16 -5
@@ -157,17 +157,28 @@ extern int rcu_scheduler_active;* - call_rcu_sched() and rcu_barrier_sched() * on the write-side to insure proper synchronization. */ -#define rcu_read_lock_sched () preempt_disable() -#define rcu_read_lock_sched_notrace () preempt_disable_notrace() +static inline void rcu_read_lock_sched (void ) +{ +preempt_disable (); +} +static inline void rcu_read_lock_sched_notrace (void ) +{ +preempt_disable_notrace (); +}/* * rcu_read_unlock_sched - marks the end of a RCU-classic critical section * * See rcu_read_lock_sched for more information. */ -#define rcu_read_unlock_sched () preempt_enable() -#define rcu_read_unlock_sched_notrace () preempt_enable_notrace() - +static inline void rcu_read_unlock_sched (void ) +{ +preempt_enable (); +} +static inline void rcu_read_unlock_sched_notrace (void ) +{ +preempt_enable_notrace (); +}/**
include/linux/rcupreempt.h +2 -2
@@ -40,8 +40,8 @@#include <linux/cpumask.h> #include <linux/seqlock.h> -extern void rcu_qsctr_inc (int cpu); -static inline void rcu_bh_qsctr_inc (int cpu) { } +extern void rcu_sched_qs (int cpu); +static inline void rcu_bh_qs (int cpu) { }/* * Someone might want to pass call_rcu_bh as a function pointer.
include/linux/rcutree.h +5 -3
@@ -30,8 +30,8 @@#ifndef __LINUX_RCUTREE_H#define __LINUX_RCUTREE_H -extern void rcu_qsctr_inc (int cpu); -extern void rcu_bh_qsctr_inc (int cpu); +extern void rcu_sched_qs (int cpu); +extern void rcu_bh_qs (int cpu);extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu);
@@ -73,7 +73,8 @@ static inline void __rcu_read_unlock_bh(void)#define __synchronize_sched () synchronize_rcu() -#define call_rcu_sched (head, func) call_rcu(head, func) +extern void call_rcu_sched (struct rcu_head *head, +void (*func)(struct rcu_head *rcu));static inline void synchronize_rcu_expedited (void ) {
@@ -91,6 +92,7 @@ extern void rcu_restart_cpu(int cpu);extern long rcu_batches_completed (void );extern long rcu_batches_completed_bh (void ); +extern long rcu_batches_completed_sched (void );static inline void rcu_init_sched (void ) {
kernel/rcupreempt.c +4 -4
@@ -159,7 +159,7 @@ static DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_dyntick_sched, rcu_dyntick_sched .dynticks = 1, }; -void rcu_qsctr_inc (int cpu) +void rcu_sched_qs (int cpu) {struct rcu_dyntick_sched *rdssp = &per_cpu (rcu_dyntick_sched, cpu);
@@ -967,12 +967,12 @@ void rcu_check_callbacks(int cpu, int user)* If this CPU took its interrupt from user mode or from the * idle loop, and this is not a nested interrupt, then * this CPU has to have exited all prior preept-disable -* sections of code. So increment the counter to note this. +* sections of code. So invoke rcu_sched_qs() to note this. * * The memory barrier is needed to handle the case where * writes from a preempt-disable section of code get reordered * into schedule() by this CPU's write buffer. So the memory -* barrier makes sure that the rcu_qsctr_inc() is seen by other +* barrier makes sure that the rcu_sched_qs() is seen by other * CPUs to happen after any such write. */
@@ -980,7 +980,7 @@ void rcu_check_callbacks(int cpu, int user) (idle_cpu(cpu) && !in_softirq() && hardirq_count() <= (1 << HARDIRQ_SHIFT))) {smp_mb ();/* Guard against aggressive schedule(). */ -rcu_qsctr_inc (cpu); +rcu_sched_qs (cpu); }rcu_check_mb (cpu);
kernel/rcutree.c +50 -30
187 lines not on this page · raw message
kernel/rcutree.h +2 -2
@@ -238,8 +238,8 @@ struct rcu_state {/* * RCU implementation internal declarations: */ -extern struct rcu_state rcu_state; -DECLARE_PER_CPU(struct rcu_data, rcu_data); +extern struct rcu_state rcu_sched_state; +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);
kernel/rcutree_trace.c +10 -10
@@ -77,8 +77,8 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)static int show_rcudata (struct seq_file *m,void *unused) { -seq_puts (m,"rcu:\n" ); -PRINT_RCU_DATA (rcu_data, print_one_rcu_data, m); +seq_puts (m,"rcu_sched:\n" ); +PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data, m);seq_puts (m,"rcu_bh:\n" );PRINT_RCU_DATA (rcu_bh_data, print_one_rcu_data, m);return 0 ;
@@ -125,8 +125,8 @@ static int show_rcudata_csv(struct seq_file *m, void *unused)seq_puts (m,"\"dt\",\"dt nesting\",\"dn\",\"df\"," );#endif /* #ifdef CONFIG_NO_HZ */ seq_puts (m,"\"of\",\"ri\",\"ql\",\"b\"\n" ); -seq_puts (m,"\"rcu:\"\n" ); -PRINT_RCU_DATA (rcu_data, print_one_rcu_data_csv, m); +seq_puts (m,"\"rcu_sched:\"\n" ); +PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data_csv, m);seq_puts (m,"\"rcu_bh:\"\n" );PRINT_RCU_DATA (rcu_bh_data, print_one_rcu_data_csv, m);return 0 ;
@@ -172,8 +172,8 @@ static void print_one_rcu_state(struct seq_file *m, struct rcu_state *rsp)static int show_rcuhier (struct seq_file *m,void *unused) { -seq_puts (m,"rcu:\n" ); -print_one_rcu_state (m, &rcu_state); +seq_puts (m,"rcu_sched:\n" ); +print_one_rcu_state (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );print_one_rcu_state (m, &rcu_bh_state);return 0 ;
@@ -194,8 +194,8 @@ static struct file_operations rcuhier_fops = {static int show_rcugp (struct seq_file *m,void *unused) { -seq_printf (m,"rcu: completed=%ld gpnum=%ld\n" , - rcu_state.completed, rcu_state.gpnum); +seq_printf (m,"rcu_sched: completed=%ld gpnum=%ld\n" , + rcu_sched_state.completed, rcu_sched_state.gpnum);seq_printf (m,"rcu_bh: completed=%ld gpnum=%ld\n" , rcu_bh_state.completed, rcu_bh_state.gpnum);return 0 ;
@@ -244,8 +244,8 @@ static void print_rcu_pendings(struct seq_file *m, struct rcu_state *rsp)static int show_rcu_pending (struct seq_file *m,void *unused) { -seq_puts (m,"rcu:\n" ); -print_rcu_pendings (m, &rcu_state); +seq_puts (m,"rcu_sched:\n" ); +print_rcu_pendings (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );print_rcu_pendings (m, &rcu_bh_state);return 0 ;
kernel/sched.c +1 -1
@@ -5325,7 +5325,7 @@ need_resched:preempt_disable (); cpu =smp_processor_id (); rq =cpu_rq (cpu); -rcu_qsctr_inc (cpu); +rcu_sched_qs (cpu); prev = rq->curr; switch_count = &prev->nivcsw;
kernel/softirq.c +2 -2
@@ -227,7 +227,7 @@ restart:preempt_count () = prev_count; } -rcu_bh_qsctr_inc (cpu); +rcu_bh_qs (cpu); } h++; pending >>=1 ;
@@ -721,7 +721,7 @@ static int ksoftirqd(void * __bind_cpu)preempt_enable_no_resched ();cond_resched ();preempt_disable (); -rcu_qsctr_inc ((long )__bind_cpu); +rcu_sched_qs ((long )__bind_cpu); }preempt_enable ();set_current_state (TASK_INTERRUPTIBLE );
Signature · 1 line
1.5.2.5
PATCH 1/1 v3 Merge per-RCU-flavor initialization into pre-existing macro.
In reply to Paul E. McKenneyFrom: Paul E. McKenney <[email protected]>
Rename the RCU_DATA_PTR_INIT() macro to RCU_INIT_FLAVOR() and make it do the rcu_init_one() and rcu_boot_init_percpu_data() calls. Merge the loop that was in the original macro with the loops that were in __rcu_init().
--- kernel/rcutree.c | 14 +++++--------- 1 files changed, 5 insertions(+), 9 deletions(-)
kernel/rcutree.c +5 -9
@@ -1543,8 +1543,9 @@ static void __init rcu_init_one(struct rcu_state *rsp)* Helper macro for __rcu_init(). To be used nowhere else! * Assigns leaf node pointers into each CPU's rcu_data structure. */ -#define RCU_DATA_PTR_INIT (rsp, rcu_data) \ +#define RCU_INIT_FLAVOR (rsp, rcu_data) \ do { \ + rcu_init_one(rsp); \ rnp = (rsp)->level[NUM_RCU_LVLS - 1]; \ j = 0; \ for_each_possible_cpu(i) { \
@@ -1552,6 +1553,7 @@ do { \ j++; \per_cpu (rcu_data, i).mynode = &rnp[j]; \ (rsp)->rda[i] = &per_cpu (rcu_data, i); \ +rcu_boot_init_percpu_data (i, rsp); \ } \ }while (0 )
@@ -1565,14 +1567,8 @@ void __init __rcu_init(void)#ifdef CONFIG_RCU_CPU_STALL_DETECTOR printk (KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n" );#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ -rcu_init_one (&rcu_sched_state); -RCU_DATA_PTR_INIT (&rcu_sched_state, rcu_sched_data); -for_each_possible_cpu (i) -rcu_boot_init_percpu_data (i, &rcu_sched_state); -rcu_init_one (&rcu_bh_state); -RCU_DATA_PTR_INIT (&rcu_bh_state, rcu_bh_data); -for_each_possible_cpu (i) -rcu_boot_init_percpu_data (i, &rcu_bh_state); +RCU_INIT_FLAVOR (&rcu_sched_state, rcu_sched_data); +RCU_INIT_FLAVOR (&rcu_bh_state, rcu_bh_data);open_softirq (RCU_SOFTIRQ , rcu_process_callbacks); }
Signature · 1 line
1.5.2.5
PATCH 1/1 v3 Use debugfs_remove_recursive() simplify code.
In reply to Paul E. McKenneyFrom: Paul E. McKenney <[email protected]>
Suggested by Josh Triplett.
--- kernel/rcutree_trace.c | 45 +++++++++++++++------------------------------ 1 files changed, 15 insertions(+), 30 deletions(-)
kernel/rcutree_trace.c +15 -30
@@ -265,62 +265,47 @@ static struct file_operations rcu_pending_fops = { };static struct dentry *rcudir; -static struct dentry *datadir; -static struct dentry *datadir_csv; -static struct dentry *gpdir; -static struct dentry *hierdir; -static struct dentry *rcu_pendingdir;static int __init rcuclassic_trace_init (void ) { +struct dentry *retval; + rcudir =debugfs_create_dir ("rcu" ,NULL );if (!rcudir) - goto out; + goto free_out; - datadir =debugfs_create_file ("rcudata" ,0444 , rcudir, + retval =debugfs_create_file ("rcudata" ,0444 , rcudir,NULL , &rcudata_fops); -if (!datadir) +if (!retval) goto free_out; - datadir_csv =debugfs_create_file ("rcudata.csv" ,0444 , rcudir, + retval =debugfs_create_file ("rcudata.csv" ,0444 , rcudir,NULL , &rcudata_csv_fops); -if (!datadir_csv) +if (!retval) goto free_out; - gpdir =debugfs_create_file ("rcugp" ,0444 , rcudir,NULL , &rcugp_fops); -if (!gpdir) + retval =debugfs_create_file ("rcugp" ,0444 , rcudir,NULL , &rcugp_fops); +if (!retval) goto free_out; - hierdir =debugfs_create_file ("rcuhier" ,0444 , rcudir, + retval =debugfs_create_file ("rcuhier" ,0444 , rcudir,NULL , &rcuhier_fops); -if (!hierdir) +if (!retval) goto free_out; - rcu_pendingdir =debugfs_create_file ("rcu_pending" ,0444 , rcudir, + retval =debugfs_create_file ("rcu_pending" ,0444 , rcudir,NULL , &rcu_pending_fops); -if (!rcu_pendingdir) +if (!retval) goto free_out;return 0 ; free_out: -if (datadir) -debugfs_remove (datadir); -if (datadir_csv) -debugfs_remove (datadir_csv); -if (gpdir) -debugfs_remove (gpdir); -debugfs_remove (rcudir); -out: +debugfs_remove_recursive (rcudir);return 1 ; } static void __exit rcuclassic_trace_cleanup(void) { -debugfs_remove (datadir); -debugfs_remove (datadir_csv); -debugfs_remove (gpdir); -debugfs_remove (hierdir); -debugfs_remove (rcu_pendingdir); -debugfs_remove (rcudir); +debugfs_remove_recursive (rcudir); }
Signature · 1 line
1.5.2.5
PATCH 1/1 v3 Move private definitions from include/linux/rcutree.h to kernel/rcutree.h
In reply to Paul E. McKenneySome information hiding that makes it easier to merge preemptability into rcutree without descending into #include hell.
--- include/linux/rcutree.h | 211 ----------------------------------------- kernel/rcutree.c | 2 + kernel/rcutree.h | 238 +++++++++++++++++++++++++++++++++++++++++++++++ kernel/rcutree_trace.c | 1 + 4 files changed, 241 insertions(+), 211 deletions(-)
include/linux/rcutree.h +0 -211
@@ -30,217 +30,6 @@#ifndef __LINUX_RCUTREE_H#define __LINUX_RCUTREE_H -#include <linux/cache.h> -#include <linux/spinlock.h> -#include <linux/threads.h> -#include <linux/cpumask.h> -#include <linux/seqlock.h> - -/* -* Define shape of hierarchy based on NR_CPUS and CONFIG_RCU_FANOUT. -* In theory, it should be possible to add more levels straightforwardly. -* In practice, this has not been tested, so there is probably some -* bug somewhere. -*/ -#define MAX_RCU_LVLS 3 -#define RCU_FANOUT (CONFIG_RCU_FANOUT) -#define RCU_FANOUT_SQ (RCU_FANOUT * RCU_FANOUT) -#define RCU_FANOUT_CUBE (RCU_FANOUT_SQ * RCU_FANOUT) - -#if NR_CPUS <=RCU_FANOUT -# define NUM_RCU_LVLS 1 -# define NUM_RCU_LVL_0 1 -# define NUM_RCU_LVL_1 (NR_CPUS) -# define NUM_RCU_LVL_2 0 -# define NUM_RCU_LVL_3 0 -#elif NR_CPUS <=RCU_FANOUT_SQ -# define NUM_RCU_LVLS 2 -# define NUM_RCU_LVL_0 1 -# define NUM_RCU_LVL_1 (((NR_CPUS) + RCU_FANOUT - 1) / RCU_FANOUT) -# define NUM_RCU_LVL_2 (NR_CPUS) -# define NUM_RCU_LVL_3 0 -#elif NR_CPUS <=RCU_FANOUT_CUBE -# define NUM_RCU_LVLS 3 -# define NUM_RCU_LVL_0 1 -# define NUM_RCU_LVL_1 (((NR_CPUS) + RCU_FANOUT_SQ - 1) / RCU_FANOUT_SQ) -# define NUM_RCU_LVL_2 (((NR_CPUS) + (RCU_FANOUT) - 1) / (RCU_FANOUT)) -# define NUM_RCU_LVL_3 NR_CPUS -#else -# error "CONFIG_RCU_FANOUT insufficient for NR_CPUS" -#endif /* #if (NR_CPUS) <= RCU_FANOUT */ - -#define RCU_SUM (NUM_RCU_LVL_0 + NUM_RCU_LVL_1 + NUM_RCU_LVL_2 + NUM_RCU_LVL_3) -#define NUM_RCU_NODES (RCU_SUM - NR_CPUS) - -/* -* Dynticks per-CPU state. -*/ -struct rcu_dynticks { -int dynticks_nesting;/* Track nesting level, sort of. */ -int dynticks;/* Even value for dynticks-idle, else odd. */ -int dynticks_nmi;/* Even value for either dynticks-idle or */ -/* not in nmi handler, else odd. So this */ -/* remains even for nmi from irq handler. */ -}; - -/* -* Definition for node within the RCU grace-period-detection hierarchy. -*/ -struct rcu_node { -spinlock_t lock; -unsigned long qsmask;/* CPUs or groups that need to switch in */ -/* order for current grace period to proceed.*/ -unsigned long qsmaskinit; -/* Per-GP initialization for qsmask. */ -unsigned long grpmask;/* Mask to apply to parent qsmask. */ -int grplo;/* lowest-numbered CPU or group here. */ -int grphi;/* highest-numbered CPU or group here. */ -u8 grpnum;/* CPU/group number for next level up. */ -u8 level;/* root is at level 0. */ -struct rcu_node *parent; -}____cacheline_internodealigned_in_smp ; - -/* Index values for nxttail array in struct rcu_data. */ -#define RCU_DONE_TAIL 0/* Also RCU_WAIT head. */ -#define RCU_WAIT_TAIL 1/* Also RCU_NEXT_READY head. */ -#define RCU_NEXT_READY_TAIL 2/* Also RCU_NEXT head. */ -#define RCU_NEXT_TAIL 3 -#define RCU_NEXT_SIZE 4 - -/* Per-CPU data for read-copy update. */ -struct rcu_data { -/* 1) quiescent-state and grace-period handling : */ -long completed;/* Track rsp->completed gp number */ -/* in order to detect GP end. */ -long gpnum;/* Highest gp number that this CPU */ -/* is aware of having started. */ -long passed_quiesc_completed; -/* Value of completed at time of qs. */ -bool passed_quiesc;/* User-mode/idle loop etc. */ -bool qs_pending;/* Core waits for quiesc state. */ -bool beenonline;/* CPU online at least once. */ -struct rcu_node *mynode;/* This CPU's leaf of hierarchy */ -unsigned long grpmask;/* Mask to apply to leaf qsmask. */ - -/* 2) batch handling */ -/* -* If nxtlist is not NULL, it is partitioned as follows. -* Any of the partitions might be empty, in which case the -* pointer to that partition will be equal to the pointer for -* the following partition. When the list is empty, all of -* the nxttail elements point to nxtlist, which is NULL. -* -* [*nxttail[RCU_NEXT_READY_TAIL], NULL = *nxttail[RCU_NEXT_TAIL]): -* Entries that might have arrived after current GP ended -* [*nxttail[RCU_WAIT_TAIL], *nxttail[RCU_NEXT_READY_TAIL]): -* Entries known to have arrived before current GP ended -* [*nxttail[RCU_DONE_TAIL], *nxttail[RCU_WAIT_TAIL]): -* Entries that batch # <= ->completed - 1: waiting for current GP -* [nxtlist, *nxttail[RCU_DONE_TAIL]): -* Entries that batch # <= ->completed -* The grace period for these entries has completed, and -* the other grace-period-completed entries may be moved -* here temporarily in rcu_process_callbacks(). -*/ -struct rcu_head *nxtlist; -struct rcu_head **nxttail[RCU_NEXT_SIZE ]; -long qlen;/* # of queued callbacks */ -long blimit;/* Upper limit on a processed batch */ - -#ifdef CONFIG_NO_HZ -/* 3) dynticks interface. */ -struct rcu_dynticks *dynticks;/* Shared per-CPU dynticks state. */ -int dynticks_snap;/* Per-GP tracking for dynticks. */ -int dynticks_nmi_snap;/* Per-GP tracking for dynticks_nmi. */ -#endif /* #ifdef CONFIG_NO_HZ */ - -/* 4) reasons this CPU needed to be kicked by force_quiescent_state */ -#ifdef CONFIG_NO_HZ -unsigned long dynticks_fqs;/* Kicked due to dynticks idle. */ -#endif /* #ifdef CONFIG_NO_HZ */ -unsigned long offline_fqs;/* Kicked due to being offline. */ -unsigned long resched_ipi;/* Sent a resched IPI. */ - -/* 5) __rcu_pending() statistics. */ -long n_rcu_pending;/* rcu_pending() calls since boot. */ -long n_rp_qs_pending; -long n_rp_cb_ready; -long n_rp_cpu_needs_gp; -long n_rp_gp_completed; -long n_rp_gp_started; -long n_rp_need_fqs; -long n_rp_need_nothing; - -int cpu; -}; - -/* Values for signaled field in struct rcu_state. */ -#define RCU_GP_INIT 0/* Grace period being initialized. */ -#define RCU_SAVE_DYNTICK 1/* Need to scan dyntick state. */ -#define RCU_FORCE_QS 2/* Need to force quiescent state. */ -#ifdef CONFIG_NO_HZ -#define RCU_SIGNAL_INIT RCU_SAVE_DYNTICK -#else /* #ifdef CONFIG_NO_HZ */ -#define RCU_SIGNAL_INIT RCU_FORCE_QS -#endif /* #else #ifdef CONFIG_NO_HZ */ - -#define RCU_JIFFIES_TILL_FORCE_QS 3/* for rsp->jiffies_force_qs */ -#ifdef CONFIG_RCU_CPU_STALL_DETECTOR -#define RCU_SECONDS_TILL_STALL_CHECK (10 * HZ)/* for rsp->jiffies_stall */ -#define RCU_SECONDS_TILL_STALL_RECHECK (30 * HZ)/* for rsp->jiffies_stall */ -#define RCU_STALL_RAT_DELAY 2/* Allow other CPUs time */ -/* to take at least one */ -/* scheduling clock irq */ -/* before ratting on them. */ - -#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ - -/* -* RCU global state, including node hierarchy. This hierarchy is -* represented in "heap" form in a dense array. The root (first level) -* of the hierarchy is in ->node[0] (referenced by ->level[0]), the second -* level in ->node[1] through ->node[m] (->node[1] referenced by ->level[1]), -* and the third level in ->node[m+1] and following (->node[m+1] referenced -* by ->level[2]). The number of levels is determined by the number of -* CPUs and by CONFIG_RCU_FANOUT. Small systems will have a "hierarchy" -* consisting of a single rcu_node. -*/ -struct rcu_state { -struct rcu_node node[NUM_RCU_NODES ];/* Hierarchy. */ -struct rcu_node *level[NUM_RCU_LVLS ];/* Hierarchy levels. */ -u32 levelcnt[MAX_RCU_LVLS +1 ];/* # nodes in each level. */ -u8 levelspread[NUM_RCU_LVLS ];/* kids/node in each level. */ -struct rcu_data *rda[NR_CPUS ];/* array of rdp pointers. */ - -/* The following fields are guarded by the root rcu_node's lock. */ - -u8 signaled____cacheline_internodealigned_in_smp ; -/* Force QS state. */ -long gpnum;/* Current gp number. */ -long completed;/* # of last completed gp. */ -spinlock_t onofflock;/* exclude on/offline and */ -/* starting new GP. */ -spinlock_t fqslock;/* Only one task forcing */ -/* quiescent states. */ -unsigned long jiffies_force_qs;/* Time at which to invoke */ -/* force_quiescent_state(). */ -unsigned long n_force_qs;/* Number of calls to */ -/* force_quiescent_state(). */ -unsigned long n_force_qs_lh;/* ~Number of calls leaving */ -/* due to lock unavailable. */ -unsigned long n_force_qs_ngp;/* Number of calls leaving */ -/* due to no GP active. */ -#ifdef CONFIG_RCU_CPU_STALL_DETECTOR -unsigned long gp_start;/* Time at which GP started, */ -/* but in jiffies. */ -unsigned long jiffies_stall;/* Time at which to check */ -/* for CPU stalls. */ -#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ -#ifdef CONFIG_NO_HZ -long dynticks_completed;/* Value of completed @ snap. */ -#endif /* #ifdef CONFIG_NO_HZ */ -}; -extern void rcu_qsctr_inc (int cpu);extern void rcu_bh_qsctr_inc (int cpu);
kernel/rcutree.c +2 -0
@@ -46,6 +46,8 @@#include <linux/mutex.h> #include <linux/time.h> +#include "rcutree.h" +#ifdef CONFIG_DEBUG_LOCK_ALLOC static struct lock_class_key rcu_lock_key; struct lockdep_map rcu_lock_map =
kernel/rcutree.h +238 -0
244 lines not on this page · raw message
kernel/rcutree_trace.c +1 -0
@@ -43,6 +43,7 @@#include <linux/debugfs.h> #include <linux/seq_file.h> +#define RCU_TREE_NONCORE #include "rcutree.h" static void print_one_rcu_data (struct seq_file *m,struct rcu_data *rdp)
Signature · 1 line
1.5.2.5
[tip:core/rcu] rcu: Move private definitions from include/linux/rcutree.h to kernel/rcutree.h
Commit-ID: 9f77da9f40045253e91f55c12d4481254b513d2d Gitweb: http://git.kernel.org/tip/9f77da9f40045253e91f55c12d4481254b513d2d Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:45 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:36 +0200
rcu: Move private definitions from include/linux/rcutree.h to kernel/rcutree.h
Some information hiding that makes it easier to merge preemptability into rcutree without descending into #include hell.
LKML-Reference: <1250974613373-git-send-email->
--- include/linux/rcutree.h | 211 ----------------------------------------- kernel/rcutree.c | 2 + kernel/rcutree.h | 238 +++++++++++++++++++++++++++++++++++++++++++++++ kernel/rcutree_trace.c | 1 + 4 files changed, 241 insertions(+), 211 deletions(-)
include/linux/rcutree.h +0 -211
@@ -30,217 +30,6 @@#ifndef __LINUX_RCUTREE_H#define __LINUX_RCUTREE_H -#include <linux/cache.h> -#include <linux/spinlock.h> -#include <linux/threads.h> -#include <linux/cpumask.h> -#include <linux/seqlock.h> - -/* -* Define shape of hierarchy based on NR_CPUS and CONFIG_RCU_FANOUT. -* In theory, it should be possible to add more levels straightforwardly. -* In practice, this has not been tested, so there is probably some -* bug somewhere. -*/ -#define MAX_RCU_LVLS 3 -#define RCU_FANOUT (CONFIG_RCU_FANOUT) -#define RCU_FANOUT_SQ (RCU_FANOUT * RCU_FANOUT) -#define RCU_FANOUT_CUBE (RCU_FANOUT_SQ * RCU_FANOUT) - -#if NR_CPUS <=RCU_FANOUT -# define NUM_RCU_LVLS 1 -# define NUM_RCU_LVL_0 1 -# define NUM_RCU_LVL_1 (NR_CPUS) -# define NUM_RCU_LVL_2 0 -# define NUM_RCU_LVL_3 0 -#elif NR_CPUS <=RCU_FANOUT_SQ -# define NUM_RCU_LVLS 2 -# define NUM_RCU_LVL_0 1 -# define NUM_RCU_LVL_1 (((NR_CPUS) + RCU_FANOUT - 1) / RCU_FANOUT) -# define NUM_RCU_LVL_2 (NR_CPUS) -# define NUM_RCU_LVL_3 0 -#elif NR_CPUS <=RCU_FANOUT_CUBE -# define NUM_RCU_LVLS 3 -# define NUM_RCU_LVL_0 1 -# define NUM_RCU_LVL_1 (((NR_CPUS) + RCU_FANOUT_SQ - 1) / RCU_FANOUT_SQ) -# define NUM_RCU_LVL_2 (((NR_CPUS) + (RCU_FANOUT) - 1) / (RCU_FANOUT)) -# define NUM_RCU_LVL_3 NR_CPUS -#else -# error "CONFIG_RCU_FANOUT insufficient for NR_CPUS" -#endif /* #if (NR_CPUS) <= RCU_FANOUT */ - -#define RCU_SUM (NUM_RCU_LVL_0 + NUM_RCU_LVL_1 + NUM_RCU_LVL_2 + NUM_RCU_LVL_3) -#define NUM_RCU_NODES (RCU_SUM - NR_CPUS) - -/* -* Dynticks per-CPU state. -*/ -struct rcu_dynticks { -int dynticks_nesting;/* Track nesting level, sort of. */ -int dynticks;/* Even value for dynticks-idle, else odd. */ -int dynticks_nmi;/* Even value for either dynticks-idle or */ -/* not in nmi handler, else odd. So this */ -/* remains even for nmi from irq handler. */ -}; - -/* -* Definition for node within the RCU grace-period-detection hierarchy. -*/ -struct rcu_node { -spinlock_t lock; -unsigned long qsmask;/* CPUs or groups that need to switch in */ -/* order for current grace period to proceed.*/ -unsigned long qsmaskinit; -/* Per-GP initialization for qsmask. */ -unsigned long grpmask;/* Mask to apply to parent qsmask. */ -int grplo;/* lowest-numbered CPU or group here. */ -int grphi;/* highest-numbered CPU or group here. */ -u8 grpnum;/* CPU/group number for next level up. */ -u8 level;/* root is at level 0. */ -struct rcu_node *parent; -}____cacheline_internodealigned_in_smp ; - -/* Index values for nxttail array in struct rcu_data. */ -#define RCU_DONE_TAIL 0/* Also RCU_WAIT head. */ -#define RCU_WAIT_TAIL 1/* Also RCU_NEXT_READY head. */ -#define RCU_NEXT_READY_TAIL 2/* Also RCU_NEXT head. */ -#define RCU_NEXT_TAIL 3 -#define RCU_NEXT_SIZE 4 - -/* Per-CPU data for read-copy update. */ -struct rcu_data { -/* 1) quiescent-state and grace-period handling : */ -long completed;/* Track rsp->completed gp number */ -/* in order to detect GP end. */ -long gpnum;/* Highest gp number that this CPU */ -/* is aware of having started. */ -long passed_quiesc_completed; -/* Value of completed at time of qs. */ -bool passed_quiesc;/* User-mode/idle loop etc. */ -bool qs_pending;/* Core waits for quiesc state. */ -bool beenonline;/* CPU online at least once. */ -struct rcu_node *mynode;/* This CPU's leaf of hierarchy */ -unsigned long grpmask;/* Mask to apply to leaf qsmask. */ - -/* 2) batch handling */ -/* -* If nxtlist is not NULL, it is partitioned as follows. -* Any of the partitions might be empty, in which case the -* pointer to that partition will be equal to the pointer for -* the following partition. When the list is empty, all of -* the nxttail elements point to nxtlist, which is NULL. -* -* [*nxttail[RCU_NEXT_READY_TAIL], NULL = *nxttail[RCU_NEXT_TAIL]): -* Entries that might have arrived after current GP ended -* [*nxttail[RCU_WAIT_TAIL], *nxttail[RCU_NEXT_READY_TAIL]): -* Entries known to have arrived before current GP ended -* [*nxttail[RCU_DONE_TAIL], *nxttail[RCU_WAIT_TAIL]): -* Entries that batch # <= ->completed - 1: waiting for current GP -* [nxtlist, *nxttail[RCU_DONE_TAIL]): -* Entries that batch # <= ->completed -* The grace period for these entries has completed, and -* the other grace-period-completed entries may be moved -* here temporarily in rcu_process_callbacks(). -*/ -struct rcu_head *nxtlist; -struct rcu_head **nxttail[RCU_NEXT_SIZE ]; -long qlen;/* # of queued callbacks */ -long blimit;/* Upper limit on a processed batch */ - -#ifdef CONFIG_NO_HZ -/* 3) dynticks interface. */ -struct rcu_dynticks *dynticks;/* Shared per-CPU dynticks state. */ -int dynticks_snap;/* Per-GP tracking for dynticks. */ -int dynticks_nmi_snap;/* Per-GP tracking for dynticks_nmi. */ -#endif /* #ifdef CONFIG_NO_HZ */ - -/* 4) reasons this CPU needed to be kicked by force_quiescent_state */ -#ifdef CONFIG_NO_HZ -unsigned long dynticks_fqs;/* Kicked due to dynticks idle. */ -#endif /* #ifdef CONFIG_NO_HZ */ -unsigned long offline_fqs;/* Kicked due to being offline. */ -unsigned long resched_ipi;/* Sent a resched IPI. */ - -/* 5) __rcu_pending() statistics. */ -long n_rcu_pending;/* rcu_pending() calls since boot. */ -long n_rp_qs_pending; -long n_rp_cb_ready; -long n_rp_cpu_needs_gp; -long n_rp_gp_completed; -long n_rp_gp_started; -long n_rp_need_fqs; -long n_rp_need_nothing; - -int cpu; -}; - -/* Values for signaled field in struct rcu_state. */ -#define RCU_GP_INIT 0/* Grace period being initialized. */ -#define RCU_SAVE_DYNTICK 1/* Need to scan dyntick state. */ -#define RCU_FORCE_QS 2/* Need to force quiescent state. */ -#ifdef CONFIG_NO_HZ -#define RCU_SIGNAL_INIT RCU_SAVE_DYNTICK -#else /* #ifdef CONFIG_NO_HZ */ -#define RCU_SIGNAL_INIT RCU_FORCE_QS -#endif /* #else #ifdef CONFIG_NO_HZ */ - -#define RCU_JIFFIES_TILL_FORCE_QS 3/* for rsp->jiffies_force_qs */ -#ifdef CONFIG_RCU_CPU_STALL_DETECTOR -#define RCU_SECONDS_TILL_STALL_CHECK (10 * HZ)/* for rsp->jiffies_stall */ -#define RCU_SECONDS_TILL_STALL_RECHECK (30 * HZ)/* for rsp->jiffies_stall */ -#define RCU_STALL_RAT_DELAY 2/* Allow other CPUs time */ -/* to take at least one */ -/* scheduling clock irq */ -/* before ratting on them. */ - -#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ - -/* -* RCU global state, including node hierarchy. This hierarchy is -* represented in "heap" form in a dense array. The root (first level) -* of the hierarchy is in ->node[0] (referenced by ->level[0]), the second -* level in ->node[1] through ->node[m] (->node[1] referenced by ->level[1]), -* and the third level in ->node[m+1] and following (->node[m+1] referenced -* by ->level[2]). The number of levels is determined by the number of -* CPUs and by CONFIG_RCU_FANOUT. Small systems will have a "hierarchy" -* consisting of a single rcu_node. -*/ -struct rcu_state { -struct rcu_node node[NUM_RCU_NODES ];/* Hierarchy. */ -struct rcu_node *level[NUM_RCU_LVLS ];/* Hierarchy levels. */ -u32 levelcnt[MAX_RCU_LVLS +1 ];/* # nodes in each level. */ -u8 levelspread[NUM_RCU_LVLS ];/* kids/node in each level. */ -struct rcu_data *rda[NR_CPUS ];/* array of rdp pointers. */ - -/* The following fields are guarded by the root rcu_node's lock. */ - -u8 signaled____cacheline_internodealigned_in_smp ; -/* Force QS state. */ -long gpnum;/* Current gp number. */ -long completed;/* # of last completed gp. */ -spinlock_t onofflock;/* exclude on/offline and */ -/* starting new GP. */ -spinlock_t fqslock;/* Only one task forcing */ -/* quiescent states. */ -unsigned long jiffies_force_qs;/* Time at which to invoke */ -/* force_quiescent_state(). */ -unsigned long n_force_qs;/* Number of calls to */ -/* force_quiescent_state(). */ -unsigned long n_force_qs_lh;/* ~Number of calls leaving */ -/* due to lock unavailable. */ -unsigned long n_force_qs_ngp;/* Number of calls leaving */ -/* due to no GP active. */ -#ifdef CONFIG_RCU_CPU_STALL_DETECTOR -unsigned long gp_start;/* Time at which GP started, */ -/* but in jiffies. */ -unsigned long jiffies_stall;/* Time at which to check */ -/* for CPU stalls. */ -#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ -#ifdef CONFIG_NO_HZ -long dynticks_completed;/* Value of completed @ snap. */ -#endif /* #ifdef CONFIG_NO_HZ */ -}; -extern void rcu_qsctr_inc (int cpu);extern void rcu_bh_qsctr_inc (int cpu);
kernel/rcutree.c +2 -0
@@ -46,6 +46,8 @@#include <linux/mutex.h> #include <linux/time.h> +#include "rcutree.h" +#ifdef CONFIG_DEBUG_LOCK_ALLOC static struct lock_class_key rcu_lock_key; struct lockdep_map rcu_lock_map =
kernel/rcutree.h +238 -0
244 lines not on this page · raw message
kernel/rcutree_trace.c +1 -0
@@ -43,6 +43,7 @@#include <linux/debugfs.h> #include <linux/seq_file.h> +#define RCU_TREE_NONCORE #include "rcutree.h" static void print_one_rcu_data (struct seq_file *m,struct rcu_data *rdp)
[tip:core/rcu] rcu: Renamings to increase RCU clarity
In reply to Paul E. McKenneyCommit-ID: d6714c22b43fbcbead7e7b706ff270e15f04a791 Gitweb: http://git.kernel.org/tip/d6714c22b43fbcbead7e7b706ff270e15f04a791 Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:46 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:37 +0200
rcu: Renamings to increase RCU clarity
Make RCU-sched, RCU-bh, and RCU-preempt be underlying implementations, with "RCU" defined in terms of one of the three. Update the outdated rcu_qsctr_inc() names, as these functions no longer increment anything.
LKML-Reference: <12509746132696-git-send-email->
--- Documentation/RCU/trace.txt | 7 ++-- include/linux/rcupdate.h | 21 ++++++++--- include/linux/rcupreempt.h | 4 +- include/linux/rcutree.h | 8 +++-- kernel/rcupreempt.c | 8 ++-- kernel/rcutree.c | 80 +++++++++++++++++++++++++++---------------- kernel/rcutree.h | 4 +- kernel/rcutree_trace.c | 20 +++++----- kernel/sched.c | 2 +- kernel/softirq.c | 4 +- 10 files changed, 95 insertions(+), 63 deletions(-)
Documentation/RCU/trace.txt +3 -4
@@ -191,8 +191,7 @@ rcu/rcuhier (which displays the struct rcu_node hierarchy). The output of "cat rcu/rcudata" looks as follows: -rcu: -rcu: +rcu_sched: 0 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=10951/1 dn=0 df=1101 of=0 ri=36 ql=0 b=10 1 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=16117/1 dn=0 df=1015 of=0 ri=0 ql=0 b=10 2 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=1445/1 dn=0 df=1839 of=0 ri=0 ql=0 b=10
@@ -306,7 +305,7 @@ comma-separated-variable spreadsheet format. The output of "cat rcu/rcugp" looks as follows: -rcu: completed=33062 gpnum=33063 +rcu_sched: completed=33062 gpnum=33063 rcu_bh: completed=464 gpnum=464 Again, this output is for both "rcu" and "rcu_bh". The fields are
@@ -413,7 +412,7 @@ o Each element of the form "1/1 0:127 ^0" represents one struct The output of "cat rcu/rcu_pending" looks as follows: -rcu: +rcu_sched: 0 np=255892 qsp=53936 cbr=0 cng=14417 gpc=10033 gps=24320 nf=6445 nn=146741 1 np=261224 qsp=54638 cbr=0 cng=25723 gpc=16310 gps=2849 nf=5912 nn=155792 2 np=237496 qsp=49664 cbr=0 cng=2762 gpc=45478 gps=1762 nf=1201 nn=136629
include/linux/rcupdate.h +16 -5
@@ -157,17 +157,28 @@ extern int rcu_scheduler_active;* - call_rcu_sched() and rcu_barrier_sched() * on the write-side to insure proper synchronization. */ -#define rcu_read_lock_sched () preempt_disable() -#define rcu_read_lock_sched_notrace () preempt_disable_notrace() +static inline void rcu_read_lock_sched (void ) +{ +preempt_disable (); +} +static inline void rcu_read_lock_sched_notrace (void ) +{ +preempt_disable_notrace (); +}/* * rcu_read_unlock_sched - marks the end of a RCU-classic critical section * * See rcu_read_lock_sched for more information. */ -#define rcu_read_unlock_sched () preempt_enable() -#define rcu_read_unlock_sched_notrace () preempt_enable_notrace() - +static inline void rcu_read_unlock_sched (void ) +{ +preempt_enable (); +} +static inline void rcu_read_unlock_sched_notrace (void ) +{ +preempt_enable_notrace (); +}/**
include/linux/rcupreempt.h +2 -2
@@ -40,8 +40,8 @@#include <linux/cpumask.h> #include <linux/seqlock.h> -extern void rcu_qsctr_inc (int cpu); -static inline void rcu_bh_qsctr_inc (int cpu) { } +extern void rcu_sched_qs (int cpu); +static inline void rcu_bh_qs (int cpu) { }/* * Someone might want to pass call_rcu_bh as a function pointer.
include/linux/rcutree.h +5 -3
@@ -30,8 +30,8 @@#ifndef __LINUX_RCUTREE_H#define __LINUX_RCUTREE_H -extern void rcu_qsctr_inc (int cpu); -extern void rcu_bh_qsctr_inc (int cpu); +extern void rcu_sched_qs (int cpu); +extern void rcu_bh_qs (int cpu);extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu);
@@ -73,7 +73,8 @@ static inline void __rcu_read_unlock_bh(void)#define __synchronize_sched () synchronize_rcu() -#define call_rcu_sched (head, func) call_rcu(head, func) +extern void call_rcu_sched (struct rcu_head *head, +void (*func)(struct rcu_head *rcu));static inline void synchronize_rcu_expedited (void ) {
@@ -91,6 +92,7 @@ extern void rcu_restart_cpu(int cpu);extern long rcu_batches_completed (void );extern long rcu_batches_completed_bh (void ); +extern long rcu_batches_completed_sched (void );static inline void rcu_init_sched (void ) {
kernel/rcupreempt.c +4 -4
@@ -159,7 +159,7 @@ static DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_dyntick_sched, rcu_dyntick_sched .dynticks = 1, }; -void rcu_qsctr_inc (int cpu) +void rcu_sched_qs (int cpu) {struct rcu_dyntick_sched *rdssp = &per_cpu (rcu_dyntick_sched, cpu);
@@ -967,12 +967,12 @@ void rcu_check_callbacks(int cpu, int user)* If this CPU took its interrupt from user mode or from the * idle loop, and this is not a nested interrupt, then * this CPU has to have exited all prior preept-disable -* sections of code. So increment the counter to note this. +* sections of code. So invoke rcu_sched_qs() to note this. * * The memory barrier is needed to handle the case where * writes from a preempt-disable section of code get reordered * into schedule() by this CPU's write buffer. So the memory -* barrier makes sure that the rcu_qsctr_inc() is seen by other +* barrier makes sure that the rcu_sched_qs() is seen by other * CPUs to happen after any such write. */
@@ -980,7 +980,7 @@ void rcu_check_callbacks(int cpu, int user) (idle_cpu(cpu) && !in_softirq() && hardirq_count() <= (1 << HARDIRQ_SHIFT))) {smp_mb ();/* Guard against aggressive schedule(). */ -rcu_qsctr_inc (cpu); +rcu_sched_qs (cpu); }rcu_check_mb (cpu);
kernel/rcutree.c +50 -30
187 lines not on this page · raw message
kernel/rcutree.h +2 -2
@@ -238,8 +238,8 @@ struct rcu_state {/* * RCU implementation internal declarations: */ -extern struct rcu_state rcu_state; -DECLARE_PER_CPU(struct rcu_data, rcu_data); +extern struct rcu_state rcu_sched_state; +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);
kernel/rcutree_trace.c +10 -10
@@ -77,8 +77,8 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)static int show_rcudata (struct seq_file *m,void *unused) { -seq_puts (m,"rcu:\n" ); -PRINT_RCU_DATA (rcu_data, print_one_rcu_data, m); +seq_puts (m,"rcu_sched:\n" ); +PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data, m);seq_puts (m,"rcu_bh:\n" );PRINT_RCU_DATA (rcu_bh_data, print_one_rcu_data, m);return 0 ;
@@ -125,8 +125,8 @@ static int show_rcudata_csv(struct seq_file *m, void *unused)seq_puts (m,"\"dt\",\"dt nesting\",\"dn\",\"df\"," );#endif /* #ifdef CONFIG_NO_HZ */ seq_puts (m,"\"of\",\"ri\",\"ql\",\"b\"\n" ); -seq_puts (m,"\"rcu:\"\n" ); -PRINT_RCU_DATA (rcu_data, print_one_rcu_data_csv, m); +seq_puts (m,"\"rcu_sched:\"\n" ); +PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data_csv, m);seq_puts (m,"\"rcu_bh:\"\n" );PRINT_RCU_DATA (rcu_bh_data, print_one_rcu_data_csv, m);return 0 ;
@@ -172,8 +172,8 @@ static void print_one_rcu_state(struct seq_file *m, struct rcu_state *rsp)static int show_rcuhier (struct seq_file *m,void *unused) { -seq_puts (m,"rcu:\n" ); -print_one_rcu_state (m, &rcu_state); +seq_puts (m,"rcu_sched:\n" ); +print_one_rcu_state (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );print_one_rcu_state (m, &rcu_bh_state);return 0 ;
@@ -194,8 +194,8 @@ static struct file_operations rcuhier_fops = {static int show_rcugp (struct seq_file *m,void *unused) { -seq_printf (m,"rcu: completed=%ld gpnum=%ld\n" , - rcu_state.completed, rcu_state.gpnum); +seq_printf (m,"rcu_sched: completed=%ld gpnum=%ld\n" , + rcu_sched_state.completed, rcu_sched_state.gpnum);seq_printf (m,"rcu_bh: completed=%ld gpnum=%ld\n" , rcu_bh_state.completed, rcu_bh_state.gpnum);return 0 ;
@@ -244,8 +244,8 @@ static void print_rcu_pendings(struct seq_file *m, struct rcu_state *rsp)static int show_rcu_pending (struct seq_file *m,void *unused) { -seq_puts (m,"rcu:\n" ); -print_rcu_pendings (m, &rcu_state); +seq_puts (m,"rcu_sched:\n" ); +print_rcu_pendings (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );print_rcu_pendings (m, &rcu_bh_state);return 0 ;
kernel/sched.c +1 -1
@@ -5325,7 +5325,7 @@ need_resched:preempt_disable (); cpu =smp_processor_id (); rq =cpu_rq (cpu); -rcu_qsctr_inc (cpu); +rcu_sched_qs (cpu); prev = rq->curr; switch_count = &prev->nivcsw;
kernel/softirq.c +2 -2
@@ -227,7 +227,7 @@ restart:preempt_count () = prev_count; } -rcu_bh_qsctr_inc (cpu); +rcu_bh_qs (cpu); } h++; pending >>=1 ;
@@ -721,7 +721,7 @@ static int ksoftirqd(void * __bind_cpu)preempt_enable_no_resched ();cond_resched ();preempt_disable (); -rcu_qsctr_inc ((long )__bind_cpu); +rcu_sched_qs ((long )__bind_cpu); }preempt_enable ();set_current_state (TASK_INTERRUPTIBLE );
[tip:core/rcu] rcu: Consolidate sparse and lockdep declarations in include/linux/rcupdate.h
In reply to Paul E. McKenneyCommit-ID: bc33f24bdca8b6e97376e3a182ab69e6cdefa989 Gitweb: http://git.kernel.org/tip/bc33f24bdca8b6e97376e3a182ab69e6cdefa989 Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:47 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:37 +0200
rcu: Consolidate sparse and lockdep declarations in include/linux/rcupdate.h
LKML-Reference: <12509746132349-git-send-email->
--- include/linux/rcupdate.h | 46 ++++++++++++++++++++++++++++++++++++++++--- include/linux/rcupreempt.h | 4 +- include/linux/rcutree.h | 18 ----------------- 3 files changed, 44 insertions(+), 24 deletions(-)
include/linux/rcupdate.h +42 -4
@@ -80,6 +80,16 @@ extern int rcu_scheduler_active; (ptr)->next =NULL ; (ptr)->func =NULL ; \ } while (0) +#ifdef CONFIG_DEBUG_LOCK_ALLOC +extern struct lockdep_map rcu_lock_map; +# define rcu_read_acquire () \ + lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) +# define rcu_read_release () lock_release(&rcu_lock_map, 1, _THIS_IP_) +#else +# define rcu_read_acquire () do { } while (0) +# define rcu_read_release () do { } while (0) +#endif +/** * rcu_read_lock - mark the beginning of an RCU read-side critical section. *
@@ -109,7 +119,12 @@ extern int rcu_scheduler_active;* * It is illegal to block while in an RCU read-side critical section. */ -#define rcu_read_lock () __rcu_read_lock() +static inline void rcu_read_lock (void ) +{ +__rcu_read_lock (); +__acquire (RCU ); +rcu_read_acquire (); +}/** * rcu_read_unlock - marks the end of an RCU read-side critical section.
@@ -126,7 +141,12 @@ extern int rcu_scheduler_active;* used as well. RCU does not care how the writers keep out of each * others' way, as long as they do so. */ -#define rcu_read_unlock () __rcu_read_unlock() +static inline void rcu_read_unlock (void ) +{ +rcu_read_release (); +__release (RCU ); +__rcu_read_unlock (); +}/** * rcu_read_lock_bh - mark the beginning of a softirq-only RCU critical section
@@ -139,14 +159,24 @@ extern int rcu_scheduler_active;* can use just rcu_read_lock(). * */ -#define rcu_read_lock_bh () __rcu_read_lock_bh() +static inline void rcu_read_lock_bh (void ) +{ +__rcu_read_lock_bh (); +__acquire (RCU_BH ); +rcu_read_acquire (); +}/* * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section * * See rcu_read_lock_bh() for more information. */ -#define rcu_read_unlock_bh () __rcu_read_unlock_bh() +static inline void rcu_read_unlock_bh (void ) +{ +rcu_read_release (); +__release (RCU_BH ); +__rcu_read_unlock_bh (); +}/** * rcu_read_lock_sched - mark the beginning of a RCU-classic critical section
@@ -160,10 +190,14 @@ extern int rcu_scheduler_active;static inline void rcu_read_lock_sched (void ) {preempt_disable (); +__acquire (RCU_SCHED ); +rcu_read_acquire (); }static inline void rcu_read_lock_sched_notrace (void ) {preempt_disable_notrace (); +__acquire (RCU_SCHED ); +rcu_read_acquire (); }/*
@@ -173,10 +207,14 @@ static inline void rcu_read_lock_sched_notrace(void)*/ static inline void rcu_read_unlock_sched (void ) { +rcu_read_release (); +__release (RCU_SCHED );preempt_enable (); }static inline void rcu_read_unlock_sched_notrace (void ) { +rcu_read_release (); +__release (RCU_SCHED );preempt_enable_notrace (); }
include/linux/rcupreempt.h +2 -2
@@ -64,8 +64,8 @@ static inline void rcu_bh_qs(int cpu) { }extern void call_rcu_sched (struct rcu_head *head,void (*func)(struct rcu_head *head)); -extern void __rcu_read_lock(void) __acquires(RCU); -extern void __rcu_read_unlock(void) __releases(RCU); +extern void __rcu_read_lock (void ); +extern void __rcu_read_unlock (void );extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu);
include/linux/rcutree.h +0 -18
@@ -36,38 +36,20 @@ extern void rcu_bh_qs(int cpu);extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu); -#ifdef CONFIG_DEBUG_LOCK_ALLOC -extern struct lockdep_map rcu_lock_map; -# define rcu_read_acquire () \ - lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) -# define rcu_read_release () lock_release(&rcu_lock_map, 1, _THIS_IP_) -#else -# define rcu_read_acquire () do { } while (0) -# define rcu_read_release () do { } while (0) -#endif -static inline void __rcu_read_lock (void ) {preempt_disable (); -__acquire (RCU ); -rcu_read_acquire (); }static inline void __rcu_read_unlock (void ) { -rcu_read_release (); -__release (RCU );preempt_enable (); }static inline void __rcu_read_lock_bh (void ) {local_bh_disable (); -__acquire (RCU_BH ); -rcu_read_acquire (); }static inline void __rcu_read_unlock_bh (void ) { -rcu_read_release (); -__release (RCU_BH );local_bh_enable (); }
[tip:core/rcu] rcu: Fix online/offline indication for rcudata.csv trace file
In reply to Paul E. McKenneyCommit-ID: 5699ed8fcb0c32ca699e2a27ad716eb70b367dbf Gitweb: http://git.kernel.org/tip/5699ed8fcb0c32ca699e2a27ad716eb70b367dbf Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:48 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:38 +0200
rcu: Fix online/offline indication for rcudata.csv trace file
The heading said "Online?", but the column had "Y" for offline CPUs and "N" for online CPUs. Swap the "Y" and "N" to match the heading.
LKML-Reference: <12509746132841-git-send-email->
--- kernel/rcutree_trace.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
kernel/rcutree_trace.c +1 -1
@@ -103,7 +103,7 @@ static void print_one_rcu_data_csv(struct seq_file *m, struct rcu_data *rdp)return ;seq_printf (m,"%d,%s,%ld,%ld,%d,%ld,%d" , rdp->cpu, -cpu_is_offline (rdp->cpu) ?"\"Y\"" :"\"N\"" , +cpu_is_offline (rdp->cpu) ?"\"N\"" :"\"Y\"" , rdp->completed, rdp->gpnum, rdp->passed_quiesc, rdp->passed_quiesc_completed, rdp->qs_pending);
[tip:core/rcu] rcu: Use debugfs_remove_recursive() simplify code.
In reply to Paul E. McKenneyCommit-ID: 22f00b69f6a7e1e18e821979a23e8307c2de9888 Gitweb: http://git.kernel.org/tip/22f00b69f6a7e1e18e821979a23e8307c2de9888 Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:50 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:39 +0200
rcu: Use debugfs_remove_recursive() simplify code.
Suggested by Josh Triplett.
LKML-Reference: <12509746132173-git-send-email->
--- kernel/rcutree_trace.c | 45 +++++++++++++++------------------------------ 1 files changed, 15 insertions(+), 30 deletions(-)
kernel/rcutree_trace.c +15 -30
@@ -265,62 +265,47 @@ static struct file_operations rcu_pending_fops = { };static struct dentry *rcudir; -static struct dentry *datadir; -static struct dentry *datadir_csv; -static struct dentry *gpdir; -static struct dentry *hierdir; -static struct dentry *rcu_pendingdir;static int __init rcuclassic_trace_init (void ) { +struct dentry *retval; + rcudir =debugfs_create_dir ("rcu" ,NULL );if (!rcudir) - goto out; + goto free_out; - datadir =debugfs_create_file ("rcudata" ,0444 , rcudir, + retval =debugfs_create_file ("rcudata" ,0444 , rcudir,NULL , &rcudata_fops); -if (!datadir) +if (!retval) goto free_out; - datadir_csv =debugfs_create_file ("rcudata.csv" ,0444 , rcudir, + retval =debugfs_create_file ("rcudata.csv" ,0444 , rcudir,NULL , &rcudata_csv_fops); -if (!datadir_csv) +if (!retval) goto free_out; - gpdir =debugfs_create_file ("rcugp" ,0444 , rcudir,NULL , &rcugp_fops); -if (!gpdir) + retval =debugfs_create_file ("rcugp" ,0444 , rcudir,NULL , &rcugp_fops); +if (!retval) goto free_out; - hierdir =debugfs_create_file ("rcuhier" ,0444 , rcudir, + retval =debugfs_create_file ("rcuhier" ,0444 , rcudir,NULL , &rcuhier_fops); -if (!hierdir) +if (!retval) goto free_out; - rcu_pendingdir =debugfs_create_file ("rcu_pending" ,0444 , rcudir, + retval =debugfs_create_file ("rcu_pending" ,0444 , rcudir,NULL , &rcu_pending_fops); -if (!rcu_pendingdir) +if (!retval) goto free_out;return 0 ; free_out: -if (datadir) -debugfs_remove (datadir); -if (datadir_csv) -debugfs_remove (datadir_csv); -if (gpdir) -debugfs_remove (gpdir); -debugfs_remove (rcudir); -out: +debugfs_remove_recursive (rcudir);return 1 ; } static void __exit rcuclassic_trace_cleanup(void) { -debugfs_remove (datadir); -debugfs_remove (datadir_csv); -debugfs_remove (gpdir); -debugfs_remove (hierdir); -debugfs_remove (rcu_pendingdir); -debugfs_remove (rcudir); +debugfs_remove_recursive (rcudir); }
[tip:core/rcu] rcu: Merge per-RCU-flavor initialization into pre-existing macro
In reply to Paul E. McKenneyCommit-ID: 65cf8f866fc0fb40fa9daaded7e938a886d6f7c5 Gitweb: http://git.kernel.org/tip/65cf8f866fc0fb40fa9daaded7e938a886d6f7c5 Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:49 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:38 +0200
rcu: Merge per-RCU-flavor initialization into pre-existing macro
Rename the RCU_DATA_PTR_INIT() macro to RCU_INIT_FLAVOR() and make it do the rcu_init_one() and rcu_boot_init_percpu_data() calls. Merge the loop that was in the original macro with the loops that were in __rcu_init().
LKML-Reference: <12509746133916-git-send-email->
--- kernel/rcutree.c | 14 +++++--------- 1 files changed, 5 insertions(+), 9 deletions(-)
kernel/rcutree.c +5 -9
@@ -1543,8 +1543,9 @@ static void __init rcu_init_one(struct rcu_state *rsp)* Helper macro for __rcu_init(). To be used nowhere else! * Assigns leaf node pointers into each CPU's rcu_data structure. */ -#define RCU_DATA_PTR_INIT (rsp, rcu_data) \ +#define RCU_INIT_FLAVOR (rsp, rcu_data) \ do { \ + rcu_init_one(rsp); \ rnp = (rsp)->level[NUM_RCU_LVLS - 1]; \ j = 0; \ for_each_possible_cpu(i) { \
@@ -1552,6 +1553,7 @@ do { \ j++; \per_cpu (rcu_data, i).mynode = &rnp[j]; \ (rsp)->rda[i] = &per_cpu (rcu_data, i); \ +rcu_boot_init_percpu_data (i, rsp); \ } \ }while (0 )
@@ -1565,14 +1567,8 @@ void __init __rcu_init(void)#ifdef CONFIG_RCU_CPU_STALL_DETECTOR printk (KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n" );#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ -rcu_init_one (&rcu_sched_state); -RCU_DATA_PTR_INIT (&rcu_sched_state, rcu_sched_data); -for_each_possible_cpu (i) -rcu_boot_init_percpu_data (i, &rcu_sched_state); -rcu_init_one (&rcu_bh_state); -RCU_DATA_PTR_INIT (&rcu_bh_state, rcu_bh_data); -for_each_possible_cpu (i) -rcu_boot_init_percpu_data (i, &rcu_bh_state); +RCU_INIT_FLAVOR (&rcu_sched_state, rcu_sched_data); +RCU_INIT_FLAVOR (&rcu_bh_state, rcu_bh_data);open_softirq (RCU_SOFTIRQ , rcu_process_callbacks); }
[tip:core/rcu] rcu: Simplify rcu_pending()/rcu_check_callbacks() API
In reply to Paul E. McKenneyCommit-ID: a157229cabd6dd8cfa82525fc9bf730c94cc9ac2 Gitweb: http://git.kernel.org/tip/a157229cabd6dd8cfa82525fc9bf730c94cc9ac2 Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:51 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:39 +0200
rcu: Simplify rcu_pending()/rcu_check_callbacks() API
All calls from outside RCU are of the form:
if (rcu_pending(cpu)) rcu_check_callbacks(cpu, user);
This is silly, instead we put a call to rcu_pending() in rcu_check_callbacks(), and then make the outside calls be to rcu_check_callbacks(). This cuts down on the code a bit and also gives the compiler a better chance of optimizing.
LKML-Reference: <125097461311-git-send-email->
--- arch/ia64/xen/time.c | 3 +-- include/linux/rcupreempt.h | 1 - include/linux/rcutree.h | 1 - kernel/rcupreempt.c | 10 ++++++++-- kernel/rcutree.c | 5 ++++- kernel/timer.c | 3 +-- 6 files changed, 14 insertions(+), 9 deletions(-)
arch/ia64/xen/time.c +1 -2
@@ -133,8 +133,7 @@ consider_steal_time(unsigned long new_itm)account_idle_ticks (blocked);run_local_timers (); -if (rcu_pending (cpu)) -rcu_check_callbacks (cpu,user_mode (get_irq_regs ())); +rcu_check_callbacks (cpu,user_mode (get_irq_regs ()));scheduler_tick ();run_posix_cpu_timers (p);
include/linux/rcupreempt.h +0 -1
@@ -66,7 +66,6 @@ extern void call_rcu_sched(struct rcu_head *head,extern void __rcu_read_lock (void );extern void __rcu_read_unlock (void ); -extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu);#define __rcu_read_lock_bh () { rcu_read_lock(); local_bh_disable(); }
include/linux/rcutree.h +0 -1
@@ -33,7 +33,6 @@extern void rcu_sched_qs (int cpu);extern void rcu_bh_qs (int cpu); -extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu);static inline void __rcu_read_lock (void )
kernel/rcupreempt.c +8 -2
@@ -159,6 +159,8 @@ static DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_dyntick_sched, rcu_dyntick_sched .dynticks = 1, }; +static int rcu_pending (int cpu); +void rcu_sched_qs (int cpu) {struct rcu_dyntick_sched *rdssp = &per_cpu (rcu_dyntick_sched, cpu);
@@ -961,7 +963,10 @@ static void rcu_check_mb(int cpu)void rcu_check_callbacks (int cpu,int user) {unsigned long flags; -struct rcu_data *rdp =RCU_DATA_CPU (cpu); +struct rcu_data *rdp; + +if (!rcu_pending (cpu)) +return ;/* if nothing for RCU to do. */ /* * If this CPU took its interrupt from user mode or from the
@@ -976,6 +981,7 @@ void rcu_check_callbacks(int cpu, int user)* CPUs to happen after any such write. */ + rdp =RCU_DATA_CPU (cpu);if (user || (idle_cpu (cpu) && !in_softirq () &&hardirq_count () <= (1 <<HARDIRQ_SHIFT ))) {
@@ -1382,7 +1388,7 @@ int rcu_needs_cpu(int cpu) rdp->waitschedlist != NULL); } -int rcu_pending (int cpu) +static int rcu_pending (int cpu) {struct rcu_data *rdp =RCU_DATA_CPU (cpu);
kernel/rcutree.c +4 -1
@@ -111,6 +111,7 @@ static int qhimark = 10000; /* If this many pending, ignore blimit. */static int qlowmark =100 ;/* Once only this many pending, use blimit. */ static void force_quiescent_state (struct rcu_state *rsp,int relaxed); +static int rcu_pending (int cpu);/* * Return the number of RCU-sched batches processed thus far for debug & stats.
@@ -974,6 +975,8 @@ static void rcu_do_batch(struct rcu_data *rdp)*/ void rcu_check_callbacks (int cpu,int user) { +if (!rcu_pending (cpu)) +return ;/* if nothing for RCU to do. */ if (user || (idle_cpu (cpu) && rcu_scheduler_active && !in_softirq () &&hardirq_count () <= (1 <<HARDIRQ_SHIFT ))) {
@@ -1329,7 +1332,7 @@ 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. */ -int rcu_pending (int cpu) +static int rcu_pending (int cpu) {return __rcu_pending (&rcu_sched_state, &per_cpu (rcu_sched_data, cpu)) ||__rcu_pending (&rcu_bh_state, &per_cpu (rcu_bh_data, cpu));
kernel/timer.c +1 -2
@@ -1156,8 +1156,7 @@ void update_process_times(int user_tick)/* Note: this timer irq context must be accounted for as well. */ account_process_tick (p, user_tick);run_local_timers (); -if (rcu_pending (cpu)) -rcu_check_callbacks (cpu, user_tick); +rcu_check_callbacks (cpu, user_tick);printk_tick ();scheduler_tick ();run_posix_cpu_timers (p);
[tip:core/rcu] rcu: Merge preemptable-RCU functionality into hierarchical RCU
In reply to Paul E. McKenneyCommit-ID: f41d911f8c49a5d65c86504c19e8204bb605c4fd Gitweb: http://git.kernel.org/tip/f41d911f8c49a5d65c86504c19e8204bb605c4fd Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:52 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:40 +0200
rcu: Merge preemptable-RCU functionality into hierarchical RCU
Create a kernel/rcutree_plugin.h file that contains definitions for preemptable RCU (or, under the #else branch of the #ifdef, empty definitions for the classic non-preemptable semantics). These definitions fit into plugins defined in kernel/rcutree.c for this purpose.
This variant of preemptable RCU uses a new algorithm whose read-side expense is roughly that of classic hierarchical RCU under CONFIG_PREEMPT. This new algorithm's update-side expense is similar to that of classic hierarchical RCU, and, in absence of read-side preemption or blocking, is exactly that of classic hierarchical RCU. Perhaps more important, this new algorithm has a much simpler implementation, saving well over 1,000 lines of code compared to mainline's implementation of preemptable RCU, which will hopefully be retired in favor of this new algorithm.
The simplifications are obtained by maintaining per-task nesting state for running tasks, and using a simple lock-protected algorithm to handle accounting when tasks block within RCU read-side critical sections, making use of lessons learned while creating numerous user-level RCU implementations over the past 18 months.
LKML-Reference: <12509746134003-git-send-email->
--- include/linux/init_task.h | 15 ++ include/linux/rcupdate.h | 2 +- include/linux/rcupreempt.h | 4 + include/linux/rcutree.h | 16 ++ include/linux/sched.h | 37 ++++ init/Kconfig | 22 ++- kernel/Makefile | 1 + kernel/exit.c | 1 + kernel/fork.c | 5 +- kernel/rcutree.c | 135 +++++++++----- kernel/rcutree.h | 9 + kernel/rcutree_plugin.h | 447 ++++++++++++++++++++++++++++++++++++++++++++ kernel/rcutree_trace.c | 20 ++ lib/Kconfig.debug | 2 +- 14 files changed, 661 insertions(+), 55 deletions(-)
include/linux/init_task.h +15 -0
@@ -94,6 +94,20 @@ extern struct group_info init_groups;# define CAP_INIT_BSET CAP_INIT_EFF_SET#endif +#ifdef CONFIG_PREEMPT_RCU +#define INIT_TASK_RCU_PREEMPT (tsk) \ + .rcu_read_lock_nesting = 0, \ + .rcu_flipctr_idx = 0, +#elif defined(CONFIG_TREE_PREEMPT_RCU ) +#define INIT_TASK_RCU_PREEMPT (tsk) \ + .rcu_read_lock_nesting = 0, \ + .rcu_read_unlock_special = 0, \ + .rcu_blocked_cpu = -1, \ + .rcu_node_entry = LIST_HEAD_INIT(tsk.rcu_node_entry), +#else +#define INIT_TASK_RCU_PREEMPT (tsk) +#endif +extern struct cred init_cred;#ifdef CONFIG_PERF_COUNTERS
@@ -173,6 +187,7 @@ extern struct cred init_cred;INIT_LOCKDEP \ INIT_FTRACE_GRAPH \ INIT_TRACE_RECURSION \ + INIT_TASK_RCU_PREEMPT(tsk) \ }
include/linux/rcupdate.h +1 -1
@@ -66,7 +66,7 @@ extern void rcu_scheduler_starting(void);extern int rcu_needs_cpu (int cpu);extern int rcu_scheduler_active; -#if defined(CONFIG_TREE_RCU ) +#if defined(CONFIG_TREE_RCU ) || defined(CONFIG_TREE_PREEMPT_RCU )#include <linux/rcutree.h> #elif defined(CONFIG_PREEMPT_RCU )#include <linux/rcupreempt.h>
include/linux/rcupreempt.h +4 -0
@@ -98,6 +98,10 @@ static inline long rcu_batches_completed_bh(void)return rcu_batches_completed (); } +static inline void exit_rcu (void ) +{ +} +#ifdef CONFIG_RCU_TRACE struct rcupreempt_trace ;extern long *rcupreempt_flipctr (int cpu);
include/linux/rcutree.h +16 -0
@@ -35,14 +35,30 @@ extern void rcu_bh_qs(int cpu);extern int rcu_needs_cpu (int cpu); +#ifdef CONFIG_TREE_PREEMPT_RCU + +extern void __rcu_read_lock (void ); +extern void __rcu_read_unlock (void ); +extern void exit_rcu (void ); + +#else /* #ifdef CONFIG_TREE_PREEMPT_RCU */ +static inline void __rcu_read_lock (void ) {preempt_disable (); } +static inline void __rcu_read_unlock (void ) {preempt_enable (); } + +static inline void exit_rcu (void ) +{ +} + +#endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */ +static inline void __rcu_read_lock_bh (void ) {local_bh_disable ();
include/linux/sched.h +37 -0
@@ -1210,6 +1210,13 @@ struct task_struct {int rcu_flipctr_idx;#endif /* #ifdef CONFIG_PREEMPT_RCU */ +#ifdef CONFIG_TREE_PREEMPT_RCU +int rcu_read_lock_nesting; +char rcu_read_unlock_special; +int rcu_blocked_cpu; +struct list_head rcu_node_entry; +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ +#if defined(CONFIG_SCHEDSTATS ) || defined(CONFIG_TASK_DELAY_ACCT )struct sched_info sched_info;#endif
@@ -1723,6 +1730,36 @@ extern cputime_t task_gtime(struct task_struct *p);#define tsk_used_math (p) ((p)->flags & PF_USED_MATH)#define used_math () tsk_used_math(current) +#ifdef CONFIG_TREE_PREEMPT_RCU + +#define RCU_READ_UNLOCK_BLOCKED (1 << 0)/* blocked while in RCU read-side. */ +#define RCU_READ_UNLOCK_NEED_QS (1 << 1)/* RCU core needs CPU response. */ +#define RCU_READ_UNLOCK_GOT_QS (1 << 2)/* CPU has responded to RCU core. */ + +static inline void rcu_copy_process (struct task_struct *p) +{ + p->rcu_read_lock_nesting =0 ; + p->rcu_read_unlock_special =0 ; + p->rcu_blocked_cpu =-1 ; +INIT_LIST_HEAD (&p->rcu_node_entry); +} + +#elif defined(CONFIG_PREEMPT_RCU ) + +static inline void rcu_copy_process (struct task_struct *p) +{ + p->rcu_read_lock_nesting =0 ; + p->rcu_flipctr_idx =0 ; +} + +#else + +static inline void rcu_copy_process (struct task_struct *p) +{ +} + +#endif +#ifdef CONFIG_SMP extern int set_cpus_allowed_ptr (struct task_struct *p,const struct cpumask *new_mask);
init/Kconfig +16 -6
@@ -335,11 +335,20 @@ config PREEMPT_RCU now-naive assumptions about each RCU read-side critical section remaining on a given CPU through its execution. +config TREE_PREEMPT_RCU + bool "Preemptable tree-based hierarchical RCU" + depends on PREEMPT + help + This option selects the RCU implementation that is + designed for very large SMP systems with hundreds or + thousands of CPUs, but for which real-time response + is also required. + endchoice config RCU_TRACE bool "Enable tracing for RCU" - depends on TREE_RCU || PREEMPT_RCU + depends on TREE_RCU || PREEMPT_RCU || TREE_PREEMPT_RCU help This option provides tracing in RCU which presents stats in debugfs for debugging RCU implementation.
@@ -351,7 +360,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 + depends on TREE_RCU || TREE_PREEMPT_RCU default 64 if 64BIT default 32 if !64BIT help
@@ -366,7 +375,7 @@ config RCU_FANOUT config RCU_FANOUT_EXACT bool "Disable tree-based hierarchical RCU auto-balancing" - depends on TREE_RCU + depends on TREE_RCU || TREE_PREEMPT_RCU default n help This option forces use of the exact RCU_FANOUT value specified,
@@ -379,11 +388,12 @@ config RCU_FANOUT_EXACT Say N if unsure. config TREE_RCU_TRACE - def_bool RCU_TRACE && TREE_RCU + def_bool RCU_TRACE && ( TREE_RCU || TREE_PREEMPT_RCU ) select DEBUG_FS help - This option provides tracing for the TREE_RCU implementation, - permitting Makefile to trivially select kernel/rcutree_trace.c. + This option provides tracing for the TREE_RCU and + TREE_PREEMPT_RCU implementations, permitting Makefile to + trivially select kernel/rcutree_trace.c. config PREEMPT_RCU_TRACE def_bool RCU_TRACE && PREEMPT_RCU
kernel/Makefile +1 -0
@@ -81,6 +81,7 @@ obj-$(CONFIG_GENERIC_HARDIRQS) += irq/ obj-$(CONFIG_SECCOMP) += seccomp.o obj-$(CONFIG_RCU_TORTURE_TEST) += rcutorture.o obj-$(CONFIG_TREE_RCU) += rcutree.o +obj-$(CONFIG_TREE_PREEMPT_RCU) += rcutree.o obj-$(CONFIG_PREEMPT_RCU) += rcupreempt.o obj-$(CONFIG_TREE_RCU_TRACE) += rcutree_trace.o obj-$(CONFIG_PREEMPT_RCU_TRACE) += rcupreempt_trace.o
kernel/exit.c +1 -0
@@ -1010,6 +1010,7 @@ NORET_TYPE void do_exit(long code)__free_pipe_info (tsk->splice_pipe);preempt_disable (); +exit_rcu ();/* causes final put_task_struct in finish_task_switch(). */ tsk->state =TASK_DEAD ;schedule ();
kernel/fork.c +1 -4
@@ -1022,10 +1022,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,copy_flags (clone_flags, p);INIT_LIST_HEAD (&p->children);INIT_LIST_HEAD (&p->sibling); -#ifdef CONFIG_PREEMPT_RCU - p->rcu_read_lock_nesting =0 ; - p->rcu_flipctr_idx =0 ; -#endif /* #ifdef CONFIG_PREEMPT_RCU */ +rcu_copy_process (p); p->vfork_done =NULL ;spin_lock_init (&p->alloc_lock);
kernel/rcutree.c +92 -43
285 lines not on this page · raw message
kernel/rcutree.h +9 -0
@@ -80,6 +80,7 @@ struct rcu_dynticks {*/ struct rcu_node {spinlock_t lock; +long gpnum;/* Current grace period for this node. */ unsigned long qsmask;/* CPUs or groups that need to switch in */ /* order for current grace period to proceed.*/ unsigned long qsmaskinit;
@@ -90,6 +91,8 @@ struct rcu_node {u8 grpnum;/* CPU/group number for next level up. */ u8 level;/* root is at level 0. */ struct rcu_node *parent; +struct list_head blocked_tasks[2 ]; +/* Tasks blocked in RCU read-side critsect. */ }____cacheline_internodealigned_in_smp ;/* Index values for nxttail array in struct rcu_data. */
@@ -111,6 +114,7 @@ struct rcu_data {bool passed_quiesc;/* User-mode/idle loop etc. */ bool qs_pending;/* Core waits for quiesc state. */ bool beenonline;/* CPU online at least once. */ +bool preemptable;/* Preemptable RCU? */ struct rcu_node *mynode;/* This CPU's leaf of hierarchy */ unsigned long grpmask;/* Mask to apply to leaf qsmask. */
@@ -244,5 +248,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 +extern struct rcu_state rcu_preempt_state; +DECLARE_PER_CPU(struct rcu_data, rcu_preempt_data); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ +#endif /* #ifdef RCU_TREE_NONCORE */
kernel/rcutree_plugin.h new file +447 -0
447 lines not on this page · raw message
kernel/rcutree_trace.c +20 -0
@@ -77,6 +77,10 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)static int show_rcudata (struct seq_file *m,void *unused) { +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_puts (m,"rcu_preempt:\n" ); +PRINT_RCU_DATA (rcu_preempt_data, print_one_rcu_data, m); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_puts (m,"rcu_sched:\n" );PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data, m);seq_puts (m,"rcu_bh:\n" );
@@ -125,6 +129,10 @@ static int show_rcudata_csv(struct seq_file *m, void *unused)seq_puts (m,"\"dt\",\"dt nesting\",\"dn\",\"df\"," );#endif /* #ifdef CONFIG_NO_HZ */ seq_puts (m,"\"of\",\"ri\",\"ql\",\"b\"\n" ); +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_puts (m,"\"rcu_preempt:\"\n" ); +PRINT_RCU_DATA (rcu_preempt_data, print_one_rcu_data_csv, m); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_puts (m,"\"rcu_sched:\"\n" );PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data_csv, m);seq_puts (m,"\"rcu_bh:\"\n" );
@@ -172,6 +180,10 @@ static void print_one_rcu_state(struct seq_file *m, struct rcu_state *rsp)static int show_rcuhier (struct seq_file *m,void *unused) { +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_puts (m,"rcu_preempt:\n" ); +print_one_rcu_state (m, &rcu_preempt_state); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_puts (m,"rcu_sched:\n" );print_one_rcu_state (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );
@@ -194,6 +206,10 @@ static struct file_operations rcuhier_fops = {static int show_rcugp (struct seq_file *m,void *unused) { +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_printf (m,"rcu_preempt: completed=%ld gpnum=%ld\n" , + rcu_preempt_state.completed, rcu_preempt_state.gpnum); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_printf (m,"rcu_sched: completed=%ld gpnum=%ld\n" , rcu_sched_state.completed, rcu_sched_state.gpnum); seq_printf(m, "rcu_bh: completed=%ld gpnum=%ld\n",
@@ -244,6 +260,10 @@ static void print_rcu_pendings(struct seq_file *m, struct rcu_state *rsp)static int show_rcu_pending (struct seq_file *m,void *unused) { +#ifdef CONFIG_TREE_PREEMPT_RCU +seq_puts (m,"rcu_preempt:\n" ); +print_rcu_pendings (m, &rcu_preempt_state); +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ seq_puts (m,"rcu_sched:\n" );print_rcu_pendings (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );
lib/Kconfig.debug +1 -1
@@ -725,7 +725,7 @@ config RCU_TORTURE_TEST_RUNNABLE config RCU_CPU_STALL_DETECTOR bool "Check for stalled CPUs delaying RCU grace periods" - depends on CLASSIC_RCU || TREE_RCU + depends on CLASSIC_RCU || TREE_RCU || TREE_PREEMPT_RCU default n help This option causes RCU to printk information on which
[tip:core/rcu] rcu: Remove CONFIG_PREEMPT_RCU
In reply to Paul E. McKenneyCommit-ID: 6b3ef48adf847f7adf11c870e3ffacac150f1564 Gitweb: http://git.kernel.org/tip/6b3ef48adf847f7adf11c870e3ffacac150f1564 Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:53 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:40 +0200
rcu: Remove CONFIG_PREEMPT_RCU
Now that CONFIG_TREE_PREEMPT_RCU is in place, there is no further need for CONFIG_PREEMPT_RCU. Remove it, along with whatever subtle bugs it may (or may not) contain.
LKML-Reference: <125097461396-git-send-email->
--- Documentation/RCU/rcu.txt | 10 +- Documentation/RCU/whatisRCU.txt | 8 +- include/linux/init_task.h | 6 +- include/linux/rcupdate.h | 4 +- include/linux/rcupreempt.h | 140 ---- include/linux/rcupreempt_trace.h | 97 --- include/linux/sched.h | 13 - init/Kconfig | 20 +- kernel/Makefile | 2 - kernel/rcupreempt.c | 1518 -------------------------------------- kernel/rcupreempt_trace.c | 335 --------- lib/Kconfig.debug | 2 +- 12 files changed, 13 insertions(+), 2142 deletions(-)
Documentation/RCU/rcu.txt +5 -5
@@ -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_PREEMPT_RCU) get the + Preemptible variants of RCU (CONFIG_TREE_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
@@ -79,10 +79,10 @@ 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_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. + enabled via the CONFIG_TREE_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. o Where can I find more information on RCU?
Documentation/RCU/whatisRCU.txt +4 -4
@@ -136,10 +136,10 @@ 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_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. + kernels built with CONFIG_TREE_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. Reference counts may be used in conjunction with RCU to maintain longer-term references to data structures.
include/linux/init_task.h +1 -5
@@ -94,11 +94,7 @@ extern struct group_info init_groups;# define CAP_INIT_BSET CAP_INIT_EFF_SET#endif -#ifdef CONFIG_PREEMPT_RCU -#define INIT_TASK_RCU_PREEMPT (tsk) \ - .rcu_read_lock_nesting = 0, \ - .rcu_flipctr_idx = 0, -#elif defined(CONFIG_TREE_PREEMPT_RCU ) +#ifdef CONFIG_TREE_PREEMPT_RCU #define INIT_TASK_RCU_PREEMPT (tsk) \ .rcu_read_lock_nesting = 0, \ .rcu_read_unlock_special = 0, \
include/linux/rcupdate.h +1 -3
@@ -68,11 +68,9 @@ extern int rcu_scheduler_active;#if defined(CONFIG_TREE_RCU ) || defined(CONFIG_TREE_PREEMPT_RCU )#include <linux/rcutree.h> -#elif defined(CONFIG_PREEMPT_RCU ) -#include <linux/rcupreempt.h> #else #error "Unknown RCU implementation specified to kernel configuration" -#endif /* #else #if defined(CONFIG_CLASSIC_RCU) */ +#endif #define RCU_HEAD_INIT { .next = NULL, .func = NULL }#define RCU_HEAD (head) struct rcu_head head = RCU_HEAD_INIT
include/linux/rcupreempt.h deleted +0 -140
140 lines not on this page · raw message
include/linux/rcupreempt_trace.h deleted +0 -97
97 lines not on this page · raw message
include/linux/sched.h +0 -13
@@ -1205,11 +1205,6 @@ struct task_struct {unsigned int policy;cpumask_t cpus_allowed; -#ifdef CONFIG_PREEMPT_RCU -int rcu_read_lock_nesting; -int rcu_flipctr_idx; -#endif /* #ifdef CONFIG_PREEMPT_RCU */ -#ifdef CONFIG_TREE_PREEMPT_RCU int rcu_read_lock_nesting;char rcu_read_unlock_special;
@@ -1744,14 +1739,6 @@ static inline void rcu_copy_process(struct task_struct *p) INIT_LIST_HEAD(&p->rcu_node_entry); } -#elif defined(CONFIG_PREEMPT_RCU) - -static inline void rcu_copy_process (struct task_struct *p) -{ - p->rcu_read_lock_nesting =0 ; - p->rcu_flipctr_idx =0 ; -} -#else static inline void rcu_copy_process (struct task_struct *p)
init/Kconfig +1 -19
@@ -324,17 +324,6 @@ config TREE_RCU thousands of CPUs. It also scales down nicely to smaller systems. -config PREEMPT_RCU - bool "Preemptible RCU" - depends on PREEMPT - help - This option reduces the latency of the kernel by making certain - RCU sections preemptible. Normally RCU code is non-preemptible, if - this option is selected then read-only RCU sections become - preemptible. This helps latency, but may expose bugs due to - now-naive assumptions about each RCU read-side critical section - remaining on a given CPU through its execution. - config TREE_PREEMPT_RCU bool "Preemptable tree-based hierarchical RCU" depends on PREEMPT
@@ -348,7 +337,7 @@ endchoice config RCU_TRACE bool "Enable tracing for RCU" - depends on TREE_RCU || PREEMPT_RCU || TREE_PREEMPT_RCU + depends on TREE_RCU || TREE_PREEMPT_RCU help This option provides tracing in RCU which presents stats in debugfs for debugging RCU implementation.
@@ -395,13 +384,6 @@ config TREE_RCU_TRACE TREE_PREEMPT_RCU implementations, permitting Makefile to trivially select kernel/rcutree_trace.c. -config PREEMPT_RCU_TRACE - def_bool RCU_TRACE && PREEMPT_RCU - select DEBUG_FS - help - This option provides tracing for the PREEMPT_RCU implementation, - permitting Makefile to trivially select kernel/rcupreempt_trace.c. - endmenu # "RCU Subsystem" config IKCONFIG
kernel/Makefile +0 -2
@@ -82,9 +82,7 @@ obj-$(CONFIG_SECCOMP) += seccomp.o obj-$(CONFIG_RCU_TORTURE_TEST) += rcutorture.o obj-$(CONFIG_TREE_RCU) += rcutree.o obj-$(CONFIG_TREE_PREEMPT_RCU) += rcutree.o -obj-$(CONFIG_PREEMPT_RCU) += rcupreempt.o obj-$(CONFIG_TREE_RCU_TRACE) += rcutree_trace.o -obj-$(CONFIG_PREEMPT_RCU_TRACE) += rcupreempt_trace.o obj-$(CONFIG_RELAY) += relay.o obj-$(CONFIG_SYSCTL) += utsname_sysctl.o obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
kernel/rcupreempt.c deleted +0 -1518
1,518 lines not on this page · raw message
kernel/rcupreempt_trace.c deleted +0 -335
335 lines not on this page · raw message
lib/Kconfig.debug +1 -1
@@ -725,7 +725,7 @@ config RCU_TORTURE_TEST_RUNNABLE config RCU_CPU_STALL_DETECTOR bool "Check for stalled CPUs delaying RCU grace periods" - depends on CLASSIC_RCU || TREE_RCU || TREE_PREEMPT_RCU + depends on TREE_RCU || TREE_PREEMPT_RCU default n help This option causes RCU to printk information on which
Re: [tip:core/rcu] rcu: Consolidate sparse and lockdep declarations in include/linux/rcupdate.h
In reply to tip-bot for Paul E. McKenneyQuoted 8 lines · tip-bot for Paul E. McKenney
Commit-ID: bc33f24bdca8b6e97376e3a182ab69e6cdefa989 Gitweb: http://git.kernel.org/tip/bc33f24bdca8b6e97376e3a182ab69e6cdefa989 Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:47 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:37 +0200rcu: Consolidate sparse and lockdep declarations in
include/linux/rcupdate.h
-tip testing found a spontaneous reboot crash, which i bisected back to this commit:
bc33f24bdca8b6e97376e3a182ab69e6cdefa989 is first bad commit
the reboot happens during the ftrace syscall tracepoints self-test:
[ 34.618832] Testing event sys_exit_set_robust_list: OK [ 34.635511] Testing event sys_enter_get_robust_list: OK [ 34.652164] Testing event sys_exit_get_robust_list: OK [ 34.668844] Testing event sys_enter_futex: OK [ 34.685495] Testing event sys_exit_futex: OK [ 34.702170] Testing event lock_acquire: [instant reboot]
There's no log message - just a reboot - which signals some severe crash - perhaps some locking related infinite recursion or something like that?
Config attached.
Ingo
#
# Automatically generated make config: don't edit # Linux kernel version: 2.6.31-rc6
# Sun Aug 23 20:04:38 2009
#
# CONFIG_64BIT is not setCONFIG_X86_32=y
# CONFIG_X86_64 is not setCONFIG_X86=yCONFIG_OUTPUT_FORMAT="elf32-i386" CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" CONFIG_GENERIC_TIME=yCONFIG_GENERIC_CMOS_UPDATE=y CONFIG_CLOCKSOURCE_WATCHDOG=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_HAVE_LATENCYTOP_SUPPORT=y CONFIG_FAST_CMPXCHG_LOCAL=yCONFIG_MMU=yCONFIG_ZONE_DMA=yCONFIG_GENERIC_ISA_DMA=yCONFIG_GENERIC_IOMAP=yCONFIG_GENERIC_HWEIGHT=yCONFIG_GENERIC_GPIO=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y
# CONFIG_RWSEM_GENERIC_SPINLOCK is not set CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y CONFIG_GENERIC_CALIBRATE_DELAY=y
# CONFIG_GENERIC_TIME_VSYSCALL is not set CONFIG_ARCH_HAS_CPU_RELAX=y CONFIG_ARCH_HAS_DEFAULT_IDLE=y CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_HAVE_SETUP_PER_CPU_AREA=y CONFIG_HAVE_DYNAMIC_PER_CPU_AREA=y
# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_ARCH_SUSPEND_POSSIBLE=y
# CONFIG_ZONE_DMA32 is not set CONFIG_ARCH_POPULATES_NODE_MAP=y
# CONFIG_AUDIT_ARCH is not set CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_PENDING_IRQ=y CONFIG_USE_GENERIC_SMP_HELPERS=y CONFIG_X86_32_SMP=yCONFIG_X86_HT=yCONFIG_X86_TRAMPOLINE=yCONFIG_KTIME_SCALAR=y
# CONFIG_BOOTPARAM_SUPPORT is not set CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_CONSTRUCTORS=y
#
# General setup
#CONFIG_EXPERIMENTAL=yCONFIG_BROKEN_BOOT_ALLOWED3=yCONFIG_BROKEN_BOOT_ALLOWED2=y
# CONFIG_BROKEN_BOOT_ALLOWED is not setCONFIG_LOCK_KERNEL=yCONFIG_INIT_ENV_ARG_LIMIT=32CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not setCONFIG_HAVE_KERNEL_GZIP=yCONFIG_HAVE_KERNEL_BZIP2=yCONFIG_HAVE_KERNEL_LZMA=yCONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not setCONFIG_SWAP=yCONFIG_SYSVIPC=yCONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not setCONFIG_TASKSTATS=y
# CONFIG_TASK_DELAY_ACCT is not setCONFIG_TASK_XACCT=y
# CONFIG_TASK_IO_ACCOUNTING is not set
# CONFIG_AUDIT is not set
#
# RCU Subsystem
#CONFIG_TREE_RCU=y
# CONFIG_PREEMPT_RCU is not setCONFIG_RCU_TRACE=yCONFIG_RCU_FANOUT=32CONFIG_RCU_FANOUT_EXACT=yCONFIG_TREE_RCU_TRACE=y
# CONFIG_PREEMPT_RCU_TRACE is not set
# CONFIG_IKCONFIG is not setCONFIG_LOG_BUF_SHIFT=20CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=yCONFIG_GROUP_SCHED=y
# CONFIG_FAIR_GROUP_SCHED is not setCONFIG_RT_GROUP_SCHED=yCONFIG_USER_SCHED=y
# CONFIG_CGROUP_SCHED is not set
# CONFIG_CGROUPS is not setCONFIG_SYSFS_DEPRECATED=yCONFIG_SYSFS_DEPRECATED_V2=yCONFIG_RELAY=yCONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set
# CONFIG_IPC_NS is not setCONFIG_USER_NS=yCONFIG_PID_NS=yCONFIG_NET_NS=y
# CONFIG_BLK_DEV_INITRD is not setCONFIG_CC_OPTIMIZE_FOR_SIZE=yCONFIG_SYSCTL=yCONFIG_ANON_INODES=yCONFIG_EMBEDDED=yCONFIG_UID16=yCONFIG_SYSCTL_SYSCALL=yCONFIG_KALLSYMS=yCONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_EXTRA_PASS is not setCONFIG_HOTPLUG=yCONFIG_PRINTK=y
# CONFIG_BUG is not setCONFIG_ELF_CORE=y
# CONFIG_PCSPKR_PLATFORM is not set
# CONFIG_BASE_FULL is not setCONFIG_FUTEX=yCONFIG_EPOLL=yCONFIG_SIGNALFD=yCONFIG_TIMERFD=yCONFIG_EVENTFD=yCONFIG_SHMEM=yCONFIG_AIO=yCONFIG_HAVE_PERF_COUNTERS=y
#
# Performance Counters
#CONFIG_PERF_COUNTERS=y
# CONFIG_EVENT_PROFILE is not set
# CONFIG_VM_EVENT_COUNTERS is not setCONFIG_PCI_QUIRKS=yCONFIG_SLUB_DEBUG=yCONFIG_STRIP_ASM_SYMS=y
# CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not setCONFIG_SLUB=y
# CONFIG_SLOB is not set
# CONFIG_PROFILING is not setCONFIG_TRACEPOINTS=yCONFIG_MARKERS=yCONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not setCONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=yCONFIG_HAVE_IOREMAP_PROT=yCONFIG_HAVE_KPROBES=yCONFIG_HAVE_KRETPROBES=yCONFIG_HAVE_ARCH_TRACEHOOK=yCONFIG_HAVE_DMA_ATTRS=yCONFIG_HAVE_DMA_API_DEBUG=y
#
# GCOV-based kernel profiling
#
# CONFIG_GCOV_KERNEL is not setCONFIG_SLOW_WORK=yCONFIG_HAVE_GENERIC_DMA_COHERENT=yCONFIG_SLABINFO=yCONFIG_RT_MUTEXES=yCONFIG_BASE_SMALL=1CONFIG_MODULES=yCONFIG_MODULE_FORCE_LOAD=y
# CONFIG_MODULE_UNLOAD is not set
# CONFIG_MODVERSIONS is not setCONFIG_MODULE_SRCVERSION_ALL=yCONFIG_STOP_MACHINE=yCONFIG_BLOCK=yCONFIG_LBDAF=yCONFIG_BLK_DEV_BSG=y
# CONFIG_BLK_DEV_INTEGRITY is not set
#
# IO Schedulers
#CONFIG_IOSCHED_NOOP=yCONFIG_IOSCHED_AS=yCONFIG_IOSCHED_DEADLINE=yCONFIG_IOSCHED_CFQ=mCONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not setCONFIG_DEFAULT_IOSCHED="anticipatory"CONFIG_PREEMPT_NOTIFIERS=yCONFIG_FREEZER=y
#
# Processor type and features
#CONFIG_TICK_ONESHOT=yCONFIG_NO_HZ=yCONFIG_HIGH_RES_TIMERS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=yCONFIG_SMP=yCONFIG_SPARSE_IRQ=yCONFIG_NUMA_IRQ_DESC=yCONFIG_X86_MPPARSE=yCONFIG_X86_BIGSMP=y CONFIG_X86_EXTENDED_PLATFORM=yCONFIG_X86_ELAN=yCONFIG_X86_RDC321X=y CONFIG_X86_32_NON_STANDARD=yCONFIG_X86_NUMAQ=yCONFIG_X86_SUMMIT=yCONFIG_X86_ES7000=y CONFIG_SCHED_OMIT_FRAME_POINTER=y CONFIG_PARAVIRT_GUEST=yCONFIG_VMI=yCONFIG_KVM_CLOCK=yCONFIG_KVM_GUEST=y
# CONFIG_LGUEST_GUEST is not set CONFIG_PARAVIRT=yCONFIG_PARAVIRT_SPINLOCKS=y CONFIG_PARAVIRT_CLOCK=y
# CONFIG_PARAVIRT_DEBUG is not set
# CONFIG_MEMTEST is not set CONFIG_X86_SUMMIT_NUMA=y CONFIG_X86_CYCLONE_TIMER=yCONFIG_X86_CPU=yCONFIG_X86_L1_CACHE_BYTES=64 CONFIG_X86_INTERNODE_CACHE_BYTES=64 CONFIG_X86_CMPXCHG=yCONFIG_X86_L1_CACHE_SHIFT=4CONFIG_X86_XADD=yCONFIG_X86_WP_WORKS_OK=yCONFIG_X86_INVLPG=yCONFIG_X86_BSWAP=yCONFIG_X86_POPAD_OK=yCONFIG_X86_ALIGNMENT_16=yCONFIG_X86_CMPXCHG64=y CONFIG_X86_MINIMUM_CPU_FAMILY=4 CONFIG_X86_DEBUGCTLMSR=y CONFIG_PROCESSOR_SELECT=yCONFIG_CPU_SUP_INTEL=y
# CONFIG_CPU_SUP_CYRIX_32 is not set CONFIG_CPU_SUP_AMD=yCONFIG_CPU_SUP_CENTAUR=y
# CONFIG_CPU_SUP_TRANSMETA_32 is not set CONFIG_CPU_SUP_UMC_32=y
# CONFIG_X86_DS is not set
# CONFIG_HPET_TIMER is not set
# CONFIG_DMI is not set
# CONFIG_IOMMU_HELPER is not set
# CONFIG_IOMMU_API is not setCONFIG_NR_CPUS=32CONFIG_SCHED_SMT=yCONFIG_SCHED_MC=y
# CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set CONFIG_X86_LOCAL_APIC=yCONFIG_X86_IO_APIC=y CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y CONFIG_X86_MCE=y
# CONFIG_X86_OLD_MCE is not set CONFIG_X86_NEW_MCE=y
# CONFIG_X86_MCE_INTEL is not set CONFIG_X86_MCE_AMD=yCONFIG_X86_ANCIENT_MCE=y CONFIG_X86_MCE_THRESHOLD=y
# CONFIG_X86_MCE_INJECT is not set
# CONFIG_VM86 is not setCONFIG_I8K=yCONFIG_X86_REBOOTFIXUPS=y
# CONFIG_MICROCODE is not setCONFIG_X86_MSR=yCONFIG_X86_CPUID=yCONFIG_X86_CPU_DEBUG=m
# CONFIG_NOHIGHMEM is not set
# CONFIG_HIGHMEM4G is not set CONFIG_HIGHMEM64G=yCONFIG_VMSPLIT_3G=y
# CONFIG_VMSPLIT_3G_OPT is not set
# CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_2G_OPT is not set
# CONFIG_VMSPLIT_1G is not set CONFIG_PAGE_OFFSET=0xC0000000CONFIG_HIGHMEM=yCONFIG_X86_PAE=yCONFIG_ARCH_PHYS_ADDR_T_64BIT=yCONFIG_NUMA=yCONFIG_NODES_SHIFT=4CONFIG_HAVE_ARCH_BOOTMEM=y CONFIG_ARCH_HAVE_MEMORY_PRESENT=y CONFIG_NEED_NODE_MEMMAP_SIZE=y CONFIG_HAVE_ARCH_ALLOC_REMAP=y CONFIG_ARCH_DISCONTIGMEM_ENABLE=y CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_SELECT_MEMORY_MODEL=y
# CONFIG_FLATMEM_MANUAL is not set CONFIG_DISCONTIGMEM_MANUAL=y
# CONFIG_SPARSEMEM_MANUAL is not set CONFIG_DISCONTIGMEM=yCONFIG_FLAT_NODE_MEM_MAP=y CONFIG_NEED_MULTIPLE_NODES=y CONFIG_HAVE_MEMORY_PRESENT=y CONFIG_SPARSEMEM_STATIC=y CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=4CONFIG_MIGRATION=yCONFIG_PHYS_ADDR_T_64BIT=y CONFIG_ZONE_DMA_FLAG=1CONFIG_BOUNCE=yCONFIG_VIRT_TO_BUS=yCONFIG_HAVE_MLOCK=y CONFIG_HAVE_MLOCKED_PAGE_BIT=y CONFIG_MMU_NOTIFIER=y CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_HIGHPTE=y CONFIG_X86_CHECK_BIOS_CORRUPTION=y
# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set # CONFIG_X86_RESERVE_LOW_64K is not set
# CONFIG_MATH_EMULATION is not setCONFIG_MTRR=yCONFIG_MTRR_SANITIZER=y CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0 CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 CONFIG_X86_PAT=y
# CONFIG_EFI is not setCONFIG_SECCOMP=yCONFIG_CC_STACKPROTECTOR_ALL=y CONFIG_CC_STACKPROTECTOR=y
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not setCONFIG_HZ_300=y
# CONFIG_HZ_1000 is not setCONFIG_HZ=300CONFIG_SCHED_HRTICK=yCONFIG_KEXEC=yCONFIG_CRASH_DUMP=yCONFIG_KEXEC_JUMP=y CONFIG_PHYSICAL_START=0x1000000
# CONFIG_RELOCATABLE is not set CONFIG_PHYSICAL_ALIGN=0x1000000 CONFIG_HOTPLUG_CPU=yCONFIG_COMPAT_VDSO=yCONFIG_CMDLINE_BOOL=yCONFIG_CMDLINE=""
# CONFIG_CMDLINE_OVERRIDE is not set CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
# CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID is not set
#
# Power management and ACPI options
#CONFIG_PM=y
# CONFIG_PM_DEBUG is not setCONFIG_PM_SLEEP_SMP=yCONFIG_PM_SLEEP=yCONFIG_SUSPEND=yCONFIG_SUSPEND_FREEZER=yCONFIG_HIBERNATION_NVS=yCONFIG_HIBERNATION=yCONFIG_PM_STD_PARTITION=""CONFIG_ACPI=yCONFIG_ACPI_SLEEP=yCONFIG_ACPI_PROCFS=yCONFIG_ACPI_PROCFS_POWER=yCONFIG_ACPI_SYSFS_POWER=yCONFIG_ACPI_PROC_EVENT=yCONFIG_ACPI_AC=mCONFIG_ACPI_BATTERY=mCONFIG_ACPI_BUTTON=mCONFIG_ACPI_VIDEO=mCONFIG_ACPI_FAN=mCONFIG_ACPI_DOCK=y
# CONFIG_ACPI_PROCESSOR is not setCONFIG_ACPI_NUMA=y
# CONFIG_ACPI_CUSTOM_DSDT is not setCONFIG_ACPI_BLACKLIST_YEAR=0CONFIG_ACPI_DEBUG=yCONFIG_ACPI_DEBUG_FUNC_TRACE=yCONFIG_ACPI_PCI_SLOT=y
# CONFIG_X86_PM_TIMER is not set
# CONFIG_ACPI_CONTAINER is not set
# CONFIG_ACPI_SBS is not set
# CONFIG_APM is not set
#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not setCONFIG_CPU_IDLE=yCONFIG_CPU_IDLE_GOV_LADDER=yCONFIG_CPU_IDLE_GOV_MENU=y
#
# Bus options (PCI etc.)
#CONFIG_PCI=yCONFIG_PCI_GOBIOS=y
# CONFIG_PCI_GOMMCONFIG is not set
# CONFIG_PCI_GODIRECT is not set
# CONFIG_PCI_GOOLPC is not set
# CONFIG_PCI_GOANY is not setCONFIG_PCI_BIOS=yCONFIG_PCI_DOMAINS=y
# CONFIG_DMAR is not setCONFIG_PCIEPORTBUS=yCONFIG_HOTPLUG_PCI_PCIE=mCONFIG_PCIEAER=yCONFIG_PCIE_ECRC=yCONFIG_PCIEAER_INJECT=mCONFIG_PCIEASPM=yCONFIG_PCIEASPM_DEBUG=yCONFIG_ARCH_SUPPORTS_MSI=yCONFIG_PCI_MSI=y
# CONFIG_PCI_LEGACY is not set
# CONFIG_PCI_DEBUG is not set
# CONFIG_PCI_STUB is not setCONFIG_HT_IRQ=yCONFIG_PCI_IOV=yCONFIG_ISA_DMA_API=yCONFIG_ISA=y
# CONFIG_EISA is not setCONFIG_MCA=yCONFIG_MCA_LEGACY=yCONFIG_MCA_PROC_FS=y
# CONFIG_SCx200 is not setCONFIG_OLPC=yCONFIG_K8_NB=yCONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
# CONFIG_PCMCIA is not setCONFIG_CARDBUS=y
#
# PC-card bridges
#CONFIG_YENTA=mCONFIG_YENTA_O2=yCONFIG_YENTA_RICOH=y
# CONFIG_YENTA_TI is not setCONFIG_YENTA_TOSHIBA=yCONFIG_PCMCIA_PROBE=yCONFIG_PCCARD_NONSTATIC=mCONFIG_HOTPLUG_PCI=m
# CONFIG_HOTPLUG_PCI_FAKE is not set
# CONFIG_HOTPLUG_PCI_COMPAQ is not setCONFIG_HOTPLUG_PCI_IBM=mCONFIG_HOTPLUG_PCI_ACPI=mCONFIG_HOTPLUG_PCI_ACPI_IBM=mCONFIG_HOTPLUG_PCI_CPCI=yCONFIG_HOTPLUG_PCI_CPCI_ZT5550=mCONFIG_HOTPLUG_PCI_CPCI_GENERIC=mCONFIG_HOTPLUG_PCI_SHPC=m
#
# Executable file formats / Emulations
#CONFIG_BINFMT_ELF=yCONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=yCONFIG_HAVE_AOUT=yCONFIG_BINFMT_AOUT=yCONFIG_BINFMT_MISC=yCONFIG_HAVE_ATOMIC_IOMAP=yCONFIG_NET=y
#
# Networking options
#CONFIG_PACKET=yCONFIG_PACKET_MMAP=yCONFIG_UNIX=yCONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not setCONFIG_XFRM_STATISTICS=yCONFIG_XFRM_IPCOMP=m
# CONFIG_NET_KEY is not setCONFIG_INET=yCONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not setCONFIG_IP_FIB_HASH=yCONFIG_IP_PNP=yCONFIG_IP_PNP_DHCP=yCONFIG_IP_PNP_BOOTP=yCONFIG_IP_PNP_RARP=y
# CONFIG_NET_IPIP is not setCONFIG_NET_IPGRE=y
# CONFIG_NET_IPGRE_BROADCAST is not setCONFIG_IP_MROUTE=yCONFIG_IP_PIMSM_V1=y
# CONFIG_IP_PIMSM_V2 is not set
# CONFIG_ARPD is not setCONFIG_SYN_COOKIES=yCONFIG_INET_AH=yCONFIG_INET_ESP=yCONFIG_INET_IPCOMP=mCONFIG_INET_XFRM_TUNNEL=mCONFIG_INET_TUNNEL=mCONFIG_INET_XFRM_MODE_TRANSPORT=yCONFIG_INET_XFRM_MODE_TUNNEL=yCONFIG_INET_XFRM_MODE_BEET=yCONFIG_INET_LRO=y
# CONFIG_INET_DIAG is not setCONFIG_TCP_CONG_ADVANCED=y
# CONFIG_TCP_CONG_BIC is not set
# CONFIG_TCP_CONG_CUBIC is not setCONFIG_TCP_CONG_WESTWOOD=mCONFIG_TCP_CONG_HTCP=m
# CONFIG_TCP_CONG_HSTCP is not setCONFIG_TCP_CONG_HYBLA=yCONFIG_TCP_CONG_VEGAS=mCONFIG_TCP_CONG_SCALABLE=m
# CONFIG_TCP_CONG_LP is not set
# CONFIG_TCP_CONG_VENO is not setCONFIG_TCP_CONG_YEAH=mCONFIG_TCP_CONG_ILLINOIS=y
# CONFIG_DEFAULT_BIC is not set
# CONFIG_DEFAULT_CUBIC is not set
# CONFIG_DEFAULT_HTCP is not set
# CONFIG_DEFAULT_VEGAS is not set
# CONFIG_DEFAULT_WESTWOOD is not setCONFIG_DEFAULT_RENO=yCONFIG_DEFAULT_TCP_CONG="reno"CONFIG_TCP_MD5SIG=yCONFIG_IPV6=mCONFIG_IPV6_PRIVACY=yCONFIG_IPV6_ROUTER_PREF=yCONFIG_IPV6_ROUTE_INFO=y
# CONFIG_IPV6_OPTIMISTIC_DAD is not setCONFIG_INET6_AH=m
# CONFIG_INET6_ESP is not setCONFIG_INET6_IPCOMP=m
# CONFIG_IPV6_MIP6 is not setCONFIG_INET6_XFRM_TUNNEL=mCONFIG_INET6_TUNNEL=mCONFIG_INET6_XFRM_MODE_TRANSPORT=m
# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
# CONFIG_INET6_XFRM_MODE_BEET is not setCONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=mCONFIG_IPV6_SIT=mCONFIG_IPV6_NDISC_NODETYPE=yCONFIG_IPV6_TUNNEL=mCONFIG_IPV6_MULTIPLE_TABLES=yCONFIG_IPV6_SUBTREES=y
# CONFIG_IPV6_MROUTE is not setCONFIG_NETLABEL=yCONFIG_NETWORK_SECMARK=yCONFIG_NETFILTER=yCONFIG_NETFILTER_DEBUG=y
# CONFIG_NETFILTER_ADVANCED is not set
#
# Core Netfilter Configuration
#CONFIG_NETFILTER_NETLINK=mCONFIG_NETFILTER_NETLINK_LOG=mCONFIG_NF_CONNTRACK=mCONFIG_NF_CONNTRACK_SECMARK=y
# CONFIG_NF_CONNTRACK_FTP is not set
# CONFIG_NF_CONNTRACK_IRC is not setCONFIG_NF_CONNTRACK_SIP=mCONFIG_NF_CT_NETLINK=mCONFIG_NETFILTER_XTABLES=yCONFIG_NETFILTER_XT_TARGET_CONNSECMARK=mCONFIG_NETFILTER_XT_TARGET_MARK=m
# CONFIG_NETFILTER_XT_TARGET_NFLOG is not setCONFIG_NETFILTER_XT_TARGET_SECMARK=y
# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not setCONFIG_NETFILTER_XT_MATCH_CONNTRACK=mCONFIG_NETFILTER_XT_MATCH_MARK=mCONFIG_NETFILTER_XT_MATCH_POLICY=yCONFIG_NETFILTER_XT_MATCH_STATE=mCONFIG_IP_VS=mCONFIG_IP_VS_IPV6=yCONFIG_IP_VS_DEBUG=yCONFIG_IP_VS_TAB_BITS=12
#
# IPVS transport protocol load balancing support
#
# CONFIG_IP_VS_PROTO_TCP is not setCONFIG_IP_VS_PROTO_UDP=yCONFIG_IP_VS_PROTO_AH_ESP=yCONFIG_IP_VS_PROTO_ESP=y
# CONFIG_IP_VS_PROTO_AH is not set
#
# IPVS scheduler
#CONFIG_IP_VS_RR=mCONFIG_IP_VS_WRR=m
# CONFIG_IP_VS_LC is not setCONFIG_IP_VS_WLC=mCONFIG_IP_VS_LBLC=mCONFIG_IP_VS_LBLCR=mCONFIG_IP_VS_DH=mCONFIG_IP_VS_SH=m
# CONFIG_IP_VS_SED is not set
# CONFIG_IP_VS_NQ is not set
#
# IPVS application helper
#
#
# IP: Netfilter Configuration
#
# CONFIG_NF_DEFRAG_IPV4 is not set
# CONFIG_NF_CONNTRACK_IPV4 is not setCONFIG_IP_NF_IPTABLES=m
# CONFIG_IP_NF_FILTER is not set
# CONFIG_IP_NF_TARGET_LOG is not setCONFIG_IP_NF_TARGET_ULOG=mCONFIG_IP_NF_MANGLE=m
#
# IPv6: Netfilter Configuration
#CONFIG_NF_CONNTRACK_IPV6=mCONFIG_IP6_NF_IPTABLES=mCONFIG_IP6_NF_MATCH_IPV6HEADER=m
# CONFIG_IP6_NF_TARGET_LOG is not set
# CONFIG_IP6_NF_FILTER is not setCONFIG_IP6_NF_MANGLE=mCONFIG_IP_DCCP=m
#
# DCCP CCIDs Configuration (EXPERIMENTAL)
#CONFIG_IP_DCCP_CCID2_DEBUG=yCONFIG_IP_DCCP_CCID3=yCONFIG_IP_DCCP_CCID3_DEBUG=yCONFIG_IP_DCCP_CCID3_RTO=100CONFIG_IP_DCCP_TFRC_LIB=yCONFIG_IP_DCCP_TFRC_DEBUG=y
#
# DCCP Kernel Hacking
#CONFIG_IP_DCCP_DEBUG=yCONFIG_IP_SCTP=mCONFIG_SCTP_DBG_MSG=yCONFIG_SCTP_DBG_OBJCNT=yCONFIG_SCTP_HMAC_NONE=y
# CONFIG_SCTP_HMAC_SHA1 is not set
# CONFIG_SCTP_HMAC_MD5 is not setCONFIG_TIPC=mCONFIG_TIPC_ADVANCED=yCONFIG_TIPC_ZONES=3CONFIG_TIPC_CLUSTERS=1CONFIG_TIPC_NODES=255CONFIG_TIPC_SLAVE_NODES=0CONFIG_TIPC_PORTS=8191CONFIG_TIPC_LOG=0CONFIG_TIPC_DEBUG=yCONFIG_ATM=m
# CONFIG_ATM_CLIP is not setCONFIG_ATM_LANE=mCONFIG_ATM_MPOA=mCONFIG_ATM_BR2684=m
# CONFIG_ATM_BR2684_IPFILTER is not setCONFIG_STP=mCONFIG_GARP=m
# CONFIG_BRIDGE is not setCONFIG_NET_DSA=yCONFIG_NET_DSA_TAG_DSA=yCONFIG_NET_DSA_TAG_EDSA=yCONFIG_NET_DSA_TAG_TRAILER=yCONFIG_NET_DSA_MV88E6XXX=yCONFIG_NET_DSA_MV88E6060=yCONFIG_NET_DSA_MV88E6XXX_NEED_PPU=yCONFIG_NET_DSA_MV88E6131=yCONFIG_NET_DSA_MV88E6123_61_65=yCONFIG_VLAN_8021Q=mCONFIG_VLAN_8021Q_GVRP=y
# CONFIG_DECNET is not setCONFIG_LLC=mCONFIG_LLC2=mCONFIG_IPX=m
# CONFIG_IPX_INTERN is not setCONFIG_ATALK=mCONFIG_DEV_APPLETALK=m
# CONFIG_LTPC is not setCONFIG_IPDDP=mCONFIG_IPDDP_ENCAP=y
# CONFIG_IPDDP_DECAP is not set
# CONFIG_X25 is not setCONFIG_LAPB=mCONFIG_ECONET=mCONFIG_ECONET_AUNUDP=yCONFIG_ECONET_NATIVE=yCONFIG_WAN_ROUTER=m
# CONFIG_PHONET is not set
# CONFIG_IEEE802154 is not setCONFIG_NET_SCHED=y
#
# Queueing/Scheduling
#
# CONFIG_NET_SCH_CBQ is not setCONFIG_NET_SCH_HTB=m
# CONFIG_NET_SCH_HFSC is not setCONFIG_NET_SCH_ATM=mCONFIG_NET_SCH_PRIO=yCONFIG_NET_SCH_MULTIQ=m
# CONFIG_NET_SCH_RED is not set
# CONFIG_NET_SCH_SFQ is not set
# CONFIG_NET_SCH_TEQL is not setCONFIG_NET_SCH_TBF=mCONFIG_NET_SCH_GRED=yCONFIG_NET_SCH_DSMARK=yCONFIG_NET_SCH_NETEM=y
# CONFIG_NET_SCH_DRR is not set
# CONFIG_NET_SCH_INGRESS is not set
#
# Classification
#CONFIG_NET_CLS=y
# CONFIG_NET_CLS_BASIC is not setCONFIG_NET_CLS_TCINDEX=mCONFIG_NET_CLS_ROUTE4=mCONFIG_NET_CLS_ROUTE=yCONFIG_NET_CLS_FW=mCONFIG_NET_CLS_U32=mCONFIG_CLS_U32_PERF=yCONFIG_CLS_U32_MARK=yCONFIG_NET_CLS_RSVP=y
# CONFIG_NET_CLS_RSVP6 is not set
# CONFIG_NET_CLS_FLOW is not set
# CONFIG_NET_EMATCH is not setCONFIG_NET_CLS_ACT=yCONFIG_NET_ACT_POLICE=m
# CONFIG_NET_ACT_GACT is not set
# CONFIG_NET_ACT_MIRRED is not setCONFIG_NET_ACT_IPT=mCONFIG_NET_ACT_NAT=m
# CONFIG_NET_ACT_PEDIT is not setCONFIG_NET_ACT_SIMP=yCONFIG_NET_ACT_SKBEDIT=m
# CONFIG_NET_CLS_IND is not setCONFIG_NET_SCH_FIFO=y
# CONFIG_DCB is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NET_DROP_MONITOR is not setCONFIG_HAMRADIO=y
#
# Packet Radio protocols
#CONFIG_AX25=mCONFIG_AX25_DAMA_SLAVE=yCONFIG_NETROM=m
# CONFIG_ROSE is not set
#
# AX.25 network device drivers
#CONFIG_MKISS=mCONFIG_6PACK=m
# CONFIG_BPQETHER is not setCONFIG_SCC=mCONFIG_SCC_DELAY=yCONFIG_SCC_TRXECHO=yCONFIG_BAYCOM_SER_FDX=mCONFIG_BAYCOM_SER_HDX=mCONFIG_BAYCOM_PAR=mCONFIG_BAYCOM_EPP=m
# CONFIG_YAM is not set
# CONFIG_CAN is not setCONFIG_IRDA=m
#
# IrDA protocols
#CONFIG_IRLAN=mCONFIG_IRCOMM=m
# CONFIG_IRDA_ULTRA is not set
#
# IrDA options
#
# CONFIG_IRDA_CACHE_LAST_LSAP is not setCONFIG_IRDA_FAST_RR=y
# CONFIG_IRDA_DEBUG is not set
#
# Infrared-port device drivers
#
#
# SIR device drivers
#CONFIG_IRTTY_SIR=m
#
# Dongle support
#
# CONFIG_DONGLE is not setCONFIG_KINGSUN_DONGLE=m
# CONFIG_KSDAZZLE_DONGLE is not setCONFIG_KS959_DONGLE=m
#
# FIR device drivers
#
# CONFIG_USB_IRDA is not set
# CONFIG_SIGMATEL_FIR is not setCONFIG_NSC_FIR=mCONFIG_WINBOND_FIR=m
# CONFIG_TOSHIBA_FIR is not set
# CONFIG_SMC_IRCC_FIR is not setCONFIG_ALI_FIR=m
# CONFIG_VLSI_FIR is not setCONFIG_VIA_FIR=m
# CONFIG_MCS_FIR is not set
# CONFIG_BT is not setCONFIG_AF_RXRPC=yCONFIG_AF_RXRPC_DEBUG=y
# CONFIG_RXKAD is not setCONFIG_FIB_RULES=yCONFIG_WIRELESS=y
# CONFIG_CFG80211 is not setCONFIG_WIRELESS_OLD_REGULATORY=yCONFIG_WIRELESS_EXT=yCONFIG_WIRELESS_EXT_SYSFS=yCONFIG_LIB80211=yCONFIG_LIB80211_CRYPT_WEP=yCONFIG_LIB80211_CRYPT_CCMP=yCONFIG_LIB80211_CRYPT_TKIP=y
# CONFIG_LIB80211_DEBUG is not set
#
# CFG80211 needs to be enabled for MAC80211
#CONFIG_MAC80211_DEFAULT_PS_VALUE=0CONFIG_WIMAX=mCONFIG_WIMAX_DEBUG_LEVEL=8CONFIG_RFKILL=mCONFIG_RFKILL_LEDS=yCONFIG_RFKILL_INPUT=y
# CONFIG_NET_9P is not set
#
# Device Drivers
#
#
# Generic Driver Options
#CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"CONFIG_STANDALONE=yCONFIG_PREVENT_FIRMWARE_BUILD=yCONFIG_FW_LOADER=y
# CONFIG_FIRMWARE_IN_KERNEL is not setCONFIG_EXTRA_FIRMWARE=""CONFIG_DEBUG_DRIVER=y
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not setCONFIG_CONNECTOR=yCONFIG_PROC_EVENTS=yCONFIG_PARPORT=yCONFIG_PARPORT_PC=y
# CONFIG_PARPORT_SERIAL is not setCONFIG_PARPORT_PC_FIFO=yCONFIG_PARPORT_PC_SUPERIO=y
# CONFIG_PARPORT_GSC is not set
# CONFIG_PARPORT_AX88796 is not setCONFIG_PARPORT_1284=yCONFIG_PARPORT_NOT_PC=yCONFIG_PNP=y
# CONFIG_PNP_DEBUG_MESSAGES is not set
#
# Protocols
#CONFIG_ISAPNP=yCONFIG_PNPBIOS=yCONFIG_PNPBIOS_PROC_FS=yCONFIG_PNPACPI=yCONFIG_BLK_DEV=yCONFIG_BLK_DEV_FD=yCONFIG_BLK_DEV_XD=yCONFIG_BLK_CPQ_DA=yCONFIG_BLK_CPQ_CISS_DA=yCONFIG_CISS_SCSI_TAPE=y
# CONFIG_BLK_DEV_DAC960 is not setCONFIG_BLK_DEV_UMEM=m
# CONFIG_BLK_DEV_COW_COMMON is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not setCONFIG_BLK_DEV_OSD=mCONFIG_BLK_DEV_SX8=mCONFIG_BLK_DEV_UB=yCONFIG_BLK_DEV_RAM=yCONFIG_BLK_DEV_RAM_COUNT=16CONFIG_BLK_DEV_RAM_SIZE=4096
# CONFIG_BLK_DEV_XIP is not setCONFIG_CDROM_PKTCDVD=mCONFIG_CDROM_PKTCDVD_BUFFERS=8CONFIG_CDROM_PKTCDVD_WCACHE=y
# CONFIG_ATA_OVER_ETH is not setCONFIG_VIRTIO_BLK=m
# CONFIG_BLK_DEV_HD is not set
# CONFIG_MISC_DEVICES is not setCONFIG_CB710_CORE=yCONFIG_HAVE_IDE=y
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not setCONFIG_SCSI=yCONFIG_SCSI_DMA=yCONFIG_SCSI_TGT=mCONFIG_SCSI_NETLINK=yCONFIG_SCSI_PROC_FS=y
#
# SCSI support type (disk, tape, CD-ROM)
#CONFIG_BLK_DEV_SD=yCONFIG_CHR_DEV_ST=mCONFIG_CHR_DEV_OSST=y
# CONFIG_BLK_DEV_SR is not setCONFIG_CHR_DEV_SG=mCONFIG_CHR_DEV_SCH=yCONFIG_SCSI_MULTI_LUN=yCONFIG_SCSI_CONSTANTS=yCONFIG_SCSI_LOGGING=y
# CONFIG_SCSI_SCAN_ASYNC is not setCONFIG_SCSI_WAIT_SCAN=m
#
# SCSI Transports
#CONFIG_SCSI_SPI_ATTRS=yCONFIG_SCSI_FC_ATTRS=yCONFIG_SCSI_ISCSI_ATTRS=mCONFIG_SCSI_SAS_ATTRS=yCONFIG_SCSI_SAS_LIBSAS=mCONFIG_SCSI_SAS_ATA=yCONFIG_SCSI_SAS_HOST_SMP=yCONFIG_SCSI_SAS_LIBSAS_DEBUG=yCONFIG_SCSI_LOWLEVEL=yCONFIG_ISCSI_TCP=mCONFIG_SCSI_CXGB3_ISCSI=m
# CONFIG_SCSI_BNX2_ISCSI is not setCONFIG_BLK_DEV_3W_XXXX_RAID=m
# CONFIG_SCSI_3W_9XXX is not setCONFIG_SCSI_7000FASST=yCONFIG_SCSI_ACARD=mCONFIG_SCSI_AHA152X=m
# CONFIG_SCSI_AHA1542 is not setCONFIG_SCSI_AACRAID=mCONFIG_SCSI_AIC7XXX=yCONFIG_AIC7XXX_CMDS_PER_DEVICE=32CONFIG_AIC7XXX_RESET_DELAY_MS=5000CONFIG_AIC7XXX_DEBUG_ENABLE=yCONFIG_AIC7XXX_DEBUG_MASK=0CONFIG_AIC7XXX_REG_PRETTY_PRINT=yCONFIG_SCSI_AIC7XXX_OLD=mCONFIG_SCSI_AIC79XX=yCONFIG_AIC79XX_CMDS_PER_DEVICE=32CONFIG_AIC79XX_RESET_DELAY_MS=5000
# CONFIG_AIC79XX_DEBUG_ENABLE is not setCONFIG_AIC79XX_DEBUG_MASK=0CONFIG_AIC79XX_REG_PRETTY_PRINT=yCONFIG_SCSI_AIC94XX=mCONFIG_AIC94XX_DEBUG=y
# CONFIG_SCSI_MVSAS is not set
# CONFIG_SCSI_DPT_I2O is not setCONFIG_SCSI_ADVANSYS=m
# CONFIG_SCSI_IN2000 is not setCONFIG_SCSI_ARCMSR=m
# CONFIG_SCSI_ARCMSR_AER is not setCONFIG_MEGARAID_NEWGEN=y
# CONFIG_MEGARAID_MM is not setCONFIG_MEGARAID_LEGACY=m
# CONFIG_MEGARAID_SAS is not setCONFIG_SCSI_MPT2SAS=yCONFIG_SCSI_MPT2SAS_MAX_SGE=128CONFIG_SCSI_MPT2SAS_LOGGING=y
# CONFIG_SCSI_HPTIOP is not setCONFIG_SCSI_BUSLOGIC=m
# CONFIG_SCSI_FLASHPOINT is not setCONFIG_LIBFC=m
# CONFIG_LIBFCOE is not set
# CONFIG_FCOE is not setCONFIG_FCOE_FNIC=mCONFIG_SCSI_DMX3191D=m
# CONFIG_SCSI_DTC3280 is not setCONFIG_SCSI_EATA=mCONFIG_SCSI_EATA_TAGGED_QUEUE=yCONFIG_SCSI_EATA_LINKED_COMMANDS=yCONFIG_SCSI_EATA_MAX_TAGS=16
# CONFIG_SCSI_FUTURE_DOMAIN is not setCONFIG_SCSI_FD_MCS=mCONFIG_SCSI_GDTH=y
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not setCONFIG_SCSI_IBMMCA=m
# CONFIG_IBMMCA_SCSI_ORDER_STANDARD is not set
# CONFIG_IBMMCA_SCSI_DEV_RESET is not setCONFIG_SCSI_IPS=yCONFIG_SCSI_INITIO=y
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_PPA is not set
# CONFIG_SCSI_IMM is not setCONFIG_SCSI_NCR53C406A=y
# CONFIG_SCSI_NCR_D700 is not setCONFIG_SCSI_STEX=mCONFIG_SCSI_SYM53C8XX_2=mCONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64CONFIG_SCSI_SYM53C8XX_MMIO=yCONFIG_SCSI_IPR=yCONFIG_SCSI_IPR_TRACE=y
# CONFIG_SCSI_IPR_DUMP is not setCONFIG_SCSI_NCR_Q720=yCONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32CONFIG_SCSI_NCR53C8XX_SYNC=20CONFIG_SCSI_PAS16=mCONFIG_SCSI_QLOGIC_FAS=mCONFIG_SCSI_QLOGIC_1280=mCONFIG_SCSI_QLA_FC=yCONFIG_SCSI_QLA_ISCSI=m
# CONFIG_SCSI_LPFC is not setCONFIG_SCSI_SIM710=yCONFIG_SCSI_SYM53C416=y
CONFIG_SCSI_DC395x=y
# CONFIG_SCSI_DC390T is not setCONFIG_SCSI_T128=y
# CONFIG_SCSI_U14_34F is not setCONFIG_SCSI_ULTRASTOR=y
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_DEBUG is not set
# CONFIG_SCSI_SRP is not set
# CONFIG_SCSI_DH is not setCONFIG_SCSI_OSD_INITIATOR=mCONFIG_SCSI_OSD_ULD=mCONFIG_SCSI_OSD_DPRINT_SENSE=1CONFIG_SCSI_OSD_DEBUG=yCONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not setCONFIG_ATA_ACPI=yCONFIG_SATA_PMP=yCONFIG_SATA_AHCI=yCONFIG_SATA_SIL24=yCONFIG_ATA_SFF=yCONFIG_SATA_SVW=mCONFIG_ATA_PIIX=y
# CONFIG_SATA_MV is not setCONFIG_SATA_NV=y
# CONFIG_PDC_ADMA is not setCONFIG_SATA_QSTOR=y
# CONFIG_SATA_PROMISE is not setCONFIG_SATA_SX4=mCONFIG_SATA_SIL=mCONFIG_SATA_SIS=y
# CONFIG_SATA_ULI is not setCONFIG_SATA_VIA=y
# CONFIG_SATA_VITESSE is not setCONFIG_SATA_INIC162X=yCONFIG_PATA_ACPI=m
# CONFIG_PATA_ALI is not setCONFIG_PATA_AMD=y
# CONFIG_PATA_ARTOP is not setCONFIG_PATA_ATIIXP=yCONFIG_PATA_CMD640_PCI=mCONFIG_PATA_CMD64X=mCONFIG_PATA_CS5520=yCONFIG_PATA_CS5530=m
# CONFIG_PATA_CS5535 is not setCONFIG_PATA_CS5536=yCONFIG_PATA_CYPRESS=mCONFIG_PATA_EFAR=y
# CONFIG_ATA_GENERIC is not set
# CONFIG_PATA_HPT366 is not setCONFIG_PATA_HPT37X=yCONFIG_PATA_HPT3X2N=y
# CONFIG_PATA_HPT3X3 is not set
# CONFIG_PATA_ISAPNP is not setCONFIG_PATA_IT821X=mCONFIG_PATA_IT8213=m
# CONFIG_PATA_JMICRON is not set
# CONFIG_PATA_LEGACY is not setCONFIG_PATA_TRIFLEX=mCONFIG_PATA_MARVELL=y
# CONFIG_PATA_MPIIX is not setCONFIG_PATA_OLDPIIX=y
# CONFIG_PATA_NETCELL is not set
# CONFIG_PATA_NINJA32 is not setCONFIG_PATA_NS87410=mCONFIG_PATA_NS87415=mCONFIG_PATA_OPTI=mCONFIG_PATA_OPTIDMA=mCONFIG_PATA_PDC_OLD=mCONFIG_PATA_QDI=yCONFIG_PATA_RADISYS=yCONFIG_PATA_RZ1000=mCONFIG_PATA_SC1200=m
# CONFIG_PATA_SERVERWORKS is not setCONFIG_PATA_PDC2027X=yCONFIG_PATA_SIL680=yCONFIG_PATA_SIS=y
# CONFIG_PATA_VIA is not setCONFIG_PATA_WINBOND=y
# CONFIG_PATA_WINBOND_VLB is not set
# CONFIG_PATA_PLATFORM is not setCONFIG_PATA_SCH=yCONFIG_MD=y
# CONFIG_BLK_DEV_MD is not setCONFIG_BLK_DEV_DM=m
# CONFIG_DM_DEBUG is not setCONFIG_DM_CRYPT=mCONFIG_DM_SNAPSHOT=m
# CONFIG_DM_MIRROR is not setCONFIG_DM_ZERO=mCONFIG_DM_MULTIPATH=m
# CONFIG_DM_MULTIPATH_QL is not set
# CONFIG_DM_MULTIPATH_ST is not set
# CONFIG_DM_DELAY is not setCONFIG_DM_UEVENT=y
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support
#
#
# You can enable one or both FireWire driver stacks. #
#
# See the help texts for more information.
#
# CONFIG_FIREWIRE is not setCONFIG_IEEE1394=yCONFIG_IEEE1394_OHCI1394=y
# CONFIG_IEEE1394_PCILYNX is not setCONFIG_IEEE1394_SBP2=yCONFIG_IEEE1394_SBP2_PHYS_DMA=y
# CONFIG_IEEE1394_ETH1394_ROM_ENTRY is not set
# CONFIG_IEEE1394_ETH1394 is not setCONFIG_IEEE1394_RAWIO=m
# CONFIG_IEEE1394_VIDEO1394 is not set
# CONFIG_IEEE1394_DV1394 is not setCONFIG_IEEE1394_VERBOSEDEBUG=y
# CONFIG_I2O is not set
# CONFIG_MACINTOSH_DRIVERS is not setCONFIG_NETDEVICES=y
# CONFIG_IFB is not setCONFIG_DUMMY=yCONFIG_BONDING=mCONFIG_MACVLAN=yCONFIG_EQUALIZER=yCONFIG_TUN=yCONFIG_VETH=y
# CONFIG_NET_SB1000 is not setCONFIG_ARCNET=mCONFIG_ARCNET_1201=mCONFIG_ARCNET_1051=mCONFIG_ARCNET_RAW=mCONFIG_ARCNET_CAP=m
# CONFIG_ARCNET_COM90xx is not set
CONFIG_ARCNET_COM90xxIO=mCONFIG_ARCNET_RIM_I=mCONFIG_ARCNET_COM20020=mCONFIG_ARCNET_COM20020_ISA=mCONFIG_ARCNET_COM20020_PCI=mCONFIG_PHYLIB=y
#
# MII PHY device drivers
#CONFIG_MARVELL_PHY=yCONFIG_DAVICOM_PHY=yCONFIG_QSEMI_PHY=y
# CONFIG_LXT_PHY is not set
# CONFIG_CICADA_PHY is not set CONFIG_VITESSE_PHY=y
# CONFIG_SMSC_PHY is not set
# CONFIG_BROADCOM_PHY is not set
# CONFIG_ICPLUS_PHY is not set CONFIG_REALTEK_PHY=yCONFIG_NATIONAL_PHY=yCONFIG_STE10XP=y
# CONFIG_LSI_ET1011C_PHY is not set
# CONFIG_FIXED_PHY is not set CONFIG_MDIO_BITBANG=yCONFIG_MDIO_GPIO=yCONFIG_NET_ETHERNET=yCONFIG_MII=y
# CONFIG_HAPPYMEAL is not set CONFIG_SUNGEM=mCONFIG_CASSINI=yCONFIG_NET_VENDOR_3COM=y
# CONFIG_EL1 is not setCONFIG_EL2=yCONFIG_ELPLUS=yCONFIG_EL16=y
# CONFIG_EL3 is not set
# CONFIG_3C515 is not setCONFIG_ELMC=m
# CONFIG_ELMC_II is not set CONFIG_VORTEX=y
# CONFIG_TYPHOON is not set
# CONFIG_LANCE is not set CONFIG_NET_VENDOR_SMC=y
# CONFIG_WD80x3 is not set CONFIG_ULTRAMCA=mCONFIG_ULTRA=y
# CONFIG_SMC9194 is not set CONFIG_ENC28J60=y
# CONFIG_ENC28J60_WRITEVERIFY is not set CONFIG_ETHOC=mCONFIG_NET_VENDOR_RACAL=yCONFIG_NI52=m
# CONFIG_NI65 is not set
# CONFIG_DNET is not set CONFIG_NET_TULIP=yCONFIG_DE2104X=yCONFIG_DE2104X_DSL=0CONFIG_TULIP=yCONFIG_TULIP_MWI=yCONFIG_TULIP_MMIO=yCONFIG_TULIP_NAPI=y CONFIG_TULIP_NAPI_HW_MITIGATION=y CONFIG_DE4X5=y
# CONFIG_WINBOND_840 is not set CONFIG_DM9102=m
# CONFIG_ULI526X is not set CONFIG_PCMCIA_XIRCOM=y
# CONFIG_AT1700 is not setCONFIG_DEPCA=m
# CONFIG_HP100 is not setCONFIG_NET_ISA=yCONFIG_E2100=m
# CONFIG_EWRK3 is not set
# CONFIG_EEXPRESS is not set CONFIG_EEXPRESS_PRO=y
# CONFIG_HPLAN_PLUS is not set
# CONFIG_HPLAN is not set
# CONFIG_LP486E is not setCONFIG_ETH16I=m
# CONFIG_NE2000 is not setCONFIG_ZNET=m
# CONFIG_SEEQ8005 is not set CONFIG_NE2_MCA=mCONFIG_IBMLANA=m
# CONFIG_IBM_NEW_EMAC_ZMII is not set
# CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set CONFIG_NET_PCI=yCONFIG_PCNET32=mCONFIG_AMD8111_ETH=m CONFIG_ADAPTEC_STARFIRE=y
# CONFIG_AC3200 is not set CONFIG_APRICOT=mCONFIG_B44=yCONFIG_B44_PCI_AUTOSELECT=y CONFIG_B44_PCICORE_AUTOSELECT=y CONFIG_B44_PCI=yCONFIG_FORCEDETH=y
# CONFIG_FORCEDETH_NAPI is not set CONFIG_CS89x0=yCONFIG_E100=yCONFIG_FEALNX=mCONFIG_NATSEMI=yCONFIG_NE2K_PCI=y
# CONFIG_8139CP is not set CONFIG_8139TOO=yCONFIG_8139TOO_PIO=y CONFIG_8139TOO_TUNE_TWISTER=y CONFIG_8139TOO_8129=y CONFIG_8139_OLD_RX_RESET=yCONFIG_R6040=mCONFIG_SIS900=yCONFIG_EPIC100=m
# CONFIG_SMSC9420 is not set CONFIG_SUNDANCE=mCONFIG_SUNDANCE_MMIO=y
# CONFIG_TLAN is not setCONFIG_KS8842=yCONFIG_KS8851=yCONFIG_VIA_RHINE=m
# CONFIG_VIA_RHINE_MMIO is not set
# CONFIG_SC92031 is not set CONFIG_NET_POCKET=y
# CONFIG_ATP is not set
# CONFIG_DE600 is not setCONFIG_DE620=yCONFIG_ATL2=yCONFIG_NETDEV_1000=y
# CONFIG_ACENIC is not setCONFIG_DL2K=mCONFIG_E1000=mCONFIG_E1000E=yCONFIG_IP1000=mCONFIG_IGB=yCONFIG_IGBVF=mCONFIG_NS83820=y
# CONFIG_HAMACHI is not set CONFIG_YELLOWFIN=m
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not setCONFIG_SKGE=y
# CONFIG_SKGE_DEBUG is not set CONFIG_SKY2=mCONFIG_SKY2_DEBUG=yCONFIG_VIA_VELOCITY=yCONFIG_TIGON3=y
# CONFIG_BNX2 is not set
# CONFIG_CNIC is not setCONFIG_QLA3XXX=yCONFIG_ATL1=yCONFIG_ATL1E=yCONFIG_ATL1C=yCONFIG_JME=mCONFIG_NETDEV_10000=yCONFIG_MDIO=yCONFIG_CHELSIO_T1=yCONFIG_CHELSIO_T1_1G=y CONFIG_CHELSIO_T3_DEPENDS=y CONFIG_CHELSIO_T3=m
# CONFIG_ENIC is not setCONFIG_IXGBE=m
# CONFIG_IXGBE_DCA is not set CONFIG_IXGB=yCONFIG_S2IO=y
# CONFIG_VXGE is not set
# CONFIG_MYRI10GE is not set
# CONFIG_NETXEN_NIC is not set
# CONFIG_NIU is not setCONFIG_MLX4_EN=yCONFIG_MLX4_CORE=yCONFIG_MLX4_DEBUG=yCONFIG_TEHUTI=yCONFIG_BNX2X=y
# CONFIG_QLGE is not set
# CONFIG_SFC is not setCONFIG_BE2NET=yCONFIG_TR=mCONFIG_IBMTR=mCONFIG_IBMOL=m
# CONFIG_IBMLS is not setCONFIG_3C359=mCONFIG_TMS380TR=m
# CONFIG_TMSPCI is not setCONFIG_SKISA=m
# CONFIG_PROTEON is not setCONFIG_ABYSS=mCONFIG_MADGEMC=m
# CONFIG_SMCTR is not set
#
# Wireless LAN
#
# CONFIG_WLAN_PRE80211 is not setCONFIG_WLAN_80211=yCONFIG_LIBERTAS=mCONFIG_LIBERTAS_USB=m
# CONFIG_LIBERTAS_SDIO is not set
# CONFIG_LIBERTAS_SPI is not set
# CONFIG_LIBERTAS_DEBUG is not setCONFIG_AIRO=yCONFIG_ATMEL=m
# CONFIG_PCI_ATMEL is not setCONFIG_PRISM54=mCONFIG_USB_ZD1201=yCONFIG_IPW2100=m
# CONFIG_IPW2100_MONITOR is not setCONFIG_IPW2100_DEBUG=yCONFIG_IPW2200=yCONFIG_IPW2200_MONITOR=yCONFIG_IPW2200_RADIOTAP=yCONFIG_IPW2200_PROMISCUOUS=yCONFIG_IPW2200_QOS=yCONFIG_IPW2200_DEBUG=yCONFIG_LIBIPW=yCONFIG_LIBIPW_DEBUG=y
# CONFIG_HOSTAP is not setCONFIG_HERMES=yCONFIG_HERMES_CACHE_FW_ON_INIT=yCONFIG_PLX_HERMES=mCONFIG_TMD_HERMES=mCONFIG_NORTEL_HERMES=yCONFIG_PCI_HERMES=y
#
# WiMAX Wireless Broadband devices
#CONFIG_WIMAX_I2400M=m
# CONFIG_WIMAX_I2400M_USB is not setCONFIG_WIMAX_I2400M_SDIO=mCONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
#
# USB Network Adapters
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not setCONFIG_USB_RTL8150=yCONFIG_USB_USBNET=y
# CONFIG_USB_NET_AX8817X is not setCONFIG_USB_NET_CDCETHER=yCONFIG_USB_NET_CDC_EEM=mCONFIG_USB_NET_DM9601=m
# CONFIG_USB_NET_SMSC95XX is not set
# CONFIG_USB_NET_GL620A is not setCONFIG_USB_NET_NET1080=yCONFIG_USB_NET_PLUSB=y
# CONFIG_USB_NET_MCS7830 is not setCONFIG_USB_NET_RNDIS_HOST=mCONFIG_USB_NET_CDC_SUBSET=m
# CONFIG_USB_ALI_M5632 is not setCONFIG_USB_AN2720=yCONFIG_USB_BELKIN=y
# CONFIG_USB_ARMLINUX is not setCONFIG_USB_EPSON2888=y
# CONFIG_USB_KC2190 is not setCONFIG_USB_NET_ZAURUS=yCONFIG_USB_HSO=mCONFIG_USB_NET_INT51X1=m
# CONFIG_WAN is not setCONFIG_ATM_DRIVERS=yCONFIG_ATM_DUMMY=mCONFIG_ATM_TCP=m
# CONFIG_ATM_LANAI is not setCONFIG_ATM_ENI=mCONFIG_ATM_ENI_DEBUG=yCONFIG_ATM_ENI_TUNE_BURST=yCONFIG_ATM_ENI_BURST_TX_16W=y
# CONFIG_ATM_ENI_BURST_TX_8W is not set
# CONFIG_ATM_ENI_BURST_TX_4W is not set
# CONFIG_ATM_ENI_BURST_TX_2W is not set
# CONFIG_ATM_ENI_BURST_RX_16W is not setCONFIG_ATM_ENI_BURST_RX_8W=yCONFIG_ATM_ENI_BURST_RX_4W=yCONFIG_ATM_ENI_BURST_RX_2W=yCONFIG_ATM_FIRESTREAM=m
# CONFIG_ATM_ZATM is not set
# CONFIG_ATM_NICSTAR is not setCONFIG_ATM_IDT77252=m
# CONFIG_ATM_IDT77252_DEBUG is not set
# CONFIG_ATM_IDT77252_RCV_ALL is not setCONFIG_ATM_IDT77252_USE_SUNI=yCONFIG_ATM_AMBASSADOR=mCONFIG_ATM_AMBASSADOR_DEBUG=y
# CONFIG_ATM_HORIZON is not setCONFIG_ATM_IA=mCONFIG_ATM_IA_DEBUG=yCONFIG_ATM_FORE200E=mCONFIG_ATM_FORE200E_USE_TASKLET=yCONFIG_ATM_FORE200E_TX_RETRY=16CONFIG_ATM_FORE200E_DEBUG=0CONFIG_ATM_HE=m
# CONFIG_ATM_HE_USE_SUNI is not setCONFIG_ATM_SOLOS=m
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PLIP is not set
# CONFIG_PPP is not setCONFIG_SLIP=y
# CONFIG_SLIP_COMPRESSED is not setCONFIG_SLIP_SMART=yCONFIG_SLIP_MODE_SLIP6=yCONFIG_NET_FC=yCONFIG_NETCONSOLE=y
# CONFIG_NETCONSOLE_DYNAMIC is not setCONFIG_NETPOLL=y
# CONFIG_NETPOLL_TRAP is not setCONFIG_NET_POLL_CONTROLLER=yCONFIG_VIRTIO_NET=mCONFIG_ISDN=y
# CONFIG_MISDN is not setCONFIG_ISDN_I4L=m
# CONFIG_ISDN_PPP is not setCONFIG_ISDN_AUDIO=yCONFIG_ISDN_TTY_FAX=y
#
# ISDN feature submodules
#
# CONFIG_ISDN_DIVERSION is not set
#
# ISDN4Linux hardware drivers
#
#
# Passive cards
#CONFIG_ISDN_DRV_HISAX=m
#
# D-channel protocol features
#
# CONFIG_HISAX_EURO is not setCONFIG_HISAX_1TR6=yCONFIG_HISAX_NI1=yCONFIG_HISAX_MAX_CARDS=8
#
# HiSax supported cards
#CONFIG_HISAX_16_0=yCONFIG_HISAX_16_3=yCONFIG_HISAX_S0BOX=y
# CONFIG_HISAX_AVM_A1 is not set
# CONFIG_HISAX_FRITZPCI is not setCONFIG_HISAX_AVM_A1_PCMCIA=yCONFIG_HISAX_ELSA=yCONFIG_HISAX_IX1MICROR2=y
# CONFIG_HISAX_DIEHLDIVA is not setCONFIG_HISAX_ASUSCOM=y
# CONFIG_HISAX_TELEINT is not setCONFIG_HISAX_HFCS=yCONFIG_HISAX_SEDLBAUER=yCONFIG_HISAX_SPORTSTER=yCONFIG_HISAX_MIC=y
# CONFIG_HISAX_NICCY is not setCONFIG_HISAX_ISURF=y
# CONFIG_HISAX_HSTSAPHIR is not setCONFIG_HISAX_GAZEL=y
# CONFIG_HISAX_HFC_SX is not setCONFIG_HISAX_DEBUG=y
#
# HiSax PCMCIA card service modules
#
#
# HiSax sub driver modules
#CONFIG_HISAX_ST5481=m
# CONFIG_HISAX_HFCUSB is not set
# CONFIG_HISAX_HFC4S8S is not setCONFIG_HISAX_HDLC=y
#
# Active cards
#CONFIG_ISDN_DRV_PCBIT=mCONFIG_ISDN_DRV_SC=mCONFIG_ISDN_DRV_ACT2000=mCONFIG_HYSDN=mCONFIG_HYSDN_CAPI=yCONFIG_ISDN_CAPI=yCONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=yCONFIG_CAPI_TRACE=yCONFIG_ISDN_CAPI_MIDDLEWARE=yCONFIG_ISDN_CAPI_CAPI20=mCONFIG_ISDN_CAPI_CAPIFS_BOOL=yCONFIG_ISDN_CAPI_CAPIFS=mCONFIG_ISDN_CAPI_CAPIDRV=m
#
# CAPI hardware drivers
#
# CONFIG_CAPI_AVM is not set
# CONFIG_CAPI_EICON is not setCONFIG_ISDN_DRV_GIGASET=m
# CONFIG_GIGASET_BASE is not set
# CONFIG_GIGASET_M105 is not setCONFIG_GIGASET_M101=mCONFIG_GIGASET_DEBUG=yCONFIG_PHONE=m
# CONFIG_PHONE_IXJ is not set
#
# Input device support
#CONFIG_INPUT=yCONFIG_INPUT_FF_MEMLESS=yCONFIG_INPUT_POLLDEV=y
#
# Userland interfaces
#CONFIG_INPUT_MOUSEDEV=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not setCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not setCONFIG_INPUT_EVDEV=m
# CONFIG_INPUT_EVBUG is not set
#
# Input Device Drivers
#CONFIG_INPUT_KEYBOARD=yCONFIG_KEYBOARD_ATKBD=yCONFIG_KEYBOARD_LKKBD=yCONFIG_KEYBOARD_GPIO=yCONFIG_KEYBOARD_MATRIX=mCONFIG_KEYBOARD_LM8323=m
# CONFIG_KEYBOARD_NEWTON is not setCONFIG_KEYBOARD_STOWAWAY=yCONFIG_KEYBOARD_SUNKBD=m
# CONFIG_KEYBOARD_XTKBD is not setCONFIG_INPUT_MOUSE=yCONFIG_MOUSE_PS2=mCONFIG_MOUSE_PS2_ALPS=yCONFIG_MOUSE_PS2_LOGIPS2PP=y
# CONFIG_MOUSE_PS2_SYNAPTICS is not setCONFIG_MOUSE_PS2_LIFEBOOK=yCONFIG_MOUSE_PS2_TRACKPOINT=y
# CONFIG_MOUSE_PS2_ELANTECH is not setCONFIG_MOUSE_PS2_TOUCHKIT=yCONFIG_MOUSE_PS2_OLPC=yCONFIG_MOUSE_SERIAL=yCONFIG_MOUSE_APPLETOUCH=mCONFIG_MOUSE_BCM5974=m
# CONFIG_MOUSE_INPORT is not setCONFIG_MOUSE_LOGIBM=mCONFIG_MOUSE_PC110PAD=mCONFIG_MOUSE_VSXXXAA=yCONFIG_MOUSE_GPIO=mCONFIG_MOUSE_SYNAPTICS_I2C=yCONFIG_INPUT_JOYSTICK=y
# CONFIG_JOYSTICK_ANALOG is not setCONFIG_JOYSTICK_A3D=mCONFIG_JOYSTICK_ADI=m
# CONFIG_JOYSTICK_COBRA is not setCONFIG_JOYSTICK_GF2K=mCONFIG_JOYSTICK_GRIP=mCONFIG_JOYSTICK_GRIP_MP=m
# CONFIG_JOYSTICK_GUILLEMOT is not setCONFIG_JOYSTICK_INTERACT=yCONFIG_JOYSTICK_SIDEWINDER=mCONFIG_JOYSTICK_TMDC=y
# CONFIG_JOYSTICK_IFORCE is not setCONFIG_JOYSTICK_WARRIOR=yCONFIG_JOYSTICK_MAGELLAN=yCONFIG_JOYSTICK_SPACEORB=yCONFIG_JOYSTICK_SPACEBALL=yCONFIG_JOYSTICK_STINGER=mCONFIG_JOYSTICK_TWIDJOY=y
# CONFIG_JOYSTICK_ZHENHUA is not set
# CONFIG_JOYSTICK_DB9 is not set
# CONFIG_JOYSTICK_GAMECON is not setCONFIG_JOYSTICK_TURBOGRAFX=m
# CONFIG_JOYSTICK_JOYDUMP is not setCONFIG_JOYSTICK_XPAD=mCONFIG_JOYSTICK_XPAD_FF=yCONFIG_JOYSTICK_XPAD_LEDS=yCONFIG_JOYSTICK_WALKERA0701=yCONFIG_INPUT_TABLET=y
# CONFIG_TABLET_USB_ACECAD is not setCONFIG_TABLET_USB_AIPTEK=mCONFIG_TABLET_USB_GTCO=yCONFIG_TABLET_USB_KBTAB=m
# CONFIG_TABLET_USB_WACOM is not setCONFIG_INPUT_TOUCHSCREEN=yCONFIG_TOUCHSCREEN_ADS7846=mCONFIG_TOUCHSCREEN_AD7877=mCONFIG_TOUCHSCREEN_AD7879_I2C=yCONFIG_TOUCHSCREEN_AD7879=y
# CONFIG_TOUCHSCREEN_EETI is not setCONFIG_TOUCHSCREEN_FUJITSU=mCONFIG_TOUCHSCREEN_GUNZE=y
# CONFIG_TOUCHSCREEN_ELO is not setCONFIG_TOUCHSCREEN_WACOM_W8001=y
# CONFIG_TOUCHSCREEN_MTOUCH is not setCONFIG_TOUCHSCREEN_INEXIO=yCONFIG_TOUCHSCREEN_MK712=mCONFIG_TOUCHSCREEN_HTCPEN=mCONFIG_TOUCHSCREEN_PENMOUNT=mCONFIG_TOUCHSCREEN_TOUCHRIGHT=y
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not setCONFIG_TOUCHSCREEN_TOUCHIT213=yCONFIG_TOUCHSCREEN_TSC2007=yCONFIG_TOUCHSCREEN_W90X900=yCONFIG_INPUT_MISC=y
# CONFIG_INPUT_APANEL is not set
# CONFIG_INPUT_WISTRON_BTNS is not setCONFIG_INPUT_ATLAS_BTNS=yCONFIG_INPUT_ATI_REMOTE=yCONFIG_INPUT_ATI_REMOTE2=yCONFIG_INPUT_KEYSPAN_REMOTE=yCONFIG_INPUT_POWERMATE=yCONFIG_INPUT_YEALINK=y
# CONFIG_INPUT_CM109 is not setCONFIG_INPUT_TWL4030_PWRBUTTON=yCONFIG_INPUT_UINPUT=yCONFIG_INPUT_PCF50633_PMU=yCONFIG_INPUT_GPIO_ROTARY_ENCODER=m
#
# Hardware I/O ports
#CONFIG_SERIO=yCONFIG_SERIO_I8042=yCONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not setCONFIG_SERIO_PARKBD=mCONFIG_SERIO_PCIPS2=mCONFIG_SERIO_LIBPS2=yCONFIG_SERIO_RAW=yCONFIG_GAMEPORT=yCONFIG_GAMEPORT_NS558=yCONFIG_GAMEPORT_L4=mCONFIG_GAMEPORT_EMU10K1=yCONFIG_GAMEPORT_FM801=m
#
# Character devices
#CONFIG_VT=y
# CONFIG_CONSOLE_TRANSLATIONS is not setCONFIG_VT_CONSOLE=yCONFIG_HW_CONSOLE=yCONFIG_VT_HW_CONSOLE_BINDING=yCONFIG_DEVKMEM=yCONFIG_SERIAL_NONSTANDARD=yCONFIG_COMPUTONE=y
# CONFIG_ROCKETPORT is not set
# CONFIG_CYCLADES is not set
# CONFIG_DIGIEPCA is not setCONFIG_MOXA_INTELLIO=y
# CONFIG_MOXA_SMARTIO is not set
# CONFIG_ISI is not setCONFIG_SYNCLINK=yCONFIG_SYNCLINKMP=yCONFIG_SYNCLINK_GT=y
# CONFIG_N_HDLC is not setCONFIG_RISCOM8=mCONFIG_SPECIALIX=m
# CONFIG_SX is not set
# CONFIG_RIO is not set
# CONFIG_STALDRV is not set
# CONFIG_NOZOMI is not set
#
# Serial drivers
#CONFIG_SERIAL_8250=yCONFIG_SERIAL_8250_CONSOLE=yCONFIG_FIX_EARLYCON_MEM=yCONFIG_SERIAL_8250_PCI=m
# CONFIG_SERIAL_8250_PNP is not setCONFIG_SERIAL_8250_NR_UARTS=4CONFIG_SERIAL_8250_RUNTIME_UARTS=4CONFIG_SERIAL_8250_EXTENDED=yCONFIG_SERIAL_8250_MANY_PORTS=y
# CONFIG_SERIAL_8250_FOURPORT is not set
# CONFIG_SERIAL_8250_ACCENT is not setCONFIG_SERIAL_8250_BOCA=y
# CONFIG_SERIAL_8250_EXAR_ST16C554 is not set
# CONFIG_SERIAL_8250_HUB6 is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not setCONFIG_SERIAL_8250_DETECT_IRQ=yCONFIG_SERIAL_8250_RSA=y
# CONFIG_SERIAL_8250_MCA is not set
#
# Non-8250 serial port support
#CONFIG_SERIAL_MAX3100=yCONFIG_SERIAL_CORE=yCONFIG_SERIAL_CORE_CONSOLE=yCONFIG_CONSOLE_POLL=yCONFIG_SERIAL_JSM=yCONFIG_UNIX98_PTYS=yCONFIG_DEVPTS_MULTIPLE_INSTANCES=yCONFIG_LEGACY_PTYS=yCONFIG_LEGACY_PTY_COUNT=256CONFIG_PRINTER=m
# CONFIG_LP_CONSOLE is not set
# CONFIG_PPDEV is not setCONFIG_HVC_DRIVER=yCONFIG_VIRTIO_CONSOLE=mCONFIG_IPMI_HANDLER=mCONFIG_IPMI_PANIC_EVENT=yCONFIG_IPMI_PANIC_STRING=yCONFIG_IPMI_DEVICE_INTERFACE=m
# CONFIG_IPMI_SI is not setCONFIG_IPMI_WATCHDOG=m
# CONFIG_IPMI_POWEROFF is not setCONFIG_HW_RANDOM=yCONFIG_HW_RANDOM_TIMERIOMEM=y
# CONFIG_HW_RANDOM_INTEL is not setCONFIG_HW_RANDOM_AMD=mCONFIG_HW_RANDOM_GEODE=yCONFIG_HW_RANDOM_VIA=mCONFIG_HW_RANDOM_VIRTIO=m
# CONFIG_NVRAM is not set
# CONFIG_DTLK is not setCONFIG_R3964=mCONFIG_APPLICOM=mCONFIG_SONYPI=yCONFIG_MWAVE=y
CONFIG_PC8736x_GPIO=mCONFIG_NSC_GPIO=yCONFIG_CS5535_GPIO=mCONFIG_RAW_DRIVER=yCONFIG_MAX_RAW_DEVS=256CONFIG_HPET=yCONFIG_HPET_MMAP=yCONFIG_HANGCHECK_TIMER=mCONFIG_TCG_TPM=yCONFIG_TCG_TIS=yCONFIG_TCG_NSC=mCONFIG_TCG_ATMEL=yCONFIG_TCG_INFINEON=y
# CONFIG_TELCLOCK is not setCONFIG_DEVPORT=yCONFIG_I2C=yCONFIG_I2C_BOARDINFO=yCONFIG_I2C_CHARDEV=y
# CONFIG_I2C_HELPER_AUTO is not set
#
# I2C Algorithms
#CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_ALGOPCF is not setCONFIG_I2C_ALGOPCA=y
#
# I2C Hardware Bus support
#
#
# PC SMBus host controller drivers
#CONFIG_I2C_ALI1535=m
# CONFIG_I2C_ALI1563 is not setCONFIG_I2C_ALI15X3=mCONFIG_I2C_AMD756=y
# CONFIG_I2C_AMD756_S4882 is not set
# CONFIG_I2C_AMD8111 is not set
# CONFIG_I2C_I801 is not setCONFIG_I2C_ISCH=yCONFIG_I2C_PIIX4=yCONFIG_I2C_NFORCE2=m
# CONFIG_I2C_NFORCE2_S4985 is not set
# CONFIG_I2C_SIS5595 is not setCONFIG_I2C_SIS630=y
# CONFIG_I2C_SIS96X is not set
# CONFIG_I2C_VIA is not setCONFIG_I2C_VIAPRO=m
#
# I2C system bus drivers (mostly embedded / system-on-chip) #CONFIG_I2C_GPIO=mCONFIG_I2C_OCORES=y
# CONFIG_I2C_SIMTEC is not set
#
# External I2C/SMBus adapter drivers
#
# CONFIG_I2C_PARPORT is not setCONFIG_I2C_PARPORT_LIGHT=m
# CONFIG_I2C_TAOS_EVM is not setCONFIG_I2C_TINY_USB=y
#
# Graphics adapter I2C/DDC channel drivers
#
# CONFIG_I2C_VOODOO3 is not set
#
# Other I2C/SMBus bus drivers
#CONFIG_I2C_PCA_PLATFORM=yCONFIG_I2C_STUB=m
# CONFIG_SCx200_ACB is not set
#
# Miscellaneous I2C Chip support
#CONFIG_DS1682=mCONFIG_SENSORS_PCF8574=yCONFIG_PCF8575=y
# CONFIG_SENSORS_PCA9539 is not setCONFIG_SENSORS_TSL2550=m
# CONFIG_I2C_DEBUG_CORE is not setCONFIG_I2C_DEBUG_ALGO=y
# CONFIG_I2C_DEBUG_BUS is not setCONFIG_I2C_DEBUG_CHIP=yCONFIG_SPI=y
# CONFIG_SPI_DEBUG is not setCONFIG_SPI_MASTER=y
#
# SPI Master Controller Drivers
#CONFIG_SPI_BITBANG=y
# CONFIG_SPI_BUTTERFLY is not setCONFIG_SPI_GPIO=y
# CONFIG_SPI_LM70_LLP is not set
#
# SPI Protocol Masters
#
# CONFIG_SPI_SPIDEV is not setCONFIG_SPI_TLE62X0=y
#
# PPS support
#CONFIG_PPS=yCONFIG_PPS_DEBUG=yCONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=yCONFIG_GPIOLIB=yCONFIG_DEBUG_GPIO=yCONFIG_GPIO_SYSFS=y
#
# Memory mapped GPIO expanders:
#
#
# I2C GPIO expanders:
#CONFIG_GPIO_MAX732X=m
# CONFIG_GPIO_PCA953X is not set
# CONFIG_GPIO_PCF857X is not set
# CONFIG_GPIO_TWL4030 is not set
#
# PCI GPIO expanders:
#CONFIG_GPIO_BT8XX=m
#
# SPI GPIO expanders:
#
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MCP23S08 is not setCONFIG_W1=y
# CONFIG_W1_CON is not set
#
# 1-wire Bus Masters
#CONFIG_W1_MASTER_MATROX=yCONFIG_W1_MASTER_DS2490=y
# CONFIG_W1_MASTER_DS2482 is not setCONFIG_W1_MASTER_GPIO=m
#
# 1-wire Slaves
#
# CONFIG_W1_SLAVE_THERM is not setCONFIG_W1_SLAVE_SMEM=yCONFIG_W1_SLAVE_DS2431=yCONFIG_W1_SLAVE_DS2433=mCONFIG_W1_SLAVE_DS2433_CRC=yCONFIG_W1_SLAVE_DS2760=y
# CONFIG_W1_SLAVE_BQ27000 is not setCONFIG_POWER_SUPPLY=yCONFIG_POWER_SUPPLY_DEBUG=y
# CONFIG_PDA_POWER is not setCONFIG_BATTERY_DS2760=yCONFIG_BATTERY_DS2782=mCONFIG_BATTERY_OLPC=m
CONFIG_BATTERY_BQ27x00=mCONFIG_BATTERY_MAX17040=yCONFIG_CHARGER_PCF50633=y
# CONFIG_HWMON is not setCONFIG_THERMAL=mCONFIG_WATCHDOG=yCONFIG_WATCHDOG_NOWAYOUT=y
#
# Watchdog Device Drivers
#CONFIG_SOFT_WATCHDOG=yCONFIG_TWL4030_WATCHDOG=yCONFIG_ACQUIRE_WDT=yCONFIG_ADVANTECH_WDT=m
# CONFIG_ALIM1535_WDT is not set
# CONFIG_ALIM7101_WDT is not set
# CONFIG_SC520_WDT is not set
# CONFIG_IB700_WDT is not set
# CONFIG_IBMASR is not setCONFIG_WAFER_WDT=mCONFIG_I6300ESB_WDT=y
# CONFIG_ITCO_WDT is not setCONFIG_IT8712F_WDT=mCONFIG_IT87_WDT=mCONFIG_HP_WATCHDOG=yCONFIG_SC1200_WDT=mCONFIG_PC87413_WDT=mCONFIG_RDC321X_WDT=yCONFIG_60XX_WDT=m
# CONFIG_SBC8360_WDT is not set
# CONFIG_SBC7240_WDT is not setCONFIG_CPU5_WDT=yCONFIG_SMSC_SCH311X_WDT=yCONFIG_SMSC37B787_WDT=y
# CONFIG_W83627HF_WDT is not set
# CONFIG_W83697HF_WDT is not set
# CONFIG_W83697UG_WDT is not setCONFIG_W83877F_WDT=yCONFIG_W83977F_WDT=mCONFIG_MACHZ_WDT=yCONFIG_SBC_EPX_C3_WATCHDOG=y
#
# ISA-based Watchdog Cards
#
# CONFIG_PCWATCHDOG is not setCONFIG_MIXCOMWD=y
#
# PCI-based Watchdog Cards
#
# CONFIG_PCIPCWATCHDOG is not set
# CONFIG_WDTPCI is not set
#
# USB-based Watchdog Cards
#CONFIG_USBPCWATCHDOG=mCONFIG_SSB_POSSIBLE=y
#
# Sonics Silicon Backplane
#CONFIG_SSB=yCONFIG_SSB_SPROM=yCONFIG_SSB_PCIHOST_POSSIBLE=yCONFIG_SSB_PCIHOST=y
# CONFIG_SSB_B43_PCI_BRIDGE is not setCONFIG_SSB_SILENT=yCONFIG_SSB_DRIVER_PCICORE_POSSIBLE=yCONFIG_SSB_DRIVER_PCICORE=y
#
# Multifunction device drivers
#CONFIG_MFD_CORE=y
# CONFIG_MFD_SM501 is not set
# CONFIG_HTC_PASIC3 is not setCONFIG_TPS65010=yCONFIG_TWL4030_CORE=y
# CONFIG_MFD_TMIO is not set
# CONFIG_PMIC_DA903X is not setCONFIG_MFD_WM8400=y
# CONFIG_MFD_WM8350_I2C is not setCONFIG_MFD_PCF50633=yCONFIG_PCF50633_ADC=yCONFIG_PCF50633_GPIO=mCONFIG_AB3100_CORE=m
# CONFIG_EZX_PCAP is not setCONFIG_REGULATOR=yCONFIG_REGULATOR_DEBUG=y
# CONFIG_REGULATOR_FIXED_VOLTAGE is not setCONFIG_REGULATOR_VIRTUAL_CONSUMER=yCONFIG_REGULATOR_USERSPACE_CONSUMER=yCONFIG_REGULATOR_BQ24022=yCONFIG_REGULATOR_MAX1586=y
# CONFIG_REGULATOR_TWL4030 is not set
# CONFIG_REGULATOR_WM8400 is not setCONFIG_REGULATOR_PCF50633=yCONFIG_REGULATOR_LP3971=yCONFIG_MEDIA_SUPPORT=y
#
# Multimedia core support
#CONFIG_VIDEO_DEV=yCONFIG_VIDEO_V4L2_COMMON=yCONFIG_VIDEO_ALLOW_V4L1=yCONFIG_VIDEO_V4L1_COMPAT=y
# CONFIG_DVB_CORE is not setCONFIG_VIDEO_MEDIA=y
#
# Multimedia drivers
#CONFIG_MEDIA_ATTACH=yCONFIG_MEDIA_TUNER=yCONFIG_MEDIA_TUNER_CUSTOMISE=yCONFIG_MEDIA_TUNER_SIMPLE=mCONFIG_MEDIA_TUNER_TDA8290=yCONFIG_MEDIA_TUNER_TDA827X=yCONFIG_MEDIA_TUNER_TDA18271=yCONFIG_MEDIA_TUNER_TDA9887=mCONFIG_MEDIA_TUNER_TEA5761=yCONFIG_MEDIA_TUNER_TEA5767=y
# CONFIG_MEDIA_TUNER_MT20XX is not setCONFIG_MEDIA_TUNER_MT2060=yCONFIG_MEDIA_TUNER_MT2266=mCONFIG_MEDIA_TUNER_MT2131=mCONFIG_MEDIA_TUNER_QT1010=yCONFIG_MEDIA_TUNER_XC2028=mCONFIG_MEDIA_TUNER_XC5000=y
# CONFIG_MEDIA_TUNER_MXL5005S is not setCONFIG_MEDIA_TUNER_MXL5007T=y
# CONFIG_MEDIA_TUNER_MC44S803 is not setCONFIG_VIDEO_V4L2=yCONFIG_VIDEO_V4L1=y
# CONFIG_VIDEO_CAPTURE_DRIVERS is not set
# CONFIG_RADIO_ADAPTERS is not set
# CONFIG_DAB is not set
#
# Graphics support
#CONFIG_AGP=yCONFIG_AGP_ALI=mCONFIG_AGP_ATI=mCONFIG_AGP_AMD=yCONFIG_AGP_AMD64=mCONFIG_AGP_INTEL=yCONFIG_AGP_NVIDIA=m
# CONFIG_AGP_SIS is not set
# CONFIG_AGP_SWORKS is not setCONFIG_AGP_VIA=yCONFIG_AGP_EFFICEON=mCONFIG_DRM=mCONFIG_DRM_TDFX=mCONFIG_DRM_R128=mCONFIG_DRM_RADEON=mCONFIG_DRM_I810=m
# CONFIG_DRM_I830 is not set
# CONFIG_DRM_I915 is not setCONFIG_DRM_MGA=mCONFIG_DRM_SIS=m
# CONFIG_DRM_VIA is not setCONFIG_DRM_SAVAGE=mCONFIG_VGASTATE=yCONFIG_VIDEO_OUTPUT_CONTROL=mCONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not setCONFIG_FB_DDC=yCONFIG_FB_BOOT_VESA_SUPPORT=yCONFIG_FB_CFB_FILLRECT=yCONFIG_FB_CFB_COPYAREA=yCONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not setCONFIG_FB_SYS_FILLRECT=yCONFIG_FB_SYS_COPYAREA=yCONFIG_FB_SYS_IMAGEBLIT=yCONFIG_FB_FOREIGN_ENDIAN=yCONFIG_FB_BOTH_ENDIAN=y
# CONFIG_FB_BIG_ENDIAN is not set
# CONFIG_FB_LITTLE_ENDIAN is not setCONFIG_FB_SYS_FOPS=yCONFIG_FB_DEFERRED_IO=yCONFIG_FB_HECUBA=mCONFIG_FB_SVGALIB=y
# CONFIG_FB_MACMODES is not setCONFIG_FB_BACKLIGHT=yCONFIG_FB_MODE_HELPERS=yCONFIG_FB_TILEBLITTING=y
#
# Frame buffer hardware drivers
#
# CONFIG_FB_PM2 is not setCONFIG_FB_CYBER2000=y
# CONFIG_FB_ARC is not setCONFIG_FB_IMSTT=yCONFIG_FB_UVESA=yCONFIG_FB_N411=mCONFIG_FB_HGA=m
# CONFIG_FB_HGA_ACCEL is not set
# CONFIG_FB_S1D13XXX is not setCONFIG_FB_NVIDIA=m
# CONFIG_FB_NVIDIA_I2C is not setCONFIG_FB_NVIDIA_DEBUG=yCONFIG_FB_NVIDIA_BACKLIGHT=yCONFIG_FB_RIVA=y
# CONFIG_FB_RIVA_I2C is not setCONFIG_FB_RIVA_DEBUG=yCONFIG_FB_RIVA_BACKLIGHT=yCONFIG_FB_I810=yCONFIG_FB_I810_GTF=yCONFIG_FB_I810_I2C=yCONFIG_FB_LE80578=yCONFIG_FB_CARILLO_RANCH=m
# CONFIG_FB_INTEL is not setCONFIG_FB_MATROX=mCONFIG_FB_MATROX_MILLENIUM=y
# CONFIG_FB_MATROX_MYSTIQUE is not set
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not set
# CONFIG_FB_MATROX_MULTIHEAD is not setCONFIG_FB_ATY128=y
# CONFIG_FB_ATY128_BACKLIGHT is not setCONFIG_FB_ATY=yCONFIG_FB_ATY_CT=yCONFIG_FB_ATY_GENERIC_LCD=yCONFIG_FB_ATY_GX=y
# CONFIG_FB_ATY_BACKLIGHT is not setCONFIG_FB_S3=yCONFIG_FB_SAVAGE=yCONFIG_FB_SAVAGE_I2C=yCONFIG_FB_SAVAGE_ACCEL=yCONFIG_FB_SIS=y
# CONFIG_FB_SIS_300 is not set
# CONFIG_FB_SIS_315 is not set
# CONFIG_FB_VIA is not setCONFIG_FB_NEOMAGIC=yCONFIG_FB_KYRO=yCONFIG_FB_3DFX=yCONFIG_FB_3DFX_ACCEL=yCONFIG_FB_3DFX_I2C=yCONFIG_FB_VOODOO1=y
# CONFIG_FB_VT8623 is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_ARK is not set
# CONFIG_FB_PM3 is not set
# CONFIG_FB_CARMINE is not setCONFIG_FB_GEODE=yCONFIG_FB_GEODE_LX=yCONFIG_FB_GEODE_GX=yCONFIG_FB_GEODE_GX1=y
# CONFIG_FB_TMIO is not setCONFIG_FB_METRONOME=mCONFIG_FB_MB862XX=yCONFIG_FB_MB862XX_PCI_GDC=yCONFIG_FB_BROADSHEET=yCONFIG_BACKLIGHT_LCD_SUPPORT=yCONFIG_LCD_CLASS_DEVICE=yCONFIG_LCD_LTV350QV=yCONFIG_LCD_ILI9320=yCONFIG_LCD_TDO24M=mCONFIG_LCD_VGG2432A4=y
# CONFIG_LCD_PLATFORM is not setCONFIG_BACKLIGHT_CLASS_DEVICE=yCONFIG_BACKLIGHT_GENERIC=yCONFIG_BACKLIGHT_PROGEAR=yCONFIG_BACKLIGHT_CARILLO_RANCH=y
# CONFIG_BACKLIGHT_MBP_NVIDIA is not setCONFIG_BACKLIGHT_SAHARA=m
#
# Display device support
#CONFIG_DISPLAY_SUPPORT=y
#
# Display hardware drivers
#
#
# Console display driver support
#CONFIG_VGA_CONSOLE=yCONFIG_VGACON_SOFT_SCROLLBACK=yCONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64CONFIG_DUMMY_CONSOLE=yCONFIG_LOGO=yCONFIG_LOGO_LINUX_MONO=yCONFIG_LOGO_LINUX_VGA16=yCONFIG_LOGO_LINUX_CLUT224=yCONFIG_SOUND=y
# CONFIG_SOUND_OSS_CORE is not set
# CONFIG_SND is not set
# CONFIG_SOUND_PRIME is not setCONFIG_HID_SUPPORT=yCONFIG_HID=y
# CONFIG_HID_DEBUG is not setCONFIG_HIDRAW=y
#
# USB Input Devices
#CONFIG_USB_HID=y
# CONFIG_HID_PID is not setCONFIG_USB_HIDDEV=yCONFIG_USB_MOUSE=y
#
# Special HID drivers
#
# CONFIG_HID_A4TECH is not setCONFIG_HID_APPLE=y
# CONFIG_HID_BELKIN is not setCONFIG_HID_CHERRY=mCONFIG_HID_CHICONY=mCONFIG_HID_CYPRESS=yCONFIG_HID_DRAGONRISE=yCONFIG_DRAGONRISE_FF=y
# CONFIG_HID_EZKEY is not set
# CONFIG_HID_KYE is not setCONFIG_HID_GYRATION=mCONFIG_HID_KENSINGTON=yCONFIG_HID_LOGITECH=mCONFIG_LOGITECH_FF=yCONFIG_LOGIRUMBLEPAD2_FF=yCONFIG_HID_MICROSOFT=mCONFIG_HID_MONTEREY=yCONFIG_HID_NTRIG=y
# CONFIG_HID_PANTHERLORD is not setCONFIG_HID_PETALYNX=mCONFIG_HID_SAMSUNG=y
# CONFIG_HID_SONY is not set
# CONFIG_HID_SUNPLUS is not setCONFIG_HID_GREENASIA=yCONFIG_GREENASIA_FF=yCONFIG_HID_SMARTJOYPLUS=mCONFIG_SMARTJOYPLUS_FF=yCONFIG_HID_TOPSEED=mCONFIG_HID_THRUSTMASTER=y
# CONFIG_THRUSTMASTER_FF is not setCONFIG_HID_ZEROPLUS=mCONFIG_ZEROPLUS_FF=yCONFIG_USB_SUPPORT=yCONFIG_USB_ARCH_HAS_HCD=yCONFIG_USB_ARCH_HAS_OHCI=yCONFIG_USB_ARCH_HAS_EHCI=yCONFIG_USB=y
# CONFIG_USB_DEBUG is not setCONFIG_USB_ANNOUNCE_NEW_DEVICES=y
#
# Miscellaneous USB options
#CONFIG_USB_DEVICEFS=yCONFIG_USB_DEVICE_CLASS=y
# CONFIG_USB_DYNAMIC_MINORS is not setCONFIG_USB_SUSPEND=y
# CONFIG_USB_OTG is not setCONFIG_USB_OTG_WHITELIST=yCONFIG_USB_OTG_BLACKLIST_HUB=yCONFIG_USB_MON=yCONFIG_USB_WUSB=mCONFIG_USB_WUSB_CBAF=mCONFIG_USB_WUSB_CBAF_DEBUG=y
#
# USB Host Controller Drivers
#
# CONFIG_USB_C67X00_HCD is not setCONFIG_USB_XHCI_HCD=y
# CONFIG_USB_XHCI_HCD_DEBUGGING is not setCONFIG_USB_EHCI_HCD=y
# CONFIG_USB_EHCI_ROOT_HUB_TT is not setCONFIG_USB_EHCI_TT_NEWSCHED=yCONFIG_USB_OXU210HP_HCD=yCONFIG_USB_ISP116X_HCD=mCONFIG_USB_ISP1760_HCD=mCONFIG_USB_OHCI_HCD=y
# CONFIG_USB_OHCI_HCD_SSB is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not setCONFIG_USB_OHCI_LITTLE_ENDIAN=yCONFIG_USB_UHCI_HCD=yCONFIG_USB_SL811_HCD=mCONFIG_USB_R8A66597_HCD=y
# CONFIG_USB_WHCI_HCD is not set
# CONFIG_USB_HWA_HCD is not set
#
# USB Device Class drivers
#CONFIG_USB_ACM=m
# CONFIG_USB_PRINTER is not setCONFIG_USB_WDM=mCONFIG_USB_TMC=y
#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may #
#
# also be needed; see USB_STORAGE Help for more info # # CONFIG_USB_STORAGE is not set CONFIG_USB_LIBUSUAL=y
#
# USB Imaging devices
#CONFIG_USB_MDC800=y
# CONFIG_USB_MICROTEK is not set
#
# USB port drivers
#CONFIG_USB_USS720=yCONFIG_USB_SERIAL=yCONFIG_USB_SERIAL_CONSOLE=yCONFIG_USB_EZUSB=y
# CONFIG_USB_SERIAL_GENERIC is not setCONFIG_USB_SERIAL_AIRCABLE=mCONFIG_USB_SERIAL_ARK3116=mCONFIG_USB_SERIAL_BELKIN=yCONFIG_USB_SERIAL_CH341=yCONFIG_USB_SERIAL_WHITEHEAT=mCONFIG_USB_SERIAL_DIGI_ACCELEPORT=mCONFIG_USB_SERIAL_CP210X=yCONFIG_USB_SERIAL_CYPRESS_M8=mCONFIG_USB_SERIAL_EMPEG=yCONFIG_USB_SERIAL_FTDI_SIO=m
# CONFIG_USB_SERIAL_FUNSOFT is not set
# CONFIG_USB_SERIAL_VISOR is not setCONFIG_USB_SERIAL_IPAQ=y
# CONFIG_USB_SERIAL_IR is not setCONFIG_USB_SERIAL_EDGEPORT=yCONFIG_USB_SERIAL_EDGEPORT_TI=yCONFIG_USB_SERIAL_GARMIN=yCONFIG_USB_SERIAL_IPW=y
# CONFIG_USB_SERIAL_IUU is not setCONFIG_USB_SERIAL_KEYSPAN_PDA=yCONFIG_USB_SERIAL_KEYSPAN=yCONFIG_USB_SERIAL_KLSI=y
# CONFIG_USB_SERIAL_KOBIL_SCT is not setCONFIG_USB_SERIAL_MCT_U232=y
# CONFIG_USB_SERIAL_MOS7720 is not set
# CONFIG_USB_SERIAL_MOS7840 is not set
# CONFIG_USB_SERIAL_MOTOROLA is not setCONFIG_USB_SERIAL_NAVMAN=y
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_OTI6858 is not set
# CONFIG_USB_SERIAL_QUALCOMM is not setCONFIG_USB_SERIAL_SPCP8X5=mCONFIG_USB_SERIAL_HP4X=mCONFIG_USB_SERIAL_SAFE=mCONFIG_USB_SERIAL_SAFE_PADDED=yCONFIG_USB_SERIAL_SIEMENS_MPI=m
# CONFIG_USB_SERIAL_SIERRAWIRELESS is not setCONFIG_USB_SERIAL_SYMBOL=y
# CONFIG_USB_SERIAL_TI is not setCONFIG_USB_SERIAL_CYBERJACK=yCONFIG_USB_SERIAL_XIRCOM=m
# CONFIG_USB_SERIAL_OPTION is not setCONFIG_USB_SERIAL_OMNINET=yCONFIG_USB_SERIAL_OPTICON=yCONFIG_USB_SERIAL_DEBUG=m
#
# USB Miscellaneous drivers
#CONFIG_USB_EMI62=m
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_ADUTUX is not setCONFIG_USB_SEVSEG=yCONFIG_USB_RIO500=yCONFIG_USB_LEGOTOWER=yCONFIG_USB_LCD=y
# CONFIG_USB_BERRY_CHARGE is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYPRESS_CY7C63 is not setCONFIG_USB_CYTHERM=mCONFIG_USB_IDMOUSE=y
# CONFIG_USB_FTDI_ELAN is not setCONFIG_USB_APPLEDISPLAY=m
# CONFIG_USB_SISUSBVGA is not set
# CONFIG_USB_LD is not setCONFIG_USB_TRANCEVIBRATOR=y
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not setCONFIG_USB_ISIGHTFW=y
# CONFIG_USB_VST is not set
# CONFIG_USB_ATM is not set
# CONFIG_USB_GADGET is not set
#
# OTG and related infrastructure
#CONFIG_USB_OTG_UTILS=yCONFIG_USB_GPIO_VBUS=mCONFIG_NOP_USB_XCEIV=mCONFIG_UWB=mCONFIG_UWB_HWA=mCONFIG_UWB_WHCI=mCONFIG_UWB_WLP=mCONFIG_UWB_I1480U=m
# CONFIG_UWB_I1480U_WLP is not setCONFIG_MMC=yCONFIG_MMC_DEBUG=y
# CONFIG_MMC_UNSAFE_RESUME is not set
#
# MMC/SD/SDIO Card Drivers
#CONFIG_MMC_BLOCK=yCONFIG_MMC_BLOCK_BOUNCE=yCONFIG_SDIO_UART=yCONFIG_MMC_TEST=y
#
# MMC/SD/SDIO Host Controller Drivers
#
# CONFIG_MMC_SDHCI is not set
# CONFIG_MMC_WBSD is not set
# CONFIG_MMC_TIFM_SD is not setCONFIG_MMC_CB710=yCONFIG_MMC_VIA_SDMMC=y
# CONFIG_MEMSTICK is not setCONFIG_NEW_LEDS=yCONFIG_LEDS_CLASS=m
#
# LED drivers
#CONFIG_LEDS_ALIX2=mCONFIG_LEDS_PCA9532=mCONFIG_LEDS_GPIO=m
# CONFIG_LEDS_GPIO_PLATFORM is not set
# CONFIG_LEDS_LP3944 is not setCONFIG_LEDS_PCA955X=m
# CONFIG_LEDS_DAC124S085 is not setCONFIG_LEDS_BD2802=m
#
# LED Triggers
#CONFIG_LEDS_TRIGGERS=yCONFIG_LEDS_TRIGGER_TIMER=m
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not setCONFIG_LEDS_TRIGGER_BACKLIGHT=yCONFIG_LEDS_TRIGGER_GPIO=mCONFIG_LEDS_TRIGGER_DEFAULT_ON=m
#
# iptables trigger is under Netfilter config (LED target) # CONFIG_ACCESSIBILITY=y # CONFIG_A11Y_BRAILLE_CONSOLE is not set CONFIG_INFINIBAND=y CONFIG_INFINIBAND_USER_MAD=m CONFIG_INFINIBAND_USER_ACCESS=y CONFIG_INFINIBAND_USER_MEM=y CONFIG_INFINIBAND_MTHCA=m # CONFIG_INFINIBAND_MTHCA_DEBUG is not set CONFIG_INFINIBAND_AMSO1100=m CONFIG_INFINIBAND_AMSO1100_DEBUG=y # CONFIG_INFINIBAND_CXGB3 is not set CONFIG_MLX4_INFINIBAND=m CONFIG_INFINIBAND_NES=m CONFIG_INFINIBAND_NES_DEBUG=y # CONFIG_INFINIBAND_IPOIB is not set # CONFIG_INFINIBAND_SRP is not set CONFIG_EDAC=y
#
# Reporting subsystems
#
# CONFIG_EDAC_DEBUG is not setCONFIG_EDAC_MM_EDAC=mCONFIG_EDAC_AMD76X=m
# CONFIG_EDAC_E7XXX is not set
# CONFIG_EDAC_E752X is not setCONFIG_EDAC_I82875P=mCONFIG_EDAC_I82975X=m
# CONFIG_EDAC_I3000 is not setCONFIG_EDAC_X38=m
# CONFIG_EDAC_I5400 is not setCONFIG_EDAC_I82860=m
# CONFIG_EDAC_R82600 is not set
# CONFIG_EDAC_I5000 is not setCONFIG_EDAC_I5100=mCONFIG_RTC_LIB=yCONFIG_RTC_CLASS=yCONFIG_RTC_HCTOSYS=yCONFIG_RTC_HCTOSYS_DEVICE="rtc0"
# CONFIG_RTC_DEBUG is not set
#
# RTC interfaces
#CONFIG_RTC_INTF_SYSFS=y
# CONFIG_RTC_INTF_PROC is not setCONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not setCONFIG_RTC_DRV_TEST=m
#
# I2C RTC drivers
#CONFIG_RTC_DRV_DS1307=yCONFIG_RTC_DRV_DS1374=m
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_MAX6900 is not setCONFIG_RTC_DRV_RS5C372=mCONFIG_RTC_DRV_ISL1208=yCONFIG_RTC_DRV_X1205=yCONFIG_RTC_DRV_PCF8563=mCONFIG_RTC_DRV_PCF8583=yCONFIG_RTC_DRV_M41T80=yCONFIG_RTC_DRV_M41T80_WDT=y
# CONFIG_RTC_DRV_TWL4030 is not set
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_FM3130 is not setCONFIG_RTC_DRV_RX8581=mCONFIG_RTC_DRV_RX8025=m
#
# SPI RTC drivers
#CONFIG_RTC_DRV_M41T94=yCONFIG_RTC_DRV_DS1305=y
# CONFIG_RTC_DRV_DS1390 is not setCONFIG_RTC_DRV_MAX6902=mCONFIG_RTC_DRV_R9701=yCONFIG_RTC_DRV_RS5C348=y
# CONFIG_RTC_DRV_DS3234 is not set
#
# Platform RTC drivers
#CONFIG_RTC_DRV_CMOS=mCONFIG_RTC_DRV_DS1286=yCONFIG_RTC_DRV_DS1511=y
# CONFIG_RTC_DRV_DS1553 is not setCONFIG_RTC_DRV_DS1742=mCONFIG_RTC_DRV_STK17TA8=yCONFIG_RTC_DRV_M48T86=m
# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not setCONFIG_RTC_DRV_BQ4802=m
# CONFIG_RTC_DRV_V3020 is not set
# CONFIG_RTC_DRV_PCF50633 is not set
#
# on-CPU RTC drivers
#CONFIG_DMADEVICES=y
#
# DMA Devices
#CONFIG_INTEL_IOATDMA=mCONFIG_DMA_ENGINE=y
#
# DMA Clients
#CONFIG_NET_DMA=y
# CONFIG_DMATEST is not setCONFIG_DCA=mCONFIG_AUXDISPLAY=yCONFIG_KS0108=yCONFIG_KS0108_PORT=0x378CONFIG_KS0108_DELAY=2
# CONFIG_CFAG12864B is not setCONFIG_UIO=mCONFIG_UIO_CIF=mCONFIG_UIO_PDRV=mCONFIG_UIO_PDRV_GENIRQ=m
# CONFIG_UIO_SMX is not setCONFIG_UIO_AEC=m
# CONFIG_UIO_SERCOS3 is not set
#
# TI VLYNQ
#
# CONFIG_STAGING is not set
# CONFIG_X86_PLATFORM_DEVICES is not set
#
# Firmware Drivers
#
# CONFIG_EDD is not set
# CONFIG_FIRMWARE_MEMMAP is not setCONFIG_DELL_RBU=m
# CONFIG_DCDBAS is not set
# CONFIG_ISCSI_IBFT_FIND is not set
#
# File systems
#
# CONFIG_EXT2_FS is not setCONFIG_EXT3_FS=yCONFIG_EXT3_DEFAULTS_TO_ORDERED=yCONFIG_EXT3_FS_XATTR=yCONFIG_EXT3_FS_POSIX_ACL=yCONFIG_EXT3_FS_SECURITY=yCONFIG_EXT4_FS=y
# CONFIG_EXT4DEV_COMPAT is not setCONFIG_EXT4_FS_XATTR=yCONFIG_EXT4_FS_POSIX_ACL=yCONFIG_EXT4_FS_SECURITY=yCONFIG_JBD=y
# CONFIG_JBD_DEBUG is not setCONFIG_JBD2=yCONFIG_JBD2_DEBUG=yCONFIG_FS_MBCACHE=yCONFIG_REISERFS_FS=yCONFIG_REISERFS_CHECK=y
# CONFIG_REISERFS_PROC_INFO is not setCONFIG_REISERFS_FS_XATTR=yCONFIG_REISERFS_FS_POSIX_ACL=yCONFIG_REISERFS_FS_SECURITY=yCONFIG_JFS_FS=yCONFIG_JFS_POSIX_ACL=yCONFIG_JFS_SECURITY=y
# CONFIG_JFS_DEBUG is not set
# CONFIG_JFS_STATISTICS is not setCONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not setCONFIG_GFS2_FS=y
# CONFIG_GFS2_FS_LOCKING_DLM is not set
# CONFIG_OCFS2_FS is not setCONFIG_BTRFS_FS=y
# CONFIG_BTRFS_FS_POSIX_ACL is not setCONFIG_FILE_LOCKING=yCONFIG_FSNOTIFY=yCONFIG_DNOTIFY=y
# CONFIG_INOTIFY is not setCONFIG_INOTIFY_USER=yCONFIG_QUOTA=yCONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_PRINT_QUOTA_WARNING is not setCONFIG_QUOTA_TREE=y
# CONFIG_QFMT_V1 is not setCONFIG_QFMT_V2=yCONFIG_QUOTACTL=yCONFIG_AUTOFS_FS=yCONFIG_AUTOFS4_FS=mCONFIG_FUSE_FS=y
# CONFIG_CUSE is not set
#
# Caches
#CONFIG_FSCACHE=yCONFIG_FSCACHE_STATS=y
# CONFIG_FSCACHE_HISTOGRAM is not setCONFIG_FSCACHE_DEBUG=yCONFIG_CACHEFILES=yCONFIG_CACHEFILES_DEBUG=yCONFIG_CACHEFILES_HISTOGRAM=y
#
# CD-ROM/DVD Filesystems
#CONFIG_ISO9660_FS=y
# CONFIG_JOLIET is not setCONFIG_ZISOFS=yCONFIG_UDF_FS=yCONFIG_UDF_NLS=y
#
# DOS/FAT/NT Filesystems
#CONFIG_FAT_FS=yCONFIG_MSDOS_FS=yCONFIG_VFAT_FS=mCONFIG_FAT_DEFAULT_CODEPAGE=437CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"CONFIG_NTFS_FS=mCONFIG_NTFS_DEBUG=y
# CONFIG_NTFS_RW is not set
#
# Pseudo filesystems
#CONFIG_PROC_FS=yCONFIG_PROC_KCORE=yCONFIG_PROC_VMCORE=yCONFIG_PROC_SYSCTL=y
# CONFIG_PROC_PAGE_MONITOR is not setCONFIG_SYSFS=yCONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not setCONFIG_HUGETLBFS=yCONFIG_HUGETLB_PAGE=y
# CONFIG_CONFIGFS_FS is not setCONFIG_MISC_FILESYSTEMS=yCONFIG_ADFS_FS=mCONFIG_ADFS_FS_RW=yCONFIG_AFFS_FS=yCONFIG_ECRYPT_FS=yCONFIG_HFS_FS=mCONFIG_HFSPLUS_FS=m
# CONFIG_BEFS_FS is not setCONFIG_BFS_FS=mCONFIG_EFS_FS=mCONFIG_CRAMFS=m
# CONFIG_SQUASHFS is not setCONFIG_VXFS_FS=mCONFIG_MINIX_FS=mCONFIG_OMFS_FS=yCONFIG_HPFS_FS=mCONFIG_QNX4FS_FS=yCONFIG_ROMFS_FS=mCONFIG_ROMFS_BACKED_BY_BLOCK=y
# CONFIG_ROMFS_BACKED_BY_MTD is not set
# CONFIG_ROMFS_BACKED_BY_BOTH is not setCONFIG_ROMFS_ON_BLOCK=yCONFIG_SYSV_FS=yCONFIG_UFS_FS=yCONFIG_UFS_FS_WRITE=yCONFIG_UFS_DEBUG=yCONFIG_EXOFS_FS=mCONFIG_EXOFS_DEBUG=yCONFIG_NILFS2_FS=yCONFIG_NETWORK_FILESYSTEMS=yCONFIG_NFS_FS=m
# CONFIG_NFS_V3 is not setCONFIG_NFS_V4=y
# CONFIG_NFS_V4_1 is not setCONFIG_NFS_FSCACHE=yCONFIG_NFSD=yCONFIG_NFSD_V2_ACL=yCONFIG_NFSD_V3=yCONFIG_NFSD_V3_ACL=yCONFIG_NFSD_V4=yCONFIG_LOCKD=yCONFIG_LOCKD_V4=yCONFIG_EXPORTFS=yCONFIG_NFS_ACL_SUPPORT=yCONFIG_NFS_COMMON=yCONFIG_SUNRPC=yCONFIG_SUNRPC_GSS=yCONFIG_RPCSEC_GSS_KRB5=yCONFIG_RPCSEC_GSS_SPKM3=yCONFIG_SMB_FS=y
# CONFIG_SMB_NLS_DEFAULT is not setCONFIG_CIFS=mCONFIG_CIFS_STATS=yCONFIG_CIFS_STATS2=y
# CONFIG_CIFS_WEAK_PW_HASH is not setCONFIG_CIFS_UPCALL=y
# CONFIG_CIFS_XATTR is not setCONFIG_CIFS_DEBUG2=yCONFIG_CIFS_DFS_UPCALL=yCONFIG_CIFS_EXPERIMENTAL=yCONFIG_NCP_FS=yCONFIG_NCPFS_PACKET_SIGNING=yCONFIG_NCPFS_IOCTL_LOCKING=yCONFIG_NCPFS_STRONG=yCONFIG_NCPFS_NFS_NS=yCONFIG_NCPFS_OS2_NS=yCONFIG_NCPFS_SMALLDOS=yCONFIG_NCPFS_NLS=y
# CONFIG_NCPFS_EXTRAS is not setCONFIG_CODA_FS=mCONFIG_AFS_FS=y
# CONFIG_AFS_DEBUG is not setCONFIG_AFS_FSCACHE=y
#
# Partition Types
#CONFIG_PARTITION_ADVANCED=yCONFIG_ACORN_PARTITION=y
# CONFIG_ACORN_PARTITION_CUMANA is not setCONFIG_ACORN_PARTITION_EESOX=y
# CONFIG_ACORN_PARTITION_ICS is not set
# CONFIG_ACORN_PARTITION_ADFS is not set
# CONFIG_ACORN_PARTITION_POWERTEC is not set
# CONFIG_ACORN_PARTITION_RISCIX is not setCONFIG_OSF_PARTITION=yCONFIG_AMIGA_PARTITION=y
# CONFIG_ATARI_PARTITION is not set
# CONFIG_MAC_PARTITION is not setCONFIG_MSDOS_PARTITION=yCONFIG_BSD_DISKLABEL=yCONFIG_MINIX_SUBPARTITION=yCONFIG_SOLARIS_X86_PARTITION=yCONFIG_UNIXWARE_DISKLABEL=yCONFIG_LDM_PARTITION=y
# CONFIG_LDM_DEBUG is not setCONFIG_SGI_PARTITION=y
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not setCONFIG_KARMA_PARTITION=y
# CONFIG_EFI_PARTITION is not setCONFIG_SYSV68_PARTITION=yCONFIG_NLS=yCONFIG_NLS_DEFAULT="iso8859-1"CONFIG_NLS_CODEPAGE_437=yCONFIG_NLS_CODEPAGE_737=yCONFIG_NLS_CODEPAGE_775=mCONFIG_NLS_CODEPAGE_850=y
# CONFIG_NLS_CODEPAGE_852 is not setCONFIG_NLS_CODEPAGE_855=yCONFIG_NLS_CODEPAGE_857=mCONFIG_NLS_CODEPAGE_860=yCONFIG_NLS_CODEPAGE_861=yCONFIG_NLS_CODEPAGE_862=mCONFIG_NLS_CODEPAGE_863=m
# CONFIG_NLS_CODEPAGE_864 is not setCONFIG_NLS_CODEPAGE_865=yCONFIG_NLS_CODEPAGE_866=yCONFIG_NLS_CODEPAGE_869=yCONFIG_NLS_CODEPAGE_936=mCONFIG_NLS_CODEPAGE_950=mCONFIG_NLS_CODEPAGE_932=m
# CONFIG_NLS_CODEPAGE_949 is not setCONFIG_NLS_CODEPAGE_874=y
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not setCONFIG_NLS_CODEPAGE_1251=mCONFIG_NLS_ASCII=mCONFIG_NLS_ISO8859_1=yCONFIG_NLS_ISO8859_2=yCONFIG_NLS_ISO8859_3=mCONFIG_NLS_ISO8859_4=yCONFIG_NLS_ISO8859_5=yCONFIG_NLS_ISO8859_6=y
# CONFIG_NLS_ISO8859_7 is not setCONFIG_NLS_ISO8859_9=y
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not setCONFIG_NLS_ISO8859_15=m
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not setCONFIG_NLS_UTF8=m
# CONFIG_DLM is not set
#
# Kernel hacking
#CONFIG_TRACE_IRQFLAGS_SUPPORT=yCONFIG_PRINTK_TIME=y
# CONFIG_ENABLE_WARN_DEPRECATED is not setCONFIG_ENABLE_MUST_CHECK=yCONFIG_FRAME_WARN=1024CONFIG_MAGIC_SYSRQ=y
# CONFIG_UNUSED_SYMBOLS is not setCONFIG_DEBUG_FS=yCONFIG_HEADERS_CHECK=yCONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not setCONFIG_DETECT_SOFTLOCKUP=yCONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=yCONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1CONFIG_DETECT_HUNG_TASK=yCONFIG_BOOTPARAM_HUNG_TASK_PANIC=yCONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=1CONFIG_SCHED_DEBUG=yCONFIG_SCHEDSTATS=y
# CONFIG_TIMER_STATS is not setCONFIG_DEBUG_OBJECTS=yCONFIG_DEBUG_OBJECTS_SELFTEST=yCONFIG_DEBUG_OBJECTS_FREE=yCONFIG_DEBUG_OBJECTS_TIMERS=yCONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
# CONFIG_SLUB_DEBUG_ON is not setCONFIG_SLUB_STATS=yCONFIG_DEBUG_KMEMLEAK=yCONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=400
# CONFIG_DEBUG_KMEMLEAK_TEST is not setCONFIG_DEBUG_RT_MUTEXES=yCONFIG_DEBUG_PI_LIST=yCONFIG_RT_MUTEX_TESTER=yCONFIG_DEBUG_SPINLOCK=yCONFIG_DEBUG_MUTEXES=yCONFIG_DEBUG_LOCK_ALLOC=yCONFIG_PROVE_LOCKING=yCONFIG_LOCKDEP=y
# CONFIG_LOCK_STAT is not setCONFIG_DEBUG_LOCKDEP=yCONFIG_TRACE_IRQFLAGS=y
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not setCONFIG_STACKTRACE=yCONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_VIRTUAL is not setCONFIG_DEBUG_WRITECOUNT=y
# CONFIG_DEBUG_MEMORY_INIT is not setCONFIG_DEBUG_LIST=yCONFIG_DEBUG_SG=yCONFIG_DEBUG_NOTIFIERS=yCONFIG_ARCH_WANT_FRAME_POINTERS=yCONFIG_FRAME_POINTER=yCONFIG_BOOT_PRINTK_DELAY=yCONFIG_RCU_TORTURE_TEST=y
# CONFIG_RCU_TORTURE_TEST_RUNNABLE is not set
# CONFIG_RCU_CPU_STALL_DETECTOR is not setCONFIG_BACKTRACE_SELF_TEST=m
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not setCONFIG_FAULT_INJECTION=yCONFIG_FAILSLAB=y
# CONFIG_FAIL_PAGE_ALLOC is not setCONFIG_FAIL_MAKE_REQUEST=yCONFIG_FAIL_IO_TIMEOUT=y
# CONFIG_FAULT_INJECTION_DEBUG_FS is not setCONFIG_LATENCYTOP=yCONFIG_SYSCTL_SYSCALL_CHECK=yCONFIG_DEBUG_PAGEALLOC=yCONFIG_USER_STACKTRACE_SUPPORT=yCONFIG_NOP_TRACER=yCONFIG_HAVE_FTRACE_NMI_ENTER=yCONFIG_HAVE_FUNCTION_TRACER=yCONFIG_HAVE_FUNCTION_GRAPH_TRACER=yCONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=yCONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=yCONFIG_HAVE_DYNAMIC_FTRACE=yCONFIG_HAVE_FTRACE_MCOUNT_RECORD=yCONFIG_HAVE_FTRACE_SYSCALLS=yCONFIG_RING_BUFFER=yCONFIG_FTRACE_NMI_ENTER=yCONFIG_EVENT_TRACING=yCONFIG_CONTEXT_SWITCH_TRACER=yCONFIG_TRACING=yCONFIG_GENERIC_TRACER=yCONFIG_TRACING_SUPPORT=yCONFIG_FTRACE=yCONFIG_FUNCTION_TRACER=y
# CONFIG_IRQSOFF_TRACER is not setCONFIG_SYSPROF_TRACER=y
# CONFIG_SCHED_TRACER is not setCONFIG_FTRACE_SYSCALLS=yCONFIG_BOOT_TRACER=yCONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
# CONFIG_PROFILE_ALL_BRANCHES is not setCONFIG_POWER_TRACER=yCONFIG_STACK_TRACER=yCONFIG_KMEMTRACE=y
# CONFIG_WORKQUEUE_TRACER is not setCONFIG_BLK_DEV_IO_TRACE=yCONFIG_DYNAMIC_FTRACE=yCONFIG_FUNCTION_PROFILER=yCONFIG_FTRACE_MCOUNT_RECORD=yCONFIG_FTRACE_SELFTEST=yCONFIG_FTRACE_STARTUP_TEST=yCONFIG_MMIOTRACE=yCONFIG_MMIOTRACE_TEST=m
# CONFIG_RING_BUFFER_BENCHMARK is not setCONFIG_PROVIDE_OHCI1394_DMA_INIT=yCONFIG_BUILD_DOCSRC=yCONFIG_DYNAMIC_DEBUG=yCONFIG_DMA_API_DEBUG=y
# CONFIG_SAMPLES is not setCONFIG_HAVE_ARCH_KGDB=yCONFIG_KGDB=yCONFIG_KGDB_SERIAL_CONSOLE=m
# CONFIG_KGDB_TESTS is not setCONFIG_HAVE_ARCH_KMEMCHECK=yCONFIG_STRICT_DEVMEM=yCONFIG_X86_VERBOSE_BOOTUP=yCONFIG_EARLY_PRINTK=yCONFIG_EARLY_PRINTK_DBGP=yCONFIG_DEBUG_STACKOVERFLOW=yCONFIG_DEBUG_STACK_USAGE=yCONFIG_DEBUG_PER_CPU_MAPS=y
# CONFIG_X86_PTDUMP is not setCONFIG_DEBUG_RODATA=y
# CONFIG_DEBUG_RODATA_TEST is not setCONFIG_DEBUG_NX_TEST=mCONFIG_4KSTACKS=y
# CONFIG_DOUBLEFAULT is not setCONFIG_IOMMU_STRESS=yCONFIG_HAVE_MMIOTRACE_SUPPORT=yCONFIG_IO_DELAY_TYPE_0X80=0CONFIG_IO_DELAY_TYPE_0XED=1CONFIG_IO_DELAY_TYPE_UDELAY=2CONFIG_IO_DELAY_TYPE_NONE=3
# CONFIG_IO_DELAY_0X80 is not setCONFIG_IO_DELAY_0XED=y
# CONFIG_IO_DELAY_UDELAY is not set
# CONFIG_IO_DELAY_NONE is not setCONFIG_DEFAULT_IO_DELAY_TYPE=1CONFIG_DEBUG_BOOT_PARAMS=yCONFIG_CPA_DEBUG=yCONFIG_OPTIMIZE_INLINING=y
#
# Security options
#CONFIG_KEYS=yCONFIG_KEYS_DEBUG_PROC_KEYS=yCONFIG_SECURITY=yCONFIG_SECURITYFS=yCONFIG_SECURITY_NETWORK=y
# CONFIG_SECURITY_NETWORK_XFRM is not setCONFIG_SECURITY_PATH=y
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
# CONFIG_SECURITY_SMACK is not setCONFIG_SECURITY_TOMOYO=yCONFIG_IMA=yCONFIG_IMA_MEASURE_PCR_IDX=10CONFIG_IMA_AUDIT=yCONFIG_CRYPTO=y
#
# Crypto core or helper
#CONFIG_CRYPTO_FIPS=yCONFIG_CRYPTO_ALGAPI=yCONFIG_CRYPTO_ALGAPI2=yCONFIG_CRYPTO_AEAD=yCONFIG_CRYPTO_AEAD2=yCONFIG_CRYPTO_BLKCIPHER=yCONFIG_CRYPTO_BLKCIPHER2=yCONFIG_CRYPTO_HASH=yCONFIG_CRYPTO_HASH2=yCONFIG_CRYPTO_RNG=yCONFIG_CRYPTO_RNG2=yCONFIG_CRYPTO_PCOMP=yCONFIG_CRYPTO_MANAGER=yCONFIG_CRYPTO_MANAGER2=yCONFIG_CRYPTO_GF128MUL=yCONFIG_CRYPTO_NULL=mCONFIG_CRYPTO_WORKQUEUE=yCONFIG_CRYPTO_CRYPTD=yCONFIG_CRYPTO_AUTHENC=yCONFIG_CRYPTO_TEST=m
#
# Authenticated Encryption with Associated Data
#CONFIG_CRYPTO_CCM=yCONFIG_CRYPTO_GCM=mCONFIG_CRYPTO_SEQIV=y
#
# Block modes
#CONFIG_CRYPTO_CBC=yCONFIG_CRYPTO_CTR=yCONFIG_CRYPTO_CTS=mCONFIG_CRYPTO_ECB=yCONFIG_CRYPTO_LRW=m
# CONFIG_CRYPTO_PCBC is not setCONFIG_CRYPTO_XTS=m
#
# Hash modes
#CONFIG_CRYPTO_HMAC=yCONFIG_CRYPTO_XCBC=m
#
# Digest
#CONFIG_CRYPTO_CRC32C=yCONFIG_CRYPTO_CRC32C_INTEL=yCONFIG_CRYPTO_MD4=mCONFIG_CRYPTO_MD5=yCONFIG_CRYPTO_MICHAEL_MIC=y
# CONFIG_CRYPTO_RMD128 is not setCONFIG_CRYPTO_RMD160=y
# CONFIG_CRYPTO_RMD256 is not set
# CONFIG_CRYPTO_RMD320 is not setCONFIG_CRYPTO_SHA1=yCONFIG_CRYPTO_SHA256=mCONFIG_CRYPTO_SHA512=m
# CONFIG_CRYPTO_TGR192 is not setCONFIG_CRYPTO_WP512=y
#
# Ciphers
#CONFIG_CRYPTO_AES=yCONFIG_CRYPTO_AES_586=mCONFIG_CRYPTO_ANUBIS=yCONFIG_CRYPTO_ARC4=y
# CONFIG_CRYPTO_BLOWFISH is not setCONFIG_CRYPTO_CAMELLIA=yCONFIG_CRYPTO_CAST5=yCONFIG_CRYPTO_CAST6=mCONFIG_CRYPTO_DES=yCONFIG_CRYPTO_FCRYPT=mCONFIG_CRYPTO_KHAZAD=y
# CONFIG_CRYPTO_SALSA20 is not setCONFIG_CRYPTO_SALSA20_586=y
# CONFIG_CRYPTO_SEED is not set
# CONFIG_CRYPTO_SERPENT is not setCONFIG_CRYPTO_TEA=mCONFIG_CRYPTO_TWOFISH=mCONFIG_CRYPTO_TWOFISH_COMMON=m
# CONFIG_CRYPTO_TWOFISH_586 is not set
#
# Compression
#CONFIG_CRYPTO_DEFLATE=yCONFIG_CRYPTO_ZLIB=y
# CONFIG_CRYPTO_LZO is not set
#
# Random Number Generation
#CONFIG_CRYPTO_ANSI_CPRNG=m
# CONFIG_CRYPTO_HW is not setCONFIG_HAVE_KVM=yCONFIG_HAVE_KVM_IRQCHIP=yCONFIG_VIRTUALIZATION=yCONFIG_KVM=y
# CONFIG_KVM_INTEL is not setCONFIG_KVM_AMD=mCONFIG_KVM_TRACE=y
# CONFIG_LGUEST is not setCONFIG_VIRTIO=mCONFIG_VIRTIO_RING=mCONFIG_VIRTIO_PCI=mCONFIG_VIRTIO_BALLOON=mCONFIG_BINARY_PRINTF=y
#
# Library routines
#CONFIG_BITREVERSE=yCONFIG_GENERIC_FIND_FIRST_BIT=yCONFIG_GENERIC_FIND_NEXT_BIT=yCONFIG_GENERIC_FIND_LAST_BIT=yCONFIG_CRC_CCITT=yCONFIG_CRC16=yCONFIG_CRC_T10DIF=mCONFIG_CRC_ITU_T=yCONFIG_CRC32=yCONFIG_CRC7=yCONFIG_LIBCRC32C=yCONFIG_ZLIB_INFLATE=yCONFIG_ZLIB_DEFLATE=yCONFIG_HAS_IOMEM=yCONFIG_HAS_IOPORT=yCONFIG_HAS_DMA=yCONFIG_CHECK_SIGNATURE=y
# CONFIG_CPUMASK_OFFSTACK is not setCONFIG_NLATTR=yCONFIG_FORCE_SUCCESSFUL_BUILD=yCONFIG_FORCE_MINIMAL_CONFIG=yCONFIG_FORCE_MINIMAL_CONFIG_PHYS=yCONFIG_X86_32_ALWAYS_ON=y
Re: [tip:core/rcu] rcu: Consolidate sparse and lockdep declarations in include/linux/rcupdate.h
Quoted 27 lines · Ingo Molnar
Quoted 8 lines · tip-bot for Paul E. McKenney
Commit-ID: bc33f24bdca8b6e97376e3a182ab69e6cdefa989 Gitweb: http://git.kernel.org/tip/bc33f24bdca8b6e97376e3a182ab69e6cdefa989 Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:47 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:37 +0200rcu: Consolidate sparse and lockdep declarations in
include/linux/rcupdate.h-tip testing found a spontaneous reboot crash, which i bisected back to this commit:
bc33f24bdca8b6e97376e3a182ab69e6cdefa989is first bad committhe reboot happens during the ftrace syscall tracepoints self-test:
[ 34.618832] Testing event sys_exit_set_robust_list: OK [ 34.635511] Testing event sys_enter_get_robust_list: OK [ 34.652164] Testing event sys_exit_get_robust_list: OK [ 34.668844] Testing event sys_enter_futex: OK [ 34.685495] Testing event sys_exit_futex: OK [ 34.702170] Testing event lock_acquire: [instant reboot]
Quoted 3 lines
There's no log message - just a reboot - which signals some severe crash - perhaps some locking related infinite recursion or something like that?
Pretty impressive for having mostly moved RCU's lockdep-related declarations from one file to another... :-/
Looking into it, probably a typo on my part.
Thanx, Paul
Quoted 3,240 lines
Config attached.
Ingo
#
# Automatically generated make config: don't edit # Linux kernel version: 2.6.31-rc6
# Sun Aug 23 20:04:38 2009
#
#CONFIG_64BITis not setCONFIG_X86_32=y
#CONFIG_X86_64is not setCONFIG_X86=yCONFIG_OUTPUT_FORMAT="elf32-i386"CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"CONFIG_GENERIC_TIME=yCONFIG_GENERIC_CMOS_UPDATE=yCONFIG_CLOCKSOURCE_WATCHDOG=yCONFIG_GENERIC_CLOCKEVENTS=yCONFIG_GENERIC_CLOCKEVENTS_BROADCAST=yCONFIG_LOCKDEP_SUPPORT=yCONFIG_STACKTRACE_SUPPORT=yCONFIG_HAVE_LATENCYTOP_SUPPORT=yCONFIG_FAST_CMPXCHG_LOCAL=yCONFIG_MMU=yCONFIG_ZONE_DMA=yCONFIG_GENERIC_ISA_DMA=yCONFIG_GENERIC_IOMAP=yCONFIG_GENERIC_HWEIGHT=yCONFIG_GENERIC_GPIO=yCONFIG_ARCH_MAY_HAVE_PC_FDC=y
#CONFIG_RWSEM_GENERIC_SPINLOCKis not setCONFIG_RWSEM_XCHGADD_ALGORITHM=yCONFIG_ARCH_HAS_CPU_IDLE_WAIT=yCONFIG_GENERIC_CALIBRATE_DELAY=y
#CONFIG_GENERIC_TIME_VSYSCALLis not setCONFIG_ARCH_HAS_CPU_RELAX=yCONFIG_ARCH_HAS_DEFAULT_IDLE=yCONFIG_ARCH_HAS_CACHE_LINE_SIZE=yCONFIG_HAVE_SETUP_PER_CPU_AREA=yCONFIG_HAVE_DYNAMIC_PER_CPU_AREA=y
#CONFIG_HAVE_CPUMASK_OF_CPU_MAPis not setCONFIG_ARCH_HIBERNATION_POSSIBLE=yCONFIG_ARCH_SUSPEND_POSSIBLE=y
#CONFIG_ZONE_DMA32is not setCONFIG_ARCH_POPULATES_NODE_MAP=y
#CONFIG_AUDIT_ARCHis not setCONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=yCONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=yCONFIG_GENERIC_HARDIRQS=yCONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=yCONFIG_GENERIC_IRQ_PROBE=yCONFIG_GENERIC_PENDING_IRQ=yCONFIG_USE_GENERIC_SMP_HELPERS=yCONFIG_X86_32_SMP=yCONFIG_X86_HT=yCONFIG_X86_TRAMPOLINE=yCONFIG_KTIME_SCALAR=y
#CONFIG_BOOTPARAM_SUPPORTis not setCONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"CONFIG_CONSTRUCTORS=y#
# General setup
#CONFIG_EXPERIMENTAL=yCONFIG_BROKEN_BOOT_ALLOWED3=yCONFIG_BROKEN_BOOT_ALLOWED2=y
#CONFIG_BROKEN_BOOT_ALLOWEDis not setCONFIG_LOCK_KERNEL=yCONFIG_INIT_ENV_ARG_LIMIT=32CONFIG_LOCALVERSION=""
#CONFIG_LOCALVERSION_AUTOis not setCONFIG_HAVE_KERNEL_GZIP=yCONFIG_HAVE_KERNEL_BZIP2=yCONFIG_HAVE_KERNEL_LZMA=yCONFIG_KERNEL_GZIP=y
#CONFIG_KERNEL_BZIP2is not set
#CONFIG_KERNEL_LZMAis not setCONFIG_SWAP=yCONFIG_SYSVIPC=yCONFIG_SYSVIPC_SYSCTL=y
#CONFIG_POSIX_MQUEUEis not set
#CONFIG_BSD_PROCESS_ACCTis not setCONFIG_TASKSTATS=y
#CONFIG_TASK_DELAY_ACCTis not setCONFIG_TASK_XACCT=y
#CONFIG_TASK_IO_ACCOUNTINGis not set
#CONFIG_AUDITis not set#
# RCU Subsystem
#CONFIG_TREE_RCU=y
#CONFIG_PREEMPT_RCUis not setCONFIG_RCU_TRACE=yCONFIG_RCU_FANOUT=32CONFIG_RCU_FANOUT_EXACT=yCONFIG_TREE_RCU_TRACE=y
#CONFIG_PREEMPT_RCU_TRACEis not set
#CONFIG_IKCONFIGis not setCONFIG_LOG_BUF_SHIFT=20CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=yCONFIG_GROUP_SCHED=y
#CONFIG_FAIR_GROUP_SCHEDis not setCONFIG_RT_GROUP_SCHED=yCONFIG_USER_SCHED=y
#CONFIG_CGROUP_SCHEDis not set
#CONFIG_CGROUPSis not setCONFIG_SYSFS_DEPRECATED=yCONFIG_SYSFS_DEPRECATED_V2=yCONFIG_RELAY=yCONFIG_NAMESPACES=y
#CONFIG_UTS_NSis not set
#CONFIG_IPC_NSis not setCONFIG_USER_NS=yCONFIG_PID_NS=yCONFIG_NET_NS=y
#CONFIG_BLK_DEV_INITRDis not setCONFIG_CC_OPTIMIZE_FOR_SIZE=yCONFIG_SYSCTL=yCONFIG_ANON_INODES=yCONFIG_EMBEDDED=yCONFIG_UID16=yCONFIG_SYSCTL_SYSCALL=yCONFIG_KALLSYMS=yCONFIG_KALLSYMS_ALL=y
#CONFIG_KALLSYMS_EXTRA_PASSis not setCONFIG_HOTPLUG=yCONFIG_PRINTK=y
#CONFIG_BUGis not setCONFIG_ELF_CORE=y
#CONFIG_PCSPKR_PLATFORMis not set
#CONFIG_BASE_FULLis not setCONFIG_FUTEX=yCONFIG_EPOLL=yCONFIG_SIGNALFD=yCONFIG_TIMERFD=yCONFIG_EVENTFD=yCONFIG_SHMEM=yCONFIG_AIO=yCONFIG_HAVE_PERF_COUNTERS=y#
# Performance Counters
#CONFIG_PERF_COUNTERS=y
#CONFIG_EVENT_PROFILEis not set
#CONFIG_VM_EVENT_COUNTERSis not setCONFIG_PCI_QUIRKS=yCONFIG_SLUB_DEBUG=yCONFIG_STRIP_ASM_SYMS=y
#CONFIG_COMPAT_BRKis not set
#CONFIG_SLABis not setCONFIG_SLUB=y
#CONFIG_SLOBis not set
#CONFIG_PROFILINGis not setCONFIG_TRACEPOINTS=yCONFIG_MARKERS=yCONFIG_HAVE_OPROFILE=y
#CONFIG_KPROBESis not setCONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=yCONFIG_HAVE_IOREMAP_PROT=yCONFIG_HAVE_KPROBES=yCONFIG_HAVE_KRETPROBES=yCONFIG_HAVE_ARCH_TRACEHOOK=yCONFIG_HAVE_DMA_ATTRS=yCONFIG_HAVE_DMA_API_DEBUG=y#
# GCOV-based kernel profiling
#
#CONFIG_GCOV_KERNELis not setCONFIG_SLOW_WORK=yCONFIG_HAVE_GENERIC_DMA_COHERENT=yCONFIG_SLABINFO=yCONFIG_RT_MUTEXES=yCONFIG_BASE_SMALL=1CONFIG_MODULES=yCONFIG_MODULE_FORCE_LOAD=y
#CONFIG_MODULE_UNLOADis not set
#CONFIG_MODVERSIONSis not setCONFIG_MODULE_SRCVERSION_ALL=yCONFIG_STOP_MACHINE=yCONFIG_BLOCK=yCONFIG_LBDAF=yCONFIG_BLK_DEV_BSG=y
#CONFIG_BLK_DEV_INTEGRITYis not set#
# IO Schedulers
#CONFIG_IOSCHED_NOOP=yCONFIG_IOSCHED_AS=yCONFIG_IOSCHED_DEADLINE=yCONFIG_IOSCHED_CFQ=mCONFIG_DEFAULT_AS=y
#CONFIG_DEFAULT_DEADLINEis not set
#CONFIG_DEFAULT_CFQis not set
#CONFIG_DEFAULT_NOOPis not setCONFIG_DEFAULT_IOSCHED="anticipatory"CONFIG_PREEMPT_NOTIFIERS=yCONFIG_FREEZER=y#
# Processor type and features
#CONFIG_TICK_ONESHOT=yCONFIG_NO_HZ=yCONFIG_HIGH_RES_TIMERS=yCONFIG_GENERIC_CLOCKEVENTS_BUILD=yCONFIG_SMP=yCONFIG_SPARSE_IRQ=yCONFIG_NUMA_IRQ_DESC=yCONFIG_X86_MPPARSE=yCONFIG_X86_BIGSMP=yCONFIG_X86_EXTENDED_PLATFORM=yCONFIG_X86_ELAN=yCONFIG_X86_RDC321X=yCONFIG_X86_32_NON_STANDARD=yCONFIG_X86_NUMAQ=yCONFIG_X86_SUMMIT=yCONFIG_X86_ES7000=yCONFIG_SCHED_OMIT_FRAME_POINTER=yCONFIG_PARAVIRT_GUEST=yCONFIG_VMI=yCONFIG_KVM_CLOCK=yCONFIG_KVM_GUEST=y
#CONFIG_LGUEST_GUESTis not setCONFIG_PARAVIRT=yCONFIG_PARAVIRT_SPINLOCKS=yCONFIG_PARAVIRT_CLOCK=y
#CONFIG_PARAVIRT_DEBUGis not set
#CONFIG_MEMTESTis not setCONFIG_X86_SUMMIT_NUMA=yCONFIG_X86_CYCLONE_TIMER=yCONFIG_X86_CPU=yCONFIG_X86_L1_CACHE_BYTES=64CONFIG_X86_INTERNODE_CACHE_BYTES=64CONFIG_X86_CMPXCHG=yCONFIG_X86_L1_CACHE_SHIFT=4CONFIG_X86_XADD=yCONFIG_X86_WP_WORKS_OK=yCONFIG_X86_INVLPG=yCONFIG_X86_BSWAP=yCONFIG_X86_POPAD_OK=yCONFIG_X86_ALIGNMENT_16=yCONFIG_X86_CMPXCHG64=yCONFIG_X86_MINIMUM_CPU_FAMILY=4CONFIG_X86_DEBUGCTLMSR=yCONFIG_PROCESSOR_SELECT=yCONFIG_CPU_SUP_INTEL=y
#CONFIG_CPU_SUP_CYRIX_32is not setCONFIG_CPU_SUP_AMD=yCONFIG_CPU_SUP_CENTAUR=y
#CONFIG_CPU_SUP_TRANSMETA_32is not setCONFIG_CPU_SUP_UMC_32=y
#CONFIG_X86_DSis not set
#CONFIG_HPET_TIMERis not set
#CONFIG_DMIis not set
#CONFIG_IOMMU_HELPERis not set
#CONFIG_IOMMU_APIis not setCONFIG_NR_CPUS=32CONFIG_SCHED_SMT=yCONFIG_SCHED_MC=y
#CONFIG_PREEMPT_NONEis not setCONFIG_PREEMPT_VOLUNTARY=y
#CONFIG_PREEMPTis not setCONFIG_X86_LOCAL_APIC=yCONFIG_X86_IO_APIC=yCONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=yCONFIG_X86_MCE=y
#CONFIG_X86_OLD_MCEis not setCONFIG_X86_NEW_MCE=y
#CONFIG_X86_MCE_INTELis not setCONFIG_X86_MCE_AMD=yCONFIG_X86_ANCIENT_MCE=yCONFIG_X86_MCE_THRESHOLD=y
#CONFIG_X86_MCE_INJECTis not set
#CONFIG_VM86is not setCONFIG_I8K=yCONFIG_X86_REBOOTFIXUPS=y
#CONFIG_MICROCODEis not setCONFIG_X86_MSR=yCONFIG_X86_CPUID=yCONFIG_X86_CPU_DEBUG=m
#CONFIG_NOHIGHMEMis not set
#CONFIG_HIGHMEM4Gis not setCONFIG_HIGHMEM64G=yCONFIG_VMSPLIT_3G=y
#CONFIG_VMSPLIT_3G_OPTis not set
#CONFIG_VMSPLIT_2Gis not set
#CONFIG_VMSPLIT_2G_OPTis not set
#CONFIG_VMSPLIT_1Gis not setCONFIG_PAGE_OFFSET=0xC0000000CONFIG_HIGHMEM=yCONFIG_X86_PAE=yCONFIG_ARCH_PHYS_ADDR_T_64BIT=yCONFIG_NUMA=yCONFIG_NODES_SHIFT=4CONFIG_HAVE_ARCH_BOOTMEM=yCONFIG_ARCH_HAVE_MEMORY_PRESENT=yCONFIG_NEED_NODE_MEMMAP_SIZE=yCONFIG_HAVE_ARCH_ALLOC_REMAP=yCONFIG_ARCH_DISCONTIGMEM_ENABLE=yCONFIG_ARCH_DISCONTIGMEM_DEFAULT=yCONFIG_ARCH_SPARSEMEM_ENABLE=yCONFIG_ARCH_SELECT_MEMORY_MODEL=yCONFIG_SELECT_MEMORY_MODEL=y
#CONFIG_FLATMEM_MANUALis not setCONFIG_DISCONTIGMEM_MANUAL=y
#CONFIG_SPARSEMEM_MANUALis not setCONFIG_DISCONTIGMEM=yCONFIG_FLAT_NODE_MEM_MAP=yCONFIG_NEED_MULTIPLE_NODES=yCONFIG_HAVE_MEMORY_PRESENT=yCONFIG_SPARSEMEM_STATIC=yCONFIG_PAGEFLAGS_EXTENDED=yCONFIG_SPLIT_PTLOCK_CPUS=4CONFIG_MIGRATION=yCONFIG_PHYS_ADDR_T_64BIT=yCONFIG_ZONE_DMA_FLAG=1CONFIG_BOUNCE=yCONFIG_VIRT_TO_BUS=yCONFIG_HAVE_MLOCK=yCONFIG_HAVE_MLOCKED_PAGE_BIT=yCONFIG_MMU_NOTIFIER=yCONFIG_DEFAULT_MMAP_MIN_ADDR=4096CONFIG_HIGHPTE=yCONFIG_X86_CHECK_BIOS_CORRUPTION=y
#CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECKis not set #CONFIG_X86_RESERVE_LOW_64Kis not set
#CONFIG_MATH_EMULATIONis not setCONFIG_MTRR=yCONFIG_MTRR_SANITIZER=yCONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1CONFIG_X86_PAT=y
#CONFIG_EFIis not setCONFIG_SECCOMP=yCONFIG_CC_STACKPROTECTOR_ALL=yCONFIG_CC_STACKPROTECTOR=y
#CONFIG_HZ_100is not set
#CONFIG_HZ_250is not setCONFIG_HZ_300=y
#CONFIG_HZ_1000is not setCONFIG_HZ=300CONFIG_SCHED_HRTICK=yCONFIG_KEXEC=yCONFIG_CRASH_DUMP=yCONFIG_KEXEC_JUMP=yCONFIG_PHYSICAL_START=0x1000000
#CONFIG_RELOCATABLEis not setCONFIG_PHYSICAL_ALIGN=0x1000000CONFIG_HOTPLUG_CPU=yCONFIG_COMPAT_VDSO=yCONFIG_CMDLINE_BOOL=yCONFIG_CMDLINE=""
#CONFIG_CMDLINE_OVERRIDEis not setCONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
#CONFIG_HAVE_ARCH_EARLY_PFN_TO_NIDis not set#
# Power management and ACPI options
#CONFIG_PM=y
#CONFIG_PM_DEBUGis not setCONFIG_PM_SLEEP_SMP=yCONFIG_PM_SLEEP=yCONFIG_SUSPEND=yCONFIG_SUSPEND_FREEZER=yCONFIG_HIBERNATION_NVS=yCONFIG_HIBERNATION=yCONFIG_PM_STD_PARTITION=""CONFIG_ACPI=yCONFIG_ACPI_SLEEP=yCONFIG_ACPI_PROCFS=yCONFIG_ACPI_PROCFS_POWER=yCONFIG_ACPI_SYSFS_POWER=yCONFIG_ACPI_PROC_EVENT=yCONFIG_ACPI_AC=mCONFIG_ACPI_BATTERY=mCONFIG_ACPI_BUTTON=mCONFIG_ACPI_VIDEO=mCONFIG_ACPI_FAN=mCONFIG_ACPI_DOCK=y
#CONFIG_ACPI_PROCESSORis not setCONFIG_ACPI_NUMA=y
#CONFIG_ACPI_CUSTOM_DSDTis not setCONFIG_ACPI_BLACKLIST_YEAR=0CONFIG_ACPI_DEBUG=yCONFIG_ACPI_DEBUG_FUNC_TRACE=yCONFIG_ACPI_PCI_SLOT=y
#CONFIG_X86_PM_TIMERis not set
#CONFIG_ACPI_CONTAINERis not set
#CONFIG_ACPI_SBSis not set
#CONFIG_APMis not set#
# CPU Frequency scaling
#
#CONFIG_CPU_FREQis not setCONFIG_CPU_IDLE=yCONFIG_CPU_IDLE_GOV_LADDER=yCONFIG_CPU_IDLE_GOV_MENU=y#
# Bus options (PCI etc.)
#CONFIG_PCI=yCONFIG_PCI_GOBIOS=y
#CONFIG_PCI_GOMMCONFIGis not set
#CONFIG_PCI_GODIRECTis not set
#CONFIG_PCI_GOOLPCis not set
#CONFIG_PCI_GOANYis not setCONFIG_PCI_BIOS=yCONFIG_PCI_DOMAINS=y
#CONFIG_DMARis not setCONFIG_PCIEPORTBUS=yCONFIG_HOTPLUG_PCI_PCIE=mCONFIG_PCIEAER=yCONFIG_PCIE_ECRC=yCONFIG_PCIEAER_INJECT=mCONFIG_PCIEASPM=yCONFIG_PCIEASPM_DEBUG=yCONFIG_ARCH_SUPPORTS_MSI=yCONFIG_PCI_MSI=y
#CONFIG_PCI_LEGACYis not set
#CONFIG_PCI_DEBUGis not set
#CONFIG_PCI_STUBis not setCONFIG_HT_IRQ=yCONFIG_PCI_IOV=yCONFIG_ISA_DMA_API=yCONFIG_ISA=y
#CONFIG_EISAis not setCONFIG_MCA=yCONFIG_MCA_LEGACY=yCONFIG_MCA_PROC_FS=y
#CONFIG_SCx200is not setCONFIG_OLPC=yCONFIG_K8_NB=yCONFIG_PCCARD=y
#CONFIG_PCMCIA_DEBUGis not set
#CONFIG_PCMCIAis not setCONFIG_CARDBUS=y#
# PC-card bridges
#CONFIG_YENTA=mCONFIG_YENTA_O2=yCONFIG_YENTA_RICOH=y
#CONFIG_YENTA_TIis not setCONFIG_YENTA_TOSHIBA=yCONFIG_PCMCIA_PROBE=yCONFIG_PCCARD_NONSTATIC=mCONFIG_HOTPLUG_PCI=m
#CONFIG_HOTPLUG_PCI_FAKEis not set
#CONFIG_HOTPLUG_PCI_COMPAQis not setCONFIG_HOTPLUG_PCI_IBM=mCONFIG_HOTPLUG_PCI_ACPI=mCONFIG_HOTPLUG_PCI_ACPI_IBM=mCONFIG_HOTPLUG_PCI_CPCI=yCONFIG_HOTPLUG_PCI_CPCI_ZT5550=mCONFIG_HOTPLUG_PCI_CPCI_GENERIC=mCONFIG_HOTPLUG_PCI_SHPC=m#
# Executable file formats / Emulations
#CONFIG_BINFMT_ELF=yCONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=yCONFIG_HAVE_AOUT=yCONFIG_BINFMT_AOUT=yCONFIG_BINFMT_MISC=yCONFIG_HAVE_ATOMIC_IOMAP=yCONFIG_NET=y#
# Networking options
#CONFIG_PACKET=yCONFIG_PACKET_MMAP=yCONFIG_UNIX=yCONFIG_XFRM=y
#CONFIG_XFRM_USERis not set
#CONFIG_XFRM_SUB_POLICYis not set
#CONFIG_XFRM_MIGRATEis not setCONFIG_XFRM_STATISTICS=yCONFIG_XFRM_IPCOMP=m
#CONFIG_NET_KEYis not setCONFIG_INET=yCONFIG_IP_MULTICAST=y
#CONFIG_IP_ADVANCED_ROUTERis not setCONFIG_IP_FIB_HASH=yCONFIG_IP_PNP=yCONFIG_IP_PNP_DHCP=yCONFIG_IP_PNP_BOOTP=yCONFIG_IP_PNP_RARP=y
#CONFIG_NET_IPIPis not setCONFIG_NET_IPGRE=y
#CONFIG_NET_IPGRE_BROADCASTis not setCONFIG_IP_MROUTE=yCONFIG_IP_PIMSM_V1=y
#CONFIG_IP_PIMSM_V2is not set
#CONFIG_ARPDis not setCONFIG_SYN_COOKIES=yCONFIG_INET_AH=yCONFIG_INET_ESP=yCONFIG_INET_IPCOMP=mCONFIG_INET_XFRM_TUNNEL=mCONFIG_INET_TUNNEL=mCONFIG_INET_XFRM_MODE_TRANSPORT=yCONFIG_INET_XFRM_MODE_TUNNEL=yCONFIG_INET_XFRM_MODE_BEET=yCONFIG_INET_LRO=y
#CONFIG_INET_DIAGis not setCONFIG_TCP_CONG_ADVANCED=y
#CONFIG_TCP_CONG_BICis not set
#CONFIG_TCP_CONG_CUBICis not setCONFIG_TCP_CONG_WESTWOOD=mCONFIG_TCP_CONG_HTCP=m
#CONFIG_TCP_CONG_HSTCPis not setCONFIG_TCP_CONG_HYBLA=yCONFIG_TCP_CONG_VEGAS=mCONFIG_TCP_CONG_SCALABLE=m
#CONFIG_TCP_CONG_LPis not set
#CONFIG_TCP_CONG_VENOis not setCONFIG_TCP_CONG_YEAH=mCONFIG_TCP_CONG_ILLINOIS=y
#CONFIG_DEFAULT_BICis not set
#CONFIG_DEFAULT_CUBICis not set
#CONFIG_DEFAULT_HTCPis not set
#CONFIG_DEFAULT_VEGASis not set
#CONFIG_DEFAULT_WESTWOODis not setCONFIG_DEFAULT_RENO=yCONFIG_DEFAULT_TCP_CONG="reno"CONFIG_TCP_MD5SIG=yCONFIG_IPV6=mCONFIG_IPV6_PRIVACY=yCONFIG_IPV6_ROUTER_PREF=yCONFIG_IPV6_ROUTE_INFO=y
#CONFIG_IPV6_OPTIMISTIC_DADis not setCONFIG_INET6_AH=m
#CONFIG_INET6_ESPis not setCONFIG_INET6_IPCOMP=m
#CONFIG_IPV6_MIP6is not setCONFIG_INET6_XFRM_TUNNEL=mCONFIG_INET6_TUNNEL=mCONFIG_INET6_XFRM_MODE_TRANSPORT=m
#CONFIG_INET6_XFRM_MODE_TUNNELis not set
#CONFIG_INET6_XFRM_MODE_BEETis not setCONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=mCONFIG_IPV6_SIT=mCONFIG_IPV6_NDISC_NODETYPE=yCONFIG_IPV6_TUNNEL=mCONFIG_IPV6_MULTIPLE_TABLES=yCONFIG_IPV6_SUBTREES=y
#CONFIG_IPV6_MROUTEis not setCONFIG_NETLABEL=yCONFIG_NETWORK_SECMARK=yCONFIG_NETFILTER=yCONFIG_NETFILTER_DEBUG=y
#CONFIG_NETFILTER_ADVANCEDis not set#
# Core Netfilter Configuration
#CONFIG_NETFILTER_NETLINK=mCONFIG_NETFILTER_NETLINK_LOG=mCONFIG_NF_CONNTRACK=mCONFIG_NF_CONNTRACK_SECMARK=y
#CONFIG_NF_CONNTRACK_FTPis not set
#CONFIG_NF_CONNTRACK_IRCis not setCONFIG_NF_CONNTRACK_SIP=mCONFIG_NF_CT_NETLINK=mCONFIG_NETFILTER_XTABLES=yCONFIG_NETFILTER_XT_TARGET_CONNSECMARK=mCONFIG_NETFILTER_XT_TARGET_MARK=m
#CONFIG_NETFILTER_XT_TARGET_NFLOGis not setCONFIG_NETFILTER_XT_TARGET_SECMARK=y
#CONFIG_NETFILTER_XT_TARGET_TCPMSSis not setCONFIG_NETFILTER_XT_MATCH_CONNTRACK=mCONFIG_NETFILTER_XT_MATCH_MARK=mCONFIG_NETFILTER_XT_MATCH_POLICY=yCONFIG_NETFILTER_XT_MATCH_STATE=mCONFIG_IP_VS=mCONFIG_IP_VS_IPV6=yCONFIG_IP_VS_DEBUG=yCONFIG_IP_VS_TAB_BITS=12#
# IPVS transport protocol load balancing support
#
#CONFIG_IP_VS_PROTO_TCPis not setCONFIG_IP_VS_PROTO_UDP=yCONFIG_IP_VS_PROTO_AH_ESP=yCONFIG_IP_VS_PROTO_ESP=y
#CONFIG_IP_VS_PROTO_AHis not set#
# IPVS scheduler
#CONFIG_IP_VS_RR=mCONFIG_IP_VS_WRR=m
#CONFIG_IP_VS_LCis not setCONFIG_IP_VS_WLC=mCONFIG_IP_VS_LBLC=mCONFIG_IP_VS_LBLCR=mCONFIG_IP_VS_DH=mCONFIG_IP_VS_SH=m
#CONFIG_IP_VS_SEDis not set
#CONFIG_IP_VS_NQis not set#
# IPVS application helper
##
# IP: Netfilter Configuration
#
#CONFIG_NF_DEFRAG_IPV4is not set
#CONFIG_NF_CONNTRACK_IPV4is not setCONFIG_IP_NF_IPTABLES=m
#CONFIG_IP_NF_FILTERis not set
#CONFIG_IP_NF_TARGET_LOGis not setCONFIG_IP_NF_TARGET_ULOG=mCONFIG_IP_NF_MANGLE=m#
# IPv6: Netfilter Configuration
#CONFIG_NF_CONNTRACK_IPV6=mCONFIG_IP6_NF_IPTABLES=mCONFIG_IP6_NF_MATCH_IPV6HEADER=m
#CONFIG_IP6_NF_TARGET_LOGis not set
#CONFIG_IP6_NF_FILTERis not setCONFIG_IP6_NF_MANGLE=mCONFIG_IP_DCCP=m#
# DCCP CCIDs Configuration (EXPERIMENTAL)
#CONFIG_IP_DCCP_CCID2_DEBUG=yCONFIG_IP_DCCP_CCID3=yCONFIG_IP_DCCP_CCID3_DEBUG=yCONFIG_IP_DCCP_CCID3_RTO=100CONFIG_IP_DCCP_TFRC_LIB=yCONFIG_IP_DCCP_TFRC_DEBUG=y#
# DCCP Kernel Hacking
#CONFIG_IP_DCCP_DEBUG=yCONFIG_IP_SCTP=mCONFIG_SCTP_DBG_MSG=yCONFIG_SCTP_DBG_OBJCNT=yCONFIG_SCTP_HMAC_NONE=y
#CONFIG_SCTP_HMAC_SHA1is not set
#CONFIG_SCTP_HMAC_MD5is not setCONFIG_TIPC=mCONFIG_TIPC_ADVANCED=yCONFIG_TIPC_ZONES=3CONFIG_TIPC_CLUSTERS=1CONFIG_TIPC_NODES=255CONFIG_TIPC_SLAVE_NODES=0CONFIG_TIPC_PORTS=8191CONFIG_TIPC_LOG=0CONFIG_TIPC_DEBUG=yCONFIG_ATM=m
#CONFIG_ATM_CLIPis not setCONFIG_ATM_LANE=mCONFIG_ATM_MPOA=mCONFIG_ATM_BR2684=m
#CONFIG_ATM_BR2684_IPFILTERis not setCONFIG_STP=mCONFIG_GARP=m
#CONFIG_BRIDGEis not setCONFIG_NET_DSA=yCONFIG_NET_DSA_TAG_DSA=yCONFIG_NET_DSA_TAG_EDSA=yCONFIG_NET_DSA_TAG_TRAILER=yCONFIG_NET_DSA_MV88E6XXX=yCONFIG_NET_DSA_MV88E6060=yCONFIG_NET_DSA_MV88E6XXX_NEED_PPU=yCONFIG_NET_DSA_MV88E6131=yCONFIG_NET_DSA_MV88E6123_61_65=yCONFIG_VLAN_8021Q=mCONFIG_VLAN_8021Q_GVRP=y
#CONFIG_DECNETis not setCONFIG_LLC=mCONFIG_LLC2=mCONFIG_IPX=m
#CONFIG_IPX_INTERNis not setCONFIG_ATALK=mCONFIG_DEV_APPLETALK=m
#CONFIG_LTPCis not setCONFIG_IPDDP=mCONFIG_IPDDP_ENCAP=y
#CONFIG_IPDDP_DECAPis not set
#CONFIG_X25is not setCONFIG_LAPB=mCONFIG_ECONET=mCONFIG_ECONET_AUNUDP=yCONFIG_ECONET_NATIVE=yCONFIG_WAN_ROUTER=m
#CONFIG_PHONETis not set
#CONFIG_IEEE802154is not setCONFIG_NET_SCHED=y#
# Queueing/Scheduling
#
#CONFIG_NET_SCH_CBQis not setCONFIG_NET_SCH_HTB=m
#CONFIG_NET_SCH_HFSCis not setCONFIG_NET_SCH_ATM=mCONFIG_NET_SCH_PRIO=yCONFIG_NET_SCH_MULTIQ=m
#CONFIG_NET_SCH_REDis not set
#CONFIG_NET_SCH_SFQis not set
#CONFIG_NET_SCH_TEQLis not setCONFIG_NET_SCH_TBF=mCONFIG_NET_SCH_GRED=yCONFIG_NET_SCH_DSMARK=yCONFIG_NET_SCH_NETEM=y
#CONFIG_NET_SCH_DRRis not set
#CONFIG_NET_SCH_INGRESSis not set#
# Classification
#CONFIG_NET_CLS=y
#CONFIG_NET_CLS_BASICis not setCONFIG_NET_CLS_TCINDEX=mCONFIG_NET_CLS_ROUTE4=mCONFIG_NET_CLS_ROUTE=yCONFIG_NET_CLS_FW=mCONFIG_NET_CLS_U32=mCONFIG_CLS_U32_PERF=yCONFIG_CLS_U32_MARK=yCONFIG_NET_CLS_RSVP=y
#CONFIG_NET_CLS_RSVP6is not set
#CONFIG_NET_CLS_FLOWis not set
#CONFIG_NET_EMATCHis not setCONFIG_NET_CLS_ACT=yCONFIG_NET_ACT_POLICE=m
#CONFIG_NET_ACT_GACTis not set
#CONFIG_NET_ACT_MIRREDis not setCONFIG_NET_ACT_IPT=mCONFIG_NET_ACT_NAT=m
#CONFIG_NET_ACT_PEDITis not setCONFIG_NET_ACT_SIMP=yCONFIG_NET_ACT_SKBEDIT=m
#CONFIG_NET_CLS_INDis not setCONFIG_NET_SCH_FIFO=y
#CONFIG_DCBis not set#
# Network testing
#
#CONFIG_NET_PKTGENis not set
#CONFIG_NET_DROP_MONITORis not setCONFIG_HAMRADIO=y#
# Packet Radio protocols
#CONFIG_AX25=mCONFIG_AX25_DAMA_SLAVE=yCONFIG_NETROM=m
#CONFIG_ROSEis not set#
# AX.25 network device drivers
#CONFIG_MKISS=mCONFIG_6PACK=m
#CONFIG_BPQETHERis not setCONFIG_SCC=mCONFIG_SCC_DELAY=yCONFIG_SCC_TRXECHO=yCONFIG_BAYCOM_SER_FDX=mCONFIG_BAYCOM_SER_HDX=mCONFIG_BAYCOM_PAR=mCONFIG_BAYCOM_EPP=m
#CONFIG_YAMis not set
#CONFIG_CANis not setCONFIG_IRDA=m#
# IrDA protocols
#CONFIG_IRLAN=mCONFIG_IRCOMM=m
#CONFIG_IRDA_ULTRAis not set#
# IrDA options
#
#CONFIG_IRDA_CACHE_LAST_LSAPis not setCONFIG_IRDA_FAST_RR=y
#CONFIG_IRDA_DEBUGis not set#
# Infrared-port device drivers
##
# SIR device drivers
#CONFIG_IRTTY_SIR=m#
# Dongle support
#
#CONFIG_DONGLEis not setCONFIG_KINGSUN_DONGLE=m
#CONFIG_KSDAZZLE_DONGLEis not setCONFIG_KS959_DONGLE=m#
# FIR device drivers
#
#CONFIG_USB_IRDAis not set
#CONFIG_SIGMATEL_FIRis not setCONFIG_NSC_FIR=mCONFIG_WINBOND_FIR=m
#CONFIG_TOSHIBA_FIRis not set
#CONFIG_SMC_IRCC_FIRis not setCONFIG_ALI_FIR=m
#CONFIG_VLSI_FIRis not setCONFIG_VIA_FIR=m
#CONFIG_MCS_FIRis not set
#CONFIG_BTis not setCONFIG_AF_RXRPC=yCONFIG_AF_RXRPC_DEBUG=y
#CONFIG_RXKADis not setCONFIG_FIB_RULES=yCONFIG_WIRELESS=y
#CONFIG_CFG80211is not setCONFIG_WIRELESS_OLD_REGULATORY=yCONFIG_WIRELESS_EXT=yCONFIG_WIRELESS_EXT_SYSFS=yCONFIG_LIB80211=yCONFIG_LIB80211_CRYPT_WEP=yCONFIG_LIB80211_CRYPT_CCMP=yCONFIG_LIB80211_CRYPT_TKIP=y
#CONFIG_LIB80211_DEBUGis not set#
# CFG80211 needs to be enabled for MAC80211
#CONFIG_MAC80211_DEFAULT_PS_VALUE=0CONFIG_WIMAX=mCONFIG_WIMAX_DEBUG_LEVEL=8CONFIG_RFKILL=mCONFIG_RFKILL_LEDS=yCONFIG_RFKILL_INPUT=y
#CONFIG_NET_9Pis not set#
# Device Drivers
##
# Generic Driver Options
#CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"CONFIG_STANDALONE=yCONFIG_PREVENT_FIRMWARE_BUILD=yCONFIG_FW_LOADER=y
#CONFIG_FIRMWARE_IN_KERNELis not setCONFIG_EXTRA_FIRMWARE=""CONFIG_DEBUG_DRIVER=y
#CONFIG_DEBUG_DEVRESis not set
#CONFIG_SYS_HYPERVISORis not setCONFIG_CONNECTOR=yCONFIG_PROC_EVENTS=yCONFIG_PARPORT=yCONFIG_PARPORT_PC=y
#CONFIG_PARPORT_SERIALis not setCONFIG_PARPORT_PC_FIFO=yCONFIG_PARPORT_PC_SUPERIO=y
#CONFIG_PARPORT_GSCis not set
#CONFIG_PARPORT_AX88796is not setCONFIG_PARPORT_1284=yCONFIG_PARPORT_NOT_PC=yCONFIG_PNP=y
#CONFIG_PNP_DEBUG_MESSAGESis not set#
# Protocols
#CONFIG_ISAPNP=yCONFIG_PNPBIOS=yCONFIG_PNPBIOS_PROC_FS=yCONFIG_PNPACPI=yCONFIG_BLK_DEV=yCONFIG_BLK_DEV_FD=yCONFIG_BLK_DEV_XD=yCONFIG_BLK_CPQ_DA=yCONFIG_BLK_CPQ_CISS_DA=yCONFIG_CISS_SCSI_TAPE=y
#CONFIG_BLK_DEV_DAC960is not setCONFIG_BLK_DEV_UMEM=m
#CONFIG_BLK_DEV_COW_COMMONis not set
#CONFIG_BLK_DEV_LOOPis not set
#CONFIG_BLK_DEV_NBDis not setCONFIG_BLK_DEV_OSD=mCONFIG_BLK_DEV_SX8=mCONFIG_BLK_DEV_UB=yCONFIG_BLK_DEV_RAM=yCONFIG_BLK_DEV_RAM_COUNT=16CONFIG_BLK_DEV_RAM_SIZE=4096
#CONFIG_BLK_DEV_XIPis not setCONFIG_CDROM_PKTCDVD=mCONFIG_CDROM_PKTCDVD_BUFFERS=8CONFIG_CDROM_PKTCDVD_WCACHE=y
#CONFIG_ATA_OVER_ETHis not setCONFIG_VIRTIO_BLK=m
#CONFIG_BLK_DEV_HDis not set
#CONFIG_MISC_DEVICESis not setCONFIG_CB710_CORE=yCONFIG_HAVE_IDE=y#
# SCSI device support
#
#CONFIG_RAID_ATTRSis not setCONFIG_SCSI=yCONFIG_SCSI_DMA=yCONFIG_SCSI_TGT=mCONFIG_SCSI_NETLINK=yCONFIG_SCSI_PROC_FS=y#
# SCSI support type (disk, tape, CD-ROM)
#CONFIG_BLK_DEV_SD=yCONFIG_CHR_DEV_ST=mCONFIG_CHR_DEV_OSST=y
#CONFIG_BLK_DEV_SRis not setCONFIG_CHR_DEV_SG=mCONFIG_CHR_DEV_SCH=yCONFIG_SCSI_MULTI_LUN=yCONFIG_SCSI_CONSTANTS=yCONFIG_SCSI_LOGGING=y
#CONFIG_SCSI_SCAN_ASYNCis not setCONFIG_SCSI_WAIT_SCAN=m#
# SCSI Transports
#CONFIG_SCSI_SPI_ATTRS=yCONFIG_SCSI_FC_ATTRS=yCONFIG_SCSI_ISCSI_ATTRS=mCONFIG_SCSI_SAS_ATTRS=yCONFIG_SCSI_SAS_LIBSAS=mCONFIG_SCSI_SAS_ATA=yCONFIG_SCSI_SAS_HOST_SMP=yCONFIG_SCSI_SAS_LIBSAS_DEBUG=yCONFIG_SCSI_LOWLEVEL=yCONFIG_ISCSI_TCP=mCONFIG_SCSI_CXGB3_ISCSI=m
#CONFIG_SCSI_BNX2_ISCSIis not setCONFIG_BLK_DEV_3W_XXXX_RAID=m
#CONFIG_SCSI_3W_9XXXis not setCONFIG_SCSI_7000FASST=yCONFIG_SCSI_ACARD=mCONFIG_SCSI_AHA152X=m
#CONFIG_SCSI_AHA1542is not setCONFIG_SCSI_AACRAID=mCONFIG_SCSI_AIC7XXX=yCONFIG_AIC7XXX_CMDS_PER_DEVICE=32CONFIG_AIC7XXX_RESET_DELAY_MS=5000CONFIG_AIC7XXX_DEBUG_ENABLE=yCONFIG_AIC7XXX_DEBUG_MASK=0CONFIG_AIC7XXX_REG_PRETTY_PRINT=yCONFIG_SCSI_AIC7XXX_OLD=mCONFIG_SCSI_AIC79XX=yCONFIG_AIC79XX_CMDS_PER_DEVICE=32CONFIG_AIC79XX_RESET_DELAY_MS=5000
#CONFIG_AIC79XX_DEBUG_ENABLEis not setCONFIG_AIC79XX_DEBUG_MASK=0CONFIG_AIC79XX_REG_PRETTY_PRINT=yCONFIG_SCSI_AIC94XX=mCONFIG_AIC94XX_DEBUG=y
#CONFIG_SCSI_MVSASis not set
#CONFIG_SCSI_DPT_I2Ois not setCONFIG_SCSI_ADVANSYS=m
#CONFIG_SCSI_IN2000is not setCONFIG_SCSI_ARCMSR=m
#CONFIG_SCSI_ARCMSR_AERis not setCONFIG_MEGARAID_NEWGEN=y
#CONFIG_MEGARAID_MMis not setCONFIG_MEGARAID_LEGACY=m
#CONFIG_MEGARAID_SASis not setCONFIG_SCSI_MPT2SAS=yCONFIG_SCSI_MPT2SAS_MAX_SGE=128CONFIG_SCSI_MPT2SAS_LOGGING=y
#CONFIG_SCSI_HPTIOPis not setCONFIG_SCSI_BUSLOGIC=m
#CONFIG_SCSI_FLASHPOINTis not setCONFIG_LIBFC=m
#CONFIG_LIBFCOEis not set
#CONFIG_FCOEis not setCONFIG_FCOE_FNIC=mCONFIG_SCSI_DMX3191D=m
#CONFIG_SCSI_DTC3280is not setCONFIG_SCSI_EATA=mCONFIG_SCSI_EATA_TAGGED_QUEUE=yCONFIG_SCSI_EATA_LINKED_COMMANDS=yCONFIG_SCSI_EATA_MAX_TAGS=16
#CONFIG_SCSI_FUTURE_DOMAINis not setCONFIG_SCSI_FD_MCS=mCONFIG_SCSI_GDTH=y
#CONFIG_SCSI_GENERIC_NCR5380is not set
#CONFIG_SCSI_GENERIC_NCR5380_MMIOis not setCONFIG_SCSI_IBMMCA=m
#CONFIG_IBMMCA_SCSI_ORDER_STANDARDis not set
#CONFIG_IBMMCA_SCSI_DEV_RESETis not setCONFIG_SCSI_IPS=yCONFIG_SCSI_INITIO=y
#CONFIG_SCSI_INIA100is not set
#CONFIG_SCSI_PPAis not set
#CONFIG_SCSI_IMMis not setCONFIG_SCSI_NCR53C406A=y
#CONFIG_SCSI_NCR_D700is not setCONFIG_SCSI_STEX=mCONFIG_SCSI_SYM53C8XX_2=mCONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64CONFIG_SCSI_SYM53C8XX_MMIO=yCONFIG_SCSI_IPR=yCONFIG_SCSI_IPR_TRACE=y
#CONFIG_SCSI_IPR_DUMPis not setCONFIG_SCSI_NCR_Q720=yCONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32CONFIG_SCSI_NCR53C8XX_SYNC=20CONFIG_SCSI_PAS16=mCONFIG_SCSI_QLOGIC_FAS=mCONFIG_SCSI_QLOGIC_1280=mCONFIG_SCSI_QLA_FC=yCONFIG_SCSI_QLA_ISCSI=m
#CONFIG_SCSI_LPFCis not setCONFIG_SCSI_SIM710=yCONFIG_SCSI_SYM53C416=y
CONFIG_SCSI_DC395x=y
#CONFIG_SCSI_DC390Tis not setCONFIG_SCSI_T128=y
#CONFIG_SCSI_U14_34Fis not setCONFIG_SCSI_ULTRASTOR=y
#CONFIG_SCSI_NSP32is not set
#CONFIG_SCSI_DEBUGis not set
#CONFIG_SCSI_SRPis not set
#CONFIG_SCSI_DHis not setCONFIG_SCSI_OSD_INITIATOR=mCONFIG_SCSI_OSD_ULD=mCONFIG_SCSI_OSD_DPRINT_SENSE=1CONFIG_SCSI_OSD_DEBUG=yCONFIG_ATA=y
#CONFIG_ATA_NONSTANDARDis not setCONFIG_ATA_ACPI=yCONFIG_SATA_PMP=yCONFIG_SATA_AHCI=yCONFIG_SATA_SIL24=yCONFIG_ATA_SFF=yCONFIG_SATA_SVW=mCONFIG_ATA_PIIX=y
#CONFIG_SATA_MVis not setCONFIG_SATA_NV=y
#CONFIG_PDC_ADMAis not setCONFIG_SATA_QSTOR=y
#CONFIG_SATA_PROMISEis not setCONFIG_SATA_SX4=mCONFIG_SATA_SIL=mCONFIG_SATA_SIS=y
#CONFIG_SATA_ULIis not setCONFIG_SATA_VIA=y
#CONFIG_SATA_VITESSEis not setCONFIG_SATA_INIC162X=yCONFIG_PATA_ACPI=m
#CONFIG_PATA_ALIis not setCONFIG_PATA_AMD=y
#CONFIG_PATA_ARTOPis not setCONFIG_PATA_ATIIXP=yCONFIG_PATA_CMD640_PCI=mCONFIG_PATA_CMD64X=mCONFIG_PATA_CS5520=yCONFIG_PATA_CS5530=m
#CONFIG_PATA_CS5535is not setCONFIG_PATA_CS5536=yCONFIG_PATA_CYPRESS=mCONFIG_PATA_EFAR=y
#CONFIG_ATA_GENERICis not set
#CONFIG_PATA_HPT366is not setCONFIG_PATA_HPT37X=yCONFIG_PATA_HPT3X2N=y
#CONFIG_PATA_HPT3X3is not set
#CONFIG_PATA_ISAPNPis not setCONFIG_PATA_IT821X=mCONFIG_PATA_IT8213=m
#CONFIG_PATA_JMICRONis not set
#CONFIG_PATA_LEGACYis not setCONFIG_PATA_TRIFLEX=mCONFIG_PATA_MARVELL=y
#CONFIG_PATA_MPIIXis not setCONFIG_PATA_OLDPIIX=y
#CONFIG_PATA_NETCELLis not set
#CONFIG_PATA_NINJA32is not setCONFIG_PATA_NS87410=mCONFIG_PATA_NS87415=mCONFIG_PATA_OPTI=mCONFIG_PATA_OPTIDMA=mCONFIG_PATA_PDC_OLD=mCONFIG_PATA_QDI=yCONFIG_PATA_RADISYS=yCONFIG_PATA_RZ1000=mCONFIG_PATA_SC1200=m
#CONFIG_PATA_SERVERWORKSis not setCONFIG_PATA_PDC2027X=yCONFIG_PATA_SIL680=yCONFIG_PATA_SIS=y
#CONFIG_PATA_VIAis not setCONFIG_PATA_WINBOND=y
#CONFIG_PATA_WINBOND_VLBis not set
#CONFIG_PATA_PLATFORMis not setCONFIG_PATA_SCH=yCONFIG_MD=y
#CONFIG_BLK_DEV_MDis not setCONFIG_BLK_DEV_DM=m
#CONFIG_DM_DEBUGis not setCONFIG_DM_CRYPT=mCONFIG_DM_SNAPSHOT=m
#CONFIG_DM_MIRRORis not setCONFIG_DM_ZERO=mCONFIG_DM_MULTIPATH=m
#CONFIG_DM_MULTIPATH_QLis not set
#CONFIG_DM_MULTIPATH_STis not set
#CONFIG_DM_DELAYis not setCONFIG_DM_UEVENT=y
#CONFIG_FUSIONis not set#
# IEEE 1394 (FireWire) support
##
# You can enable one or both FireWire driver stacks. ##
# See the help texts for more information.
#
#CONFIG_FIREWIREis not setCONFIG_IEEE1394=yCONFIG_IEEE1394_OHCI1394=y
#CONFIG_IEEE1394_PCILYNXis not setCONFIG_IEEE1394_SBP2=yCONFIG_IEEE1394_SBP2_PHYS_DMA=y
#CONFIG_IEEE1394_ETH1394_ROM_ENTRYis not set
#CONFIG_IEEE1394_ETH1394is not setCONFIG_IEEE1394_RAWIO=m
#CONFIG_IEEE1394_VIDEO1394is not set
#CONFIG_IEEE1394_DV1394is not setCONFIG_IEEE1394_VERBOSEDEBUG=y
#CONFIG_I2Ois not set
#CONFIG_MACINTOSH_DRIVERSis not setCONFIG_NETDEVICES=y
#CONFIG_IFBis not setCONFIG_DUMMY=yCONFIG_BONDING=mCONFIG_MACVLAN=yCONFIG_EQUALIZER=yCONFIG_TUN=yCONFIG_VETH=y
#CONFIG_NET_SB1000is not setCONFIG_ARCNET=mCONFIG_ARCNET_1201=mCONFIG_ARCNET_1051=mCONFIG_ARCNET_RAW=mCONFIG_ARCNET_CAP=m
#CONFIG_ARCNET_COM90xxis not set
CONFIG_ARCNET_COM90xxIO=mCONFIG_ARCNET_RIM_I=mCONFIG_ARCNET_COM20020=mCONFIG_ARCNET_COM20020_ISA=mCONFIG_ARCNET_COM20020_PCI=mCONFIG_PHYLIB=y#
# MII PHY device drivers
#CONFIG_MARVELL_PHY=yCONFIG_DAVICOM_PHY=yCONFIG_QSEMI_PHY=y
#CONFIG_LXT_PHYis not set
#CONFIG_CICADA_PHYis not setCONFIG_VITESSE_PHY=y
#CONFIG_SMSC_PHYis not set
#CONFIG_BROADCOM_PHYis not set
#CONFIG_ICPLUS_PHYis not setCONFIG_REALTEK_PHY=yCONFIG_NATIONAL_PHY=yCONFIG_STE10XP=y
#CONFIG_LSI_ET1011C_PHYis not set
#CONFIG_FIXED_PHYis not setCONFIG_MDIO_BITBANG=yCONFIG_MDIO_GPIO=yCONFIG_NET_ETHERNET=yCONFIG_MII=y
#CONFIG_HAPPYMEALis not setCONFIG_SUNGEM=mCONFIG_CASSINI=yCONFIG_NET_VENDOR_3COM=y
#CONFIG_EL1is not setCONFIG_EL2=yCONFIG_ELPLUS=yCONFIG_EL16=y
#CONFIG_EL3is not set
#CONFIG_3C515is not setCONFIG_ELMC=m
#CONFIG_ELMC_IIis not setCONFIG_VORTEX=y
#CONFIG_TYPHOONis not set
#CONFIG_LANCEis not setCONFIG_NET_VENDOR_SMC=y
#CONFIG_WD80x3is not setCONFIG_ULTRAMCA=mCONFIG_ULTRA=y
#CONFIG_SMC9194is not setCONFIG_ENC28J60=y
#CONFIG_ENC28J60_WRITEVERIFYis not setCONFIG_ETHOC=mCONFIG_NET_VENDOR_RACAL=yCONFIG_NI52=m
#CONFIG_NI65is not set
#CONFIG_DNETis not setCONFIG_NET_TULIP=yCONFIG_DE2104X=yCONFIG_DE2104X_DSL=0CONFIG_TULIP=yCONFIG_TULIP_MWI=yCONFIG_TULIP_MMIO=yCONFIG_TULIP_NAPI=yCONFIG_TULIP_NAPI_HW_MITIGATION=yCONFIG_DE4X5=y
#CONFIG_WINBOND_840is not setCONFIG_DM9102=m
#CONFIG_ULI526Xis not setCONFIG_PCMCIA_XIRCOM=y
#CONFIG_AT1700is not setCONFIG_DEPCA=m
#CONFIG_HP100is not setCONFIG_NET_ISA=yCONFIG_E2100=m
#CONFIG_EWRK3is not set
#CONFIG_EEXPRESSis not setCONFIG_EEXPRESS_PRO=y
#CONFIG_HPLAN_PLUSis not set
#CONFIG_HPLANis not set
#CONFIG_LP486Eis not setCONFIG_ETH16I=m
#CONFIG_NE2000is not setCONFIG_ZNET=m
#CONFIG_SEEQ8005is not setCONFIG_NE2_MCA=mCONFIG_IBMLANA=m
#CONFIG_IBM_NEW_EMAC_ZMIIis not set
#CONFIG_IBM_NEW_EMAC_RGMIIis not set
#CONFIG_IBM_NEW_EMAC_TAHis not set
#CONFIG_IBM_NEW_EMAC_EMAC4is not set
#CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRLis not set #CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTATis not set #CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERRis not setCONFIG_NET_PCI=yCONFIG_PCNET32=mCONFIG_AMD8111_ETH=mCONFIG_ADAPTEC_STARFIRE=y
#CONFIG_AC3200is not setCONFIG_APRICOT=mCONFIG_B44=yCONFIG_B44_PCI_AUTOSELECT=yCONFIG_B44_PCICORE_AUTOSELECT=yCONFIG_B44_PCI=yCONFIG_FORCEDETH=y
#CONFIG_FORCEDETH_NAPIis not set CONFIG_CS89x0=yCONFIG_E100=yCONFIG_FEALNX=mCONFIG_NATSEMI=yCONFIG_NE2K_PCI=y
#CONFIG_8139CPis not setCONFIG_8139TOO=yCONFIG_8139TOO_PIO=yCONFIG_8139TOO_TUNE_TWISTER=yCONFIG_8139TOO_8129=yCONFIG_8139_OLD_RX_RESET=yCONFIG_R6040=mCONFIG_SIS900=yCONFIG_EPIC100=m
#CONFIG_SMSC9420is not setCONFIG_SUNDANCE=mCONFIG_SUNDANCE_MMIO=y
#CONFIG_TLANis not setCONFIG_KS8842=yCONFIG_KS8851=yCONFIG_VIA_RHINE=m
#CONFIG_VIA_RHINE_MMIOis not set
#CONFIG_SC92031is not setCONFIG_NET_POCKET=y
#CONFIG_ATPis not set
#CONFIG_DE600is not setCONFIG_DE620=yCONFIG_ATL2=yCONFIG_NETDEV_1000=y
#CONFIG_ACENICis not setCONFIG_DL2K=mCONFIG_E1000=mCONFIG_E1000E=yCONFIG_IP1000=mCONFIG_IGB=yCONFIG_IGBVF=mCONFIG_NS83820=y
#CONFIG_HAMACHIis not setCONFIG_YELLOWFIN=m
#CONFIG_R8169is not set
#CONFIG_SIS190is not setCONFIG_SKGE=y
#CONFIG_SKGE_DEBUGis not setCONFIG_SKY2=mCONFIG_SKY2_DEBUG=yCONFIG_VIA_VELOCITY=yCONFIG_TIGON3=y
#CONFIG_BNX2is not set
#CONFIG_CNICis not setCONFIG_QLA3XXX=yCONFIG_ATL1=yCONFIG_ATL1E=yCONFIG_ATL1C=yCONFIG_JME=mCONFIG_NETDEV_10000=yCONFIG_MDIO=yCONFIG_CHELSIO_T1=yCONFIG_CHELSIO_T1_1G=yCONFIG_CHELSIO_T3_DEPENDS=yCONFIG_CHELSIO_T3=m
#CONFIG_ENICis not setCONFIG_IXGBE=m
#CONFIG_IXGBE_DCAis not setCONFIG_IXGB=yCONFIG_S2IO=y
#CONFIG_VXGEis not set
#CONFIG_MYRI10GEis not set
#CONFIG_NETXEN_NICis not set
#CONFIG_NIUis not setCONFIG_MLX4_EN=yCONFIG_MLX4_CORE=yCONFIG_MLX4_DEBUG=yCONFIG_TEHUTI=yCONFIG_BNX2X=y
#CONFIG_QLGEis not set
#CONFIG_SFCis not setCONFIG_BE2NET=yCONFIG_TR=mCONFIG_IBMTR=mCONFIG_IBMOL=m
#CONFIG_IBMLSis not setCONFIG_3C359=mCONFIG_TMS380TR=m
#CONFIG_TMSPCIis not setCONFIG_SKISA=m
#CONFIG_PROTEONis not setCONFIG_ABYSS=mCONFIG_MADGEMC=m
#CONFIG_SMCTRis not set#
# Wireless LAN
#
#CONFIG_WLAN_PRE80211is not setCONFIG_WLAN_80211=yCONFIG_LIBERTAS=mCONFIG_LIBERTAS_USB=m
#CONFIG_LIBERTAS_SDIOis not set
#CONFIG_LIBERTAS_SPIis not set
#CONFIG_LIBERTAS_DEBUGis not setCONFIG_AIRO=yCONFIG_ATMEL=m
#CONFIG_PCI_ATMELis not setCONFIG_PRISM54=mCONFIG_USB_ZD1201=yCONFIG_IPW2100=m
#CONFIG_IPW2100_MONITORis not setCONFIG_IPW2100_DEBUG=yCONFIG_IPW2200=yCONFIG_IPW2200_MONITOR=yCONFIG_IPW2200_RADIOTAP=yCONFIG_IPW2200_PROMISCUOUS=yCONFIG_IPW2200_QOS=yCONFIG_IPW2200_DEBUG=yCONFIG_LIBIPW=yCONFIG_LIBIPW_DEBUG=y
#CONFIG_HOSTAPis not setCONFIG_HERMES=yCONFIG_HERMES_CACHE_FW_ON_INIT=yCONFIG_PLX_HERMES=mCONFIG_TMD_HERMES=mCONFIG_NORTEL_HERMES=yCONFIG_PCI_HERMES=y#
# WiMAX Wireless Broadband devices
#CONFIG_WIMAX_I2400M=m
#CONFIG_WIMAX_I2400M_USBis not setCONFIG_WIMAX_I2400M_SDIO=mCONFIG_WIMAX_I2400M_DEBUG_LEVEL=8#
# USB Network Adapters
#
#CONFIG_USB_CATCis not set
#CONFIG_USB_KAWETHis not set
#CONFIG_USB_PEGASUSis not setCONFIG_USB_RTL8150=yCONFIG_USB_USBNET=y
#CONFIG_USB_NET_AX8817Xis not setCONFIG_USB_NET_CDCETHER=yCONFIG_USB_NET_CDC_EEM=mCONFIG_USB_NET_DM9601=m
#CONFIG_USB_NET_SMSC95XXis not set
#CONFIG_USB_NET_GL620Ais not setCONFIG_USB_NET_NET1080=yCONFIG_USB_NET_PLUSB=y
#CONFIG_USB_NET_MCS7830is not setCONFIG_USB_NET_RNDIS_HOST=mCONFIG_USB_NET_CDC_SUBSET=m
#CONFIG_USB_ALI_M5632is not setCONFIG_USB_AN2720=yCONFIG_USB_BELKIN=y
#CONFIG_USB_ARMLINUXis not setCONFIG_USB_EPSON2888=y
#CONFIG_USB_KC2190is not setCONFIG_USB_NET_ZAURUS=yCONFIG_USB_HSO=mCONFIG_USB_NET_INT51X1=m
#CONFIG_WANis not setCONFIG_ATM_DRIVERS=yCONFIG_ATM_DUMMY=mCONFIG_ATM_TCP=m
#CONFIG_ATM_LANAIis not setCONFIG_ATM_ENI=mCONFIG_ATM_ENI_DEBUG=yCONFIG_ATM_ENI_TUNE_BURST=yCONFIG_ATM_ENI_BURST_TX_16W=y
#CONFIG_ATM_ENI_BURST_TX_8Wis not set
#CONFIG_ATM_ENI_BURST_TX_4Wis not set
#CONFIG_ATM_ENI_BURST_TX_2Wis not set
#CONFIG_ATM_ENI_BURST_RX_16Wis not setCONFIG_ATM_ENI_BURST_RX_8W=yCONFIG_ATM_ENI_BURST_RX_4W=yCONFIG_ATM_ENI_BURST_RX_2W=yCONFIG_ATM_FIRESTREAM=m
#CONFIG_ATM_ZATMis not set
#CONFIG_ATM_NICSTARis not setCONFIG_ATM_IDT77252=m
#CONFIG_ATM_IDT77252_DEBUGis not set
#CONFIG_ATM_IDT77252_RCV_ALLis not setCONFIG_ATM_IDT77252_USE_SUNI=yCONFIG_ATM_AMBASSADOR=mCONFIG_ATM_AMBASSADOR_DEBUG=y
#CONFIG_ATM_HORIZONis not setCONFIG_ATM_IA=mCONFIG_ATM_IA_DEBUG=yCONFIG_ATM_FORE200E=mCONFIG_ATM_FORE200E_USE_TASKLET=yCONFIG_ATM_FORE200E_TX_RETRY=16CONFIG_ATM_FORE200E_DEBUG=0CONFIG_ATM_HE=m
#CONFIG_ATM_HE_USE_SUNIis not setCONFIG_ATM_SOLOS=m
#CONFIG_FDDIis not set
#CONFIG_HIPPIis not set
#CONFIG_PLIPis not set
#CONFIG_PPPis not setCONFIG_SLIP=y
#CONFIG_SLIP_COMPRESSEDis not setCONFIG_SLIP_SMART=yCONFIG_SLIP_MODE_SLIP6=yCONFIG_NET_FC=yCONFIG_NETCONSOLE=y
#CONFIG_NETCONSOLE_DYNAMICis not setCONFIG_NETPOLL=y
#CONFIG_NETPOLL_TRAPis not setCONFIG_NET_POLL_CONTROLLER=yCONFIG_VIRTIO_NET=mCONFIG_ISDN=y
#CONFIG_MISDNis not setCONFIG_ISDN_I4L=m
#CONFIG_ISDN_PPPis not setCONFIG_ISDN_AUDIO=yCONFIG_ISDN_TTY_FAX=y#
# ISDN feature submodules
#
#CONFIG_ISDN_DIVERSIONis not set#
# ISDN4Linux hardware drivers
##
# Passive cards
#CONFIG_ISDN_DRV_HISAX=m#
# D-channel protocol features
#
#CONFIG_HISAX_EUROis not setCONFIG_HISAX_1TR6=yCONFIG_HISAX_NI1=yCONFIG_HISAX_MAX_CARDS=8#
# HiSax supported cards
#CONFIG_HISAX_16_0=yCONFIG_HISAX_16_3=yCONFIG_HISAX_S0BOX=y
#CONFIG_HISAX_AVM_A1is not set
#CONFIG_HISAX_FRITZPCIis not setCONFIG_HISAX_AVM_A1_PCMCIA=yCONFIG_HISAX_ELSA=yCONFIG_HISAX_IX1MICROR2=y
#CONFIG_HISAX_DIEHLDIVAis not setCONFIG_HISAX_ASUSCOM=y
#CONFIG_HISAX_TELEINTis not setCONFIG_HISAX_HFCS=yCONFIG_HISAX_SEDLBAUER=yCONFIG_HISAX_SPORTSTER=yCONFIG_HISAX_MIC=y
#CONFIG_HISAX_NICCYis not setCONFIG_HISAX_ISURF=y
#CONFIG_HISAX_HSTSAPHIRis not setCONFIG_HISAX_GAZEL=y
#CONFIG_HISAX_HFC_SXis not setCONFIG_HISAX_DEBUG=y#
# HiSax PCMCIA card service modules
##
# HiSax sub driver modules
#CONFIG_HISAX_ST5481=m
#CONFIG_HISAX_HFCUSBis not set
#CONFIG_HISAX_HFC4S8Sis not setCONFIG_HISAX_HDLC=y#
# Active cards
#CONFIG_ISDN_DRV_PCBIT=mCONFIG_ISDN_DRV_SC=mCONFIG_ISDN_DRV_ACT2000=mCONFIG_HYSDN=mCONFIG_HYSDN_CAPI=yCONFIG_ISDN_CAPI=yCONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=yCONFIG_CAPI_TRACE=yCONFIG_ISDN_CAPI_MIDDLEWARE=yCONFIG_ISDN_CAPI_CAPI20=mCONFIG_ISDN_CAPI_CAPIFS_BOOL=yCONFIG_ISDN_CAPI_CAPIFS=mCONFIG_ISDN_CAPI_CAPIDRV=m#
# CAPI hardware drivers
#
#CONFIG_CAPI_AVMis not set
#CONFIG_CAPI_EICONis not setCONFIG_ISDN_DRV_GIGASET=m
#CONFIG_GIGASET_BASEis not set
#CONFIG_GIGASET_M105is not setCONFIG_GIGASET_M101=mCONFIG_GIGASET_DEBUG=yCONFIG_PHONE=m
#CONFIG_PHONE_IXJis not set#
# Input device support
#CONFIG_INPUT=yCONFIG_INPUT_FF_MEMLESS=yCONFIG_INPUT_POLLDEV=y#
# Userland interfaces
#CONFIG_INPUT_MOUSEDEV=y
#CONFIG_INPUT_MOUSEDEV_PSAUXis not setCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
#CONFIG_INPUT_JOYDEVis not setCONFIG_INPUT_EVDEV=m
#CONFIG_INPUT_EVBUGis not set#
# Input Device Drivers
#CONFIG_INPUT_KEYBOARD=yCONFIG_KEYBOARD_ATKBD=yCONFIG_KEYBOARD_LKKBD=yCONFIG_KEYBOARD_GPIO=yCONFIG_KEYBOARD_MATRIX=mCONFIG_KEYBOARD_LM8323=m
#CONFIG_KEYBOARD_NEWTONis not setCONFIG_KEYBOARD_STOWAWAY=yCONFIG_KEYBOARD_SUNKBD=m
#CONFIG_KEYBOARD_XTKBDis not setCONFIG_INPUT_MOUSE=yCONFIG_MOUSE_PS2=mCONFIG_MOUSE_PS2_ALPS=yCONFIG_MOUSE_PS2_LOGIPS2PP=y
#CONFIG_MOUSE_PS2_SYNAPTICSis not setCONFIG_MOUSE_PS2_LIFEBOOK=yCONFIG_MOUSE_PS2_TRACKPOINT=y
#CONFIG_MOUSE_PS2_ELANTECHis not setCONFIG_MOUSE_PS2_TOUCHKIT=yCONFIG_MOUSE_PS2_OLPC=yCONFIG_MOUSE_SERIAL=yCONFIG_MOUSE_APPLETOUCH=mCONFIG_MOUSE_BCM5974=m
#CONFIG_MOUSE_INPORTis not setCONFIG_MOUSE_LOGIBM=mCONFIG_MOUSE_PC110PAD=mCONFIG_MOUSE_VSXXXAA=yCONFIG_MOUSE_GPIO=mCONFIG_MOUSE_SYNAPTICS_I2C=yCONFIG_INPUT_JOYSTICK=y
#CONFIG_JOYSTICK_ANALOGis not setCONFIG_JOYSTICK_A3D=mCONFIG_JOYSTICK_ADI=m
#CONFIG_JOYSTICK_COBRAis not setCONFIG_JOYSTICK_GF2K=mCONFIG_JOYSTICK_GRIP=mCONFIG_JOYSTICK_GRIP_MP=m
#CONFIG_JOYSTICK_GUILLEMOTis not setCONFIG_JOYSTICK_INTERACT=yCONFIG_JOYSTICK_SIDEWINDER=mCONFIG_JOYSTICK_TMDC=y
#CONFIG_JOYSTICK_IFORCEis not setCONFIG_JOYSTICK_WARRIOR=yCONFIG_JOYSTICK_MAGELLAN=yCONFIG_JOYSTICK_SPACEORB=yCONFIG_JOYSTICK_SPACEBALL=yCONFIG_JOYSTICK_STINGER=mCONFIG_JOYSTICK_TWIDJOY=y
#CONFIG_JOYSTICK_ZHENHUAis not set
#CONFIG_JOYSTICK_DB9is not set
#CONFIG_JOYSTICK_GAMECONis not setCONFIG_JOYSTICK_TURBOGRAFX=m
#CONFIG_JOYSTICK_JOYDUMPis not setCONFIG_JOYSTICK_XPAD=mCONFIG_JOYSTICK_XPAD_FF=yCONFIG_JOYSTICK_XPAD_LEDS=yCONFIG_JOYSTICK_WALKERA0701=yCONFIG_INPUT_TABLET=y
#CONFIG_TABLET_USB_ACECADis not setCONFIG_TABLET_USB_AIPTEK=mCONFIG_TABLET_USB_GTCO=yCONFIG_TABLET_USB_KBTAB=m
#CONFIG_TABLET_USB_WACOMis not setCONFIG_INPUT_TOUCHSCREEN=yCONFIG_TOUCHSCREEN_ADS7846=mCONFIG_TOUCHSCREEN_AD7877=mCONFIG_TOUCHSCREEN_AD7879_I2C=yCONFIG_TOUCHSCREEN_AD7879=y
#CONFIG_TOUCHSCREEN_EETIis not setCONFIG_TOUCHSCREEN_FUJITSU=mCONFIG_TOUCHSCREEN_GUNZE=y
#CONFIG_TOUCHSCREEN_ELOis not setCONFIG_TOUCHSCREEN_WACOM_W8001=y
#CONFIG_TOUCHSCREEN_MTOUCHis not setCONFIG_TOUCHSCREEN_INEXIO=yCONFIG_TOUCHSCREEN_MK712=mCONFIG_TOUCHSCREEN_HTCPEN=mCONFIG_TOUCHSCREEN_PENMOUNT=mCONFIG_TOUCHSCREEN_TOUCHRIGHT=y
#CONFIG_TOUCHSCREEN_TOUCHWINis not set
#CONFIG_TOUCHSCREEN_USB_COMPOSITEis not setCONFIG_TOUCHSCREEN_TOUCHIT213=yCONFIG_TOUCHSCREEN_TSC2007=yCONFIG_TOUCHSCREEN_W90X900=yCONFIG_INPUT_MISC=y
#CONFIG_INPUT_APANELis not set
#CONFIG_INPUT_WISTRON_BTNSis not setCONFIG_INPUT_ATLAS_BTNS=yCONFIG_INPUT_ATI_REMOTE=yCONFIG_INPUT_ATI_REMOTE2=yCONFIG_INPUT_KEYSPAN_REMOTE=yCONFIG_INPUT_POWERMATE=yCONFIG_INPUT_YEALINK=y
#CONFIG_INPUT_CM109is not setCONFIG_INPUT_TWL4030_PWRBUTTON=yCONFIG_INPUT_UINPUT=yCONFIG_INPUT_PCF50633_PMU=yCONFIG_INPUT_GPIO_ROTARY_ENCODER=m#
# Hardware I/O ports
#CONFIG_SERIO=yCONFIG_SERIO_I8042=yCONFIG_SERIO_SERPORT=y
#CONFIG_SERIO_CT82C710is not setCONFIG_SERIO_PARKBD=mCONFIG_SERIO_PCIPS2=mCONFIG_SERIO_LIBPS2=yCONFIG_SERIO_RAW=yCONFIG_GAMEPORT=yCONFIG_GAMEPORT_NS558=yCONFIG_GAMEPORT_L4=mCONFIG_GAMEPORT_EMU10K1=yCONFIG_GAMEPORT_FM801=m#
# Character devices
#CONFIG_VT=y
#CONFIG_CONSOLE_TRANSLATIONSis not setCONFIG_VT_CONSOLE=yCONFIG_HW_CONSOLE=yCONFIG_VT_HW_CONSOLE_BINDING=yCONFIG_DEVKMEM=yCONFIG_SERIAL_NONSTANDARD=yCONFIG_COMPUTONE=y
#CONFIG_ROCKETPORTis not set
#CONFIG_CYCLADESis not set
#CONFIG_DIGIEPCAis not setCONFIG_MOXA_INTELLIO=y
#CONFIG_MOXA_SMARTIOis not set
#CONFIG_ISIis not setCONFIG_SYNCLINK=yCONFIG_SYNCLINKMP=yCONFIG_SYNCLINK_GT=y
#CONFIG_N_HDLCis not setCONFIG_RISCOM8=mCONFIG_SPECIALIX=m
#CONFIG_SXis not set
#CONFIG_RIOis not set
#CONFIG_STALDRVis not set
#CONFIG_NOZOMIis not set#
# Serial drivers
#CONFIG_SERIAL_8250=yCONFIG_SERIAL_8250_CONSOLE=yCONFIG_FIX_EARLYCON_MEM=yCONFIG_SERIAL_8250_PCI=m
#CONFIG_SERIAL_8250_PNPis not setCONFIG_SERIAL_8250_NR_UARTS=4CONFIG_SERIAL_8250_RUNTIME_UARTS=4CONFIG_SERIAL_8250_EXTENDED=yCONFIG_SERIAL_8250_MANY_PORTS=y
#CONFIG_SERIAL_8250_FOURPORTis not set
#CONFIG_SERIAL_8250_ACCENTis not setCONFIG_SERIAL_8250_BOCA=y
#CONFIG_SERIAL_8250_EXAR_ST16C554is not set
#CONFIG_SERIAL_8250_HUB6is not set
#CONFIG_SERIAL_8250_SHARE_IRQis not setCONFIG_SERIAL_8250_DETECT_IRQ=yCONFIG_SERIAL_8250_RSA=y
#CONFIG_SERIAL_8250_MCAis not set#
# Non-8250 serial port support
#CONFIG_SERIAL_MAX3100=yCONFIG_SERIAL_CORE=yCONFIG_SERIAL_CORE_CONSOLE=yCONFIG_CONSOLE_POLL=yCONFIG_SERIAL_JSM=yCONFIG_UNIX98_PTYS=yCONFIG_DEVPTS_MULTIPLE_INSTANCES=yCONFIG_LEGACY_PTYS=yCONFIG_LEGACY_PTY_COUNT=256CONFIG_PRINTER=m
#CONFIG_LP_CONSOLEis not set
#CONFIG_PPDEVis not setCONFIG_HVC_DRIVER=yCONFIG_VIRTIO_CONSOLE=mCONFIG_IPMI_HANDLER=mCONFIG_IPMI_PANIC_EVENT=yCONFIG_IPMI_PANIC_STRING=yCONFIG_IPMI_DEVICE_INTERFACE=m
#CONFIG_IPMI_SIis not setCONFIG_IPMI_WATCHDOG=m
#CONFIG_IPMI_POWEROFFis not setCONFIG_HW_RANDOM=yCONFIG_HW_RANDOM_TIMERIOMEM=y
#CONFIG_HW_RANDOM_INTELis not setCONFIG_HW_RANDOM_AMD=mCONFIG_HW_RANDOM_GEODE=yCONFIG_HW_RANDOM_VIA=mCONFIG_HW_RANDOM_VIRTIO=m
#CONFIG_NVRAMis not set
#CONFIG_DTLKis not setCONFIG_R3964=mCONFIG_APPLICOM=mCONFIG_SONYPI=yCONFIG_MWAVE=y
CONFIG_PC8736x_GPIO=mCONFIG_NSC_GPIO=yCONFIG_CS5535_GPIO=mCONFIG_RAW_DRIVER=yCONFIG_MAX_RAW_DEVS=256CONFIG_HPET=yCONFIG_HPET_MMAP=yCONFIG_HANGCHECK_TIMER=mCONFIG_TCG_TPM=yCONFIG_TCG_TIS=yCONFIG_TCG_NSC=mCONFIG_TCG_ATMEL=yCONFIG_TCG_INFINEON=y
#CONFIG_TELCLOCKis not setCONFIG_DEVPORT=yCONFIG_I2C=yCONFIG_I2C_BOARDINFO=yCONFIG_I2C_CHARDEV=y
#CONFIG_I2C_HELPER_AUTOis not set#
# I2C Algorithms
#CONFIG_I2C_ALGOBIT=y
#CONFIG_I2C_ALGOPCFis not setCONFIG_I2C_ALGOPCA=y#
# I2C Hardware Bus support
##
# PC SMBus host controller drivers
#CONFIG_I2C_ALI1535=m
#CONFIG_I2C_ALI1563is not setCONFIG_I2C_ALI15X3=mCONFIG_I2C_AMD756=y
#CONFIG_I2C_AMD756_S4882is not set
#CONFIG_I2C_AMD8111is not set
#CONFIG_I2C_I801is not setCONFIG_I2C_ISCH=yCONFIG_I2C_PIIX4=yCONFIG_I2C_NFORCE2=m
#CONFIG_I2C_NFORCE2_S4985is not set
#CONFIG_I2C_SIS5595is not setCONFIG_I2C_SIS630=y
#CONFIG_I2C_SIS96Xis not set
#CONFIG_I2C_VIAis not setCONFIG_I2C_VIAPRO=m#
# I2C system bus drivers (mostly embedded / system-on-chip) #CONFIG_I2C_GPIO=mCONFIG_I2C_OCORES=y
#CONFIG_I2C_SIMTECis not set#
# External I2C/SMBus adapter drivers
#
#CONFIG_I2C_PARPORTis not setCONFIG_I2C_PARPORT_LIGHT=m
#CONFIG_I2C_TAOS_EVMis not setCONFIG_I2C_TINY_USB=y#
# Graphics adapter I2C/DDC channel drivers
#
#CONFIG_I2C_VOODOO3is not set#
# Other I2C/SMBus bus drivers
#CONFIG_I2C_PCA_PLATFORM=yCONFIG_I2C_STUB=m
#CONFIG_SCx200_ACBis not set#
# Miscellaneous I2C Chip support
#CONFIG_DS1682=mCONFIG_SENSORS_PCF8574=yCONFIG_PCF8575=y
#CONFIG_SENSORS_PCA9539is not setCONFIG_SENSORS_TSL2550=m
#CONFIG_I2C_DEBUG_COREis not setCONFIG_I2C_DEBUG_ALGO=y
#CONFIG_I2C_DEBUG_BUSis not setCONFIG_I2C_DEBUG_CHIP=yCONFIG_SPI=y
#CONFIG_SPI_DEBUGis not setCONFIG_SPI_MASTER=y#
# SPI Master Controller Drivers
#CONFIG_SPI_BITBANG=y
#CONFIG_SPI_BUTTERFLYis not setCONFIG_SPI_GPIO=y
#CONFIG_SPI_LM70_LLPis not set#
# SPI Protocol Masters
#
#CONFIG_SPI_SPIDEVis not setCONFIG_SPI_TLE62X0=y#
# PPS support
#CONFIG_PPS=yCONFIG_PPS_DEBUG=yCONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=yCONFIG_GPIOLIB=yCONFIG_DEBUG_GPIO=yCONFIG_GPIO_SYSFS=y#
# Memory mapped GPIO expanders:
##
# I2C GPIO expanders:
#CONFIG_GPIO_MAX732X=m
#CONFIG_GPIO_PCA953Xis not set
#CONFIG_GPIO_PCF857Xis not set
#CONFIG_GPIO_TWL4030is not set#
# PCI GPIO expanders:
#CONFIG_GPIO_BT8XX=m#
# SPI GPIO expanders:
#
#CONFIG_GPIO_MAX7301is not set
#CONFIG_GPIO_MCP23S08is not setCONFIG_W1=y
#CONFIG_W1_CONis not set#
# 1-wire Bus Masters
#CONFIG_W1_MASTER_MATROX=yCONFIG_W1_MASTER_DS2490=y
#CONFIG_W1_MASTER_DS2482is not setCONFIG_W1_MASTER_GPIO=m#
# 1-wire Slaves
#
#CONFIG_W1_SLAVE_THERMis not setCONFIG_W1_SLAVE_SMEM=yCONFIG_W1_SLAVE_DS2431=yCONFIG_W1_SLAVE_DS2433=mCONFIG_W1_SLAVE_DS2433_CRC=yCONFIG_W1_SLAVE_DS2760=y
#CONFIG_W1_SLAVE_BQ27000is not setCONFIG_POWER_SUPPLY=yCONFIG_POWER_SUPPLY_DEBUG=y
#CONFIG_PDA_POWERis not setCONFIG_BATTERY_DS2760=yCONFIG_BATTERY_DS2782=mCONFIG_BATTERY_OLPC=m
CONFIG_BATTERY_BQ27x00=mCONFIG_BATTERY_MAX17040=yCONFIG_CHARGER_PCF50633=y
#CONFIG_HWMONis not setCONFIG_THERMAL=mCONFIG_WATCHDOG=yCONFIG_WATCHDOG_NOWAYOUT=y#
# Watchdog Device Drivers
#CONFIG_SOFT_WATCHDOG=yCONFIG_TWL4030_WATCHDOG=yCONFIG_ACQUIRE_WDT=yCONFIG_ADVANTECH_WDT=m
#CONFIG_ALIM1535_WDTis not set
#CONFIG_ALIM7101_WDTis not set
#CONFIG_SC520_WDTis not set
#CONFIG_IB700_WDTis not set
#CONFIG_IBMASRis not setCONFIG_WAFER_WDT=mCONFIG_I6300ESB_WDT=y
#CONFIG_ITCO_WDTis not setCONFIG_IT8712F_WDT=mCONFIG_IT87_WDT=mCONFIG_HP_WATCHDOG=yCONFIG_SC1200_WDT=mCONFIG_PC87413_WDT=mCONFIG_RDC321X_WDT=yCONFIG_60XX_WDT=m
#CONFIG_SBC8360_WDTis not set
#CONFIG_SBC7240_WDTis not setCONFIG_CPU5_WDT=yCONFIG_SMSC_SCH311X_WDT=yCONFIG_SMSC37B787_WDT=y
#CONFIG_W83627HF_WDTis not set
#CONFIG_W83697HF_WDTis not set
#CONFIG_W83697UG_WDTis not setCONFIG_W83877F_WDT=yCONFIG_W83977F_WDT=mCONFIG_MACHZ_WDT=yCONFIG_SBC_EPX_C3_WATCHDOG=y#
# ISA-based Watchdog Cards
#
#CONFIG_PCWATCHDOGis not setCONFIG_MIXCOMWD=y#
# PCI-based Watchdog Cards
#
#CONFIG_PCIPCWATCHDOGis not set
#CONFIG_WDTPCIis not set#
# USB-based Watchdog Cards
#CONFIG_USBPCWATCHDOG=mCONFIG_SSB_POSSIBLE=y#
# Sonics Silicon Backplane
#CONFIG_SSB=yCONFIG_SSB_SPROM=yCONFIG_SSB_PCIHOST_POSSIBLE=yCONFIG_SSB_PCIHOST=y
#CONFIG_SSB_B43_PCI_BRIDGEis not setCONFIG_SSB_SILENT=yCONFIG_SSB_DRIVER_PCICORE_POSSIBLE=yCONFIG_SSB_DRIVER_PCICORE=y#
# Multifunction device drivers
#CONFIG_MFD_CORE=y
#CONFIG_MFD_SM501is not set
#CONFIG_HTC_PASIC3is not setCONFIG_TPS65010=yCONFIG_TWL4030_CORE=y
#CONFIG_MFD_TMIOis not set
#CONFIG_PMIC_DA903Xis not setCONFIG_MFD_WM8400=y
#CONFIG_MFD_WM8350_I2Cis not setCONFIG_MFD_PCF50633=yCONFIG_PCF50633_ADC=yCONFIG_PCF50633_GPIO=mCONFIG_AB3100_CORE=m
#CONFIG_EZX_PCAPis not setCONFIG_REGULATOR=yCONFIG_REGULATOR_DEBUG=y
#CONFIG_REGULATOR_FIXED_VOLTAGEis not setCONFIG_REGULATOR_VIRTUAL_CONSUMER=yCONFIG_REGULATOR_USERSPACE_CONSUMER=yCONFIG_REGULATOR_BQ24022=yCONFIG_REGULATOR_MAX1586=y
#CONFIG_REGULATOR_TWL4030is not set
#CONFIG_REGULATOR_WM8400is not setCONFIG_REGULATOR_PCF50633=yCONFIG_REGULATOR_LP3971=yCONFIG_MEDIA_SUPPORT=y#
# Multimedia core support
#CONFIG_VIDEO_DEV=yCONFIG_VIDEO_V4L2_COMMON=yCONFIG_VIDEO_ALLOW_V4L1=yCONFIG_VIDEO_V4L1_COMPAT=y
#CONFIG_DVB_COREis not setCONFIG_VIDEO_MEDIA=y#
# Multimedia drivers
#CONFIG_MEDIA_ATTACH=yCONFIG_MEDIA_TUNER=yCONFIG_MEDIA_TUNER_CUSTOMISE=yCONFIG_MEDIA_TUNER_SIMPLE=mCONFIG_MEDIA_TUNER_TDA8290=yCONFIG_MEDIA_TUNER_TDA827X=yCONFIG_MEDIA_TUNER_TDA18271=yCONFIG_MEDIA_TUNER_TDA9887=mCONFIG_MEDIA_TUNER_TEA5761=yCONFIG_MEDIA_TUNER_TEA5767=y
#CONFIG_MEDIA_TUNER_MT20XXis not setCONFIG_MEDIA_TUNER_MT2060=yCONFIG_MEDIA_TUNER_MT2266=mCONFIG_MEDIA_TUNER_MT2131=mCONFIG_MEDIA_TUNER_QT1010=yCONFIG_MEDIA_TUNER_XC2028=mCONFIG_MEDIA_TUNER_XC5000=y
#CONFIG_MEDIA_TUNER_MXL5005Sis not setCONFIG_MEDIA_TUNER_MXL5007T=y
#CONFIG_MEDIA_TUNER_MC44S803is not setCONFIG_VIDEO_V4L2=yCONFIG_VIDEO_V4L1=y
#CONFIG_VIDEO_CAPTURE_DRIVERSis not set
#CONFIG_RADIO_ADAPTERSis not set
#CONFIG_DABis not set#
# Graphics support
#CONFIG_AGP=yCONFIG_AGP_ALI=mCONFIG_AGP_ATI=mCONFIG_AGP_AMD=yCONFIG_AGP_AMD64=mCONFIG_AGP_INTEL=yCONFIG_AGP_NVIDIA=m
#CONFIG_AGP_SISis not set
#CONFIG_AGP_SWORKSis not setCONFIG_AGP_VIA=yCONFIG_AGP_EFFICEON=mCONFIG_DRM=mCONFIG_DRM_TDFX=mCONFIG_DRM_R128=mCONFIG_DRM_RADEON=mCONFIG_DRM_I810=m
#CONFIG_DRM_I830is not set
#CONFIG_DRM_I915is not setCONFIG_DRM_MGA=mCONFIG_DRM_SIS=m
#CONFIG_DRM_VIAis not setCONFIG_DRM_SAVAGE=mCONFIG_VGASTATE=yCONFIG_VIDEO_OUTPUT_CONTROL=mCONFIG_FB=y
#CONFIG_FIRMWARE_EDIDis not setCONFIG_FB_DDC=yCONFIG_FB_BOOT_VESA_SUPPORT=yCONFIG_FB_CFB_FILLRECT=yCONFIG_FB_CFB_COPYAREA=yCONFIG_FB_CFB_IMAGEBLIT=y
#CONFIG_FB_CFB_REV_PIXELS_IN_BYTEis not setCONFIG_FB_SYS_FILLRECT=yCONFIG_FB_SYS_COPYAREA=yCONFIG_FB_SYS_IMAGEBLIT=yCONFIG_FB_FOREIGN_ENDIAN=yCONFIG_FB_BOTH_ENDIAN=y
#CONFIG_FB_BIG_ENDIANis not set
#CONFIG_FB_LITTLE_ENDIANis not setCONFIG_FB_SYS_FOPS=yCONFIG_FB_DEFERRED_IO=yCONFIG_FB_HECUBA=mCONFIG_FB_SVGALIB=y
#CONFIG_FB_MACMODESis not setCONFIG_FB_BACKLIGHT=yCONFIG_FB_MODE_HELPERS=yCONFIG_FB_TILEBLITTING=y#
# Frame buffer hardware drivers
#
#CONFIG_FB_PM2is not setCONFIG_FB_CYBER2000=y
#CONFIG_FB_ARCis not setCONFIG_FB_IMSTT=yCONFIG_FB_UVESA=yCONFIG_FB_N411=mCONFIG_FB_HGA=m
#CONFIG_FB_HGA_ACCELis not set
#CONFIG_FB_S1D13XXXis not setCONFIG_FB_NVIDIA=m
#CONFIG_FB_NVIDIA_I2Cis not setCONFIG_FB_NVIDIA_DEBUG=yCONFIG_FB_NVIDIA_BACKLIGHT=yCONFIG_FB_RIVA=y
#CONFIG_FB_RIVA_I2Cis not setCONFIG_FB_RIVA_DEBUG=yCONFIG_FB_RIVA_BACKLIGHT=yCONFIG_FB_I810=yCONFIG_FB_I810_GTF=yCONFIG_FB_I810_I2C=yCONFIG_FB_LE80578=yCONFIG_FB_CARILLO_RANCH=m
#CONFIG_FB_INTELis not setCONFIG_FB_MATROX=mCONFIG_FB_MATROX_MILLENIUM=y
#CONFIG_FB_MATROX_MYSTIQUEis not set
#CONFIG_FB_MATROX_Gis not set
#CONFIG_FB_MATROX_I2Cis not set
#CONFIG_FB_MATROX_MULTIHEADis not setCONFIG_FB_ATY128=y
#CONFIG_FB_ATY128_BACKLIGHTis not setCONFIG_FB_ATY=yCONFIG_FB_ATY_CT=yCONFIG_FB_ATY_GENERIC_LCD=yCONFIG_FB_ATY_GX=y
#CONFIG_FB_ATY_BACKLIGHTis not setCONFIG_FB_S3=yCONFIG_FB_SAVAGE=yCONFIG_FB_SAVAGE_I2C=yCONFIG_FB_SAVAGE_ACCEL=yCONFIG_FB_SIS=y
#CONFIG_FB_SIS_300is not set
#CONFIG_FB_SIS_315is not set
#CONFIG_FB_VIAis not setCONFIG_FB_NEOMAGIC=yCONFIG_FB_KYRO=yCONFIG_FB_3DFX=yCONFIG_FB_3DFX_ACCEL=yCONFIG_FB_3DFX_I2C=yCONFIG_FB_VOODOO1=y
#CONFIG_FB_VT8623is not set
#CONFIG_FB_TRIDENTis not set
#CONFIG_FB_ARKis not set
#CONFIG_FB_PM3is not set
#CONFIG_FB_CARMINEis not setCONFIG_FB_GEODE=yCONFIG_FB_GEODE_LX=yCONFIG_FB_GEODE_GX=yCONFIG_FB_GEODE_GX1=y
#CONFIG_FB_TMIOis not setCONFIG_FB_METRONOME=mCONFIG_FB_MB862XX=yCONFIG_FB_MB862XX_PCI_GDC=yCONFIG_FB_BROADSHEET=yCONFIG_BACKLIGHT_LCD_SUPPORT=yCONFIG_LCD_CLASS_DEVICE=yCONFIG_LCD_LTV350QV=yCONFIG_LCD_ILI9320=yCONFIG_LCD_TDO24M=mCONFIG_LCD_VGG2432A4=y
#CONFIG_LCD_PLATFORMis not setCONFIG_BACKLIGHT_CLASS_DEVICE=yCONFIG_BACKLIGHT_GENERIC=yCONFIG_BACKLIGHT_PROGEAR=yCONFIG_BACKLIGHT_CARILLO_RANCH=y
#CONFIG_BACKLIGHT_MBP_NVIDIAis not setCONFIG_BACKLIGHT_SAHARA=m#
# Display device support
#CONFIG_DISPLAY_SUPPORT=y#
# Display hardware drivers
##
# Console display driver support
#CONFIG_VGA_CONSOLE=yCONFIG_VGACON_SOFT_SCROLLBACK=yCONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64CONFIG_DUMMY_CONSOLE=yCONFIG_LOGO=yCONFIG_LOGO_LINUX_MONO=yCONFIG_LOGO_LINUX_VGA16=yCONFIG_LOGO_LINUX_CLUT224=yCONFIG_SOUND=y
#CONFIG_SOUND_OSS_COREis not set
#CONFIG_SNDis not set
#CONFIG_SOUND_PRIMEis not setCONFIG_HID_SUPPORT=yCONFIG_HID=y
#CONFIG_HID_DEBUGis not setCONFIG_HIDRAW=y#
# USB Input Devices
#CONFIG_USB_HID=y
#CONFIG_HID_PIDis not setCONFIG_USB_HIDDEV=yCONFIG_USB_MOUSE=y#
# Special HID drivers
#
#CONFIG_HID_A4TECHis not setCONFIG_HID_APPLE=y
#CONFIG_HID_BELKINis not setCONFIG_HID_CHERRY=mCONFIG_HID_CHICONY=mCONFIG_HID_CYPRESS=yCONFIG_HID_DRAGONRISE=yCONFIG_DRAGONRISE_FF=y
#CONFIG_HID_EZKEYis not set
#CONFIG_HID_KYEis not setCONFIG_HID_GYRATION=mCONFIG_HID_KENSINGTON=yCONFIG_HID_LOGITECH=mCONFIG_LOGITECH_FF=yCONFIG_LOGIRUMBLEPAD2_FF=yCONFIG_HID_MICROSOFT=mCONFIG_HID_MONTEREY=yCONFIG_HID_NTRIG=y
#CONFIG_HID_PANTHERLORDis not setCONFIG_HID_PETALYNX=mCONFIG_HID_SAMSUNG=y
#CONFIG_HID_SONYis not set
#CONFIG_HID_SUNPLUSis not setCONFIG_HID_GREENASIA=yCONFIG_GREENASIA_FF=yCONFIG_HID_SMARTJOYPLUS=mCONFIG_SMARTJOYPLUS_FF=yCONFIG_HID_TOPSEED=mCONFIG_HID_THRUSTMASTER=y
#CONFIG_THRUSTMASTER_FFis not setCONFIG_HID_ZEROPLUS=mCONFIG_ZEROPLUS_FF=yCONFIG_USB_SUPPORT=yCONFIG_USB_ARCH_HAS_HCD=yCONFIG_USB_ARCH_HAS_OHCI=yCONFIG_USB_ARCH_HAS_EHCI=yCONFIG_USB=y
#CONFIG_USB_DEBUGis not setCONFIG_USB_ANNOUNCE_NEW_DEVICES=y#
# Miscellaneous USB options
#CONFIG_USB_DEVICEFS=yCONFIG_USB_DEVICE_CLASS=y
#CONFIG_USB_DYNAMIC_MINORSis not setCONFIG_USB_SUSPEND=y
#CONFIG_USB_OTGis not setCONFIG_USB_OTG_WHITELIST=yCONFIG_USB_OTG_BLACKLIST_HUB=yCONFIG_USB_MON=yCONFIG_USB_WUSB=mCONFIG_USB_WUSB_CBAF=mCONFIG_USB_WUSB_CBAF_DEBUG=y#
# USB Host Controller Drivers
#
#CONFIG_USB_C67X00_HCDis not setCONFIG_USB_XHCI_HCD=y
#CONFIG_USB_XHCI_HCD_DEBUGGINGis not setCONFIG_USB_EHCI_HCD=y
#CONFIG_USB_EHCI_ROOT_HUB_TTis not setCONFIG_USB_EHCI_TT_NEWSCHED=yCONFIG_USB_OXU210HP_HCD=yCONFIG_USB_ISP116X_HCD=mCONFIG_USB_ISP1760_HCD=mCONFIG_USB_OHCI_HCD=y
#CONFIG_USB_OHCI_HCD_SSBis not set
#CONFIG_USB_OHCI_BIG_ENDIAN_DESCis not set
#CONFIG_USB_OHCI_BIG_ENDIAN_MMIOis not setCONFIG_USB_OHCI_LITTLE_ENDIAN=yCONFIG_USB_UHCI_HCD=yCONFIG_USB_SL811_HCD=mCONFIG_USB_R8A66597_HCD=y
#CONFIG_USB_WHCI_HCDis not set
#CONFIG_USB_HWA_HCDis not set#
# USB Device Class drivers
#CONFIG_USB_ACM=m
#CONFIG_USB_PRINTERis not setCONFIG_USB_WDM=mCONFIG_USB_TMC=y#
# NOTE:USB_STORAGEdepends on SCSI butBLK_DEV_SDmay ##
# also be needed; see USB_STORAGE Help for more info # # CONFIG_USB_STORAGE is not set CONFIG_USB_LIBUSUAL=y#
# USB Imaging devices
#CONFIG_USB_MDC800=y
#CONFIG_USB_MICROTEKis not set#
# USB port drivers
#CONFIG_USB_USS720=yCONFIG_USB_SERIAL=yCONFIG_USB_SERIAL_CONSOLE=yCONFIG_USB_EZUSB=y
#CONFIG_USB_SERIAL_GENERICis not setCONFIG_USB_SERIAL_AIRCABLE=mCONFIG_USB_SERIAL_ARK3116=mCONFIG_USB_SERIAL_BELKIN=yCONFIG_USB_SERIAL_CH341=yCONFIG_USB_SERIAL_WHITEHEAT=mCONFIG_USB_SERIAL_DIGI_ACCELEPORT=mCONFIG_USB_SERIAL_CP210X=yCONFIG_USB_SERIAL_CYPRESS_M8=mCONFIG_USB_SERIAL_EMPEG=yCONFIG_USB_SERIAL_FTDI_SIO=m
#CONFIG_USB_SERIAL_FUNSOFTis not set
#CONFIG_USB_SERIAL_VISORis not setCONFIG_USB_SERIAL_IPAQ=y
#CONFIG_USB_SERIAL_IRis not setCONFIG_USB_SERIAL_EDGEPORT=yCONFIG_USB_SERIAL_EDGEPORT_TI=yCONFIG_USB_SERIAL_GARMIN=yCONFIG_USB_SERIAL_IPW=y
#CONFIG_USB_SERIAL_IUUis not setCONFIG_USB_SERIAL_KEYSPAN_PDA=yCONFIG_USB_SERIAL_KEYSPAN=yCONFIG_USB_SERIAL_KLSI=y
#CONFIG_USB_SERIAL_KOBIL_SCTis not setCONFIG_USB_SERIAL_MCT_U232=y
#CONFIG_USB_SERIAL_MOS7720is not set
#CONFIG_USB_SERIAL_MOS7840is not set
#CONFIG_USB_SERIAL_MOTOROLAis not setCONFIG_USB_SERIAL_NAVMAN=y
#CONFIG_USB_SERIAL_PL2303is not set
#CONFIG_USB_SERIAL_OTI6858is not set
#CONFIG_USB_SERIAL_QUALCOMMis not setCONFIG_USB_SERIAL_SPCP8X5=mCONFIG_USB_SERIAL_HP4X=mCONFIG_USB_SERIAL_SAFE=mCONFIG_USB_SERIAL_SAFE_PADDED=yCONFIG_USB_SERIAL_SIEMENS_MPI=m
#CONFIG_USB_SERIAL_SIERRAWIRELESSis not setCONFIG_USB_SERIAL_SYMBOL=y
#CONFIG_USB_SERIAL_TIis not setCONFIG_USB_SERIAL_CYBERJACK=yCONFIG_USB_SERIAL_XIRCOM=m
#CONFIG_USB_SERIAL_OPTIONis not setCONFIG_USB_SERIAL_OMNINET=yCONFIG_USB_SERIAL_OPTICON=yCONFIG_USB_SERIAL_DEBUG=m#
# USB Miscellaneous drivers
#CONFIG_USB_EMI62=m
#CONFIG_USB_EMI26is not set
#CONFIG_USB_ADUTUXis not setCONFIG_USB_SEVSEG=yCONFIG_USB_RIO500=yCONFIG_USB_LEGOTOWER=yCONFIG_USB_LCD=y
#CONFIG_USB_BERRY_CHARGEis not set
#CONFIG_USB_LEDis not set
#CONFIG_USB_CYPRESS_CY7C63is not setCONFIG_USB_CYTHERM=mCONFIG_USB_IDMOUSE=y
#CONFIG_USB_FTDI_ELANis not setCONFIG_USB_APPLEDISPLAY=m
#CONFIG_USB_SISUSBVGAis not set
#CONFIG_USB_LDis not setCONFIG_USB_TRANCEVIBRATOR=y
#CONFIG_USB_IOWARRIORis not set
#CONFIG_USB_TESTis not setCONFIG_USB_ISIGHTFW=y
#CONFIG_USB_VSTis not set
#CONFIG_USB_ATMis not set
#CONFIG_USB_GADGETis not set#
# OTG and related infrastructure
#CONFIG_USB_OTG_UTILS=yCONFIG_USB_GPIO_VBUS=mCONFIG_NOP_USB_XCEIV=mCONFIG_UWB=mCONFIG_UWB_HWA=mCONFIG_UWB_WHCI=mCONFIG_UWB_WLP=mCONFIG_UWB_I1480U=m
#CONFIG_UWB_I1480U_WLPis not setCONFIG_MMC=yCONFIG_MMC_DEBUG=y
#CONFIG_MMC_UNSAFE_RESUMEis not set#
# MMC/SD/SDIO Card Drivers
#CONFIG_MMC_BLOCK=yCONFIG_MMC_BLOCK_BOUNCE=yCONFIG_SDIO_UART=yCONFIG_MMC_TEST=y#
# MMC/SD/SDIO Host Controller Drivers
#
#CONFIG_MMC_SDHCIis not set
#CONFIG_MMC_WBSDis not set
#CONFIG_MMC_TIFM_SDis not setCONFIG_MMC_CB710=yCONFIG_MMC_VIA_SDMMC=y
#CONFIG_MEMSTICKis not setCONFIG_NEW_LEDS=yCONFIG_LEDS_CLASS=m#
# LED drivers
#CONFIG_LEDS_ALIX2=mCONFIG_LEDS_PCA9532=mCONFIG_LEDS_GPIO=m
#CONFIG_LEDS_GPIO_PLATFORMis not set
#CONFIG_LEDS_LP3944is not setCONFIG_LEDS_PCA955X=m
#CONFIG_LEDS_DAC124S085is not setCONFIG_LEDS_BD2802=m#
# LED Triggers
#CONFIG_LEDS_TRIGGERS=yCONFIG_LEDS_TRIGGER_TIMER=m
#CONFIG_LEDS_TRIGGER_HEARTBEATis not setCONFIG_LEDS_TRIGGER_BACKLIGHT=yCONFIG_LEDS_TRIGGER_GPIO=mCONFIG_LEDS_TRIGGER_DEFAULT_ON=m#
# iptables trigger is under Netfilter config (LED target) # CONFIG_ACCESSIBILITY=y # CONFIG_A11Y_BRAILLE_CONSOLE is not set CONFIG_INFINIBAND=y CONFIG_INFINIBAND_USER_MAD=m CONFIG_INFINIBAND_USER_ACCESS=y CONFIG_INFINIBAND_USER_MEM=y CONFIG_INFINIBAND_MTHCA=m # CONFIG_INFINIBAND_MTHCA_DEBUG is not set CONFIG_INFINIBAND_AMSO1100=m CONFIG_INFINIBAND_AMSO1100_DEBUG=y # CONFIG_INFINIBAND_CXGB3 is not set CONFIG_MLX4_INFINIBAND=m CONFIG_INFINIBAND_NES=m CONFIG_INFINIBAND_NES_DEBUG=y # CONFIG_INFINIBAND_IPOIB is not set # CONFIG_INFINIBAND_SRP is not set CONFIG_EDAC=y#
# Reporting subsystems
#
#CONFIG_EDAC_DEBUGis not setCONFIG_EDAC_MM_EDAC=mCONFIG_EDAC_AMD76X=m
#CONFIG_EDAC_E7XXXis not set
#CONFIG_EDAC_E752Xis not setCONFIG_EDAC_I82875P=mCONFIG_EDAC_I82975X=m
#CONFIG_EDAC_I3000is not setCONFIG_EDAC_X38=m
#CONFIG_EDAC_I5400is not setCONFIG_EDAC_I82860=m
#CONFIG_EDAC_R82600is not set
#CONFIG_EDAC_I5000is not setCONFIG_EDAC_I5100=mCONFIG_RTC_LIB=yCONFIG_RTC_CLASS=yCONFIG_RTC_HCTOSYS=yCONFIG_RTC_HCTOSYS_DEVICE="rtc0"
#CONFIG_RTC_DEBUGis not set#
# RTC interfaces
#CONFIG_RTC_INTF_SYSFS=y
#CONFIG_RTC_INTF_PROCis not setCONFIG_RTC_INTF_DEV=y
#CONFIG_RTC_INTF_DEV_UIE_EMULis not setCONFIG_RTC_DRV_TEST=m#
# I2C RTC drivers
#CONFIG_RTC_DRV_DS1307=yCONFIG_RTC_DRV_DS1374=m
#CONFIG_RTC_DRV_DS1672is not set
#CONFIG_RTC_DRV_MAX6900is not setCONFIG_RTC_DRV_RS5C372=mCONFIG_RTC_DRV_ISL1208=yCONFIG_RTC_DRV_X1205=yCONFIG_RTC_DRV_PCF8563=mCONFIG_RTC_DRV_PCF8583=yCONFIG_RTC_DRV_M41T80=yCONFIG_RTC_DRV_M41T80_WDT=y
#CONFIG_RTC_DRV_TWL4030is not set
#CONFIG_RTC_DRV_S35390Ais not set
#CONFIG_RTC_DRV_FM3130is not setCONFIG_RTC_DRV_RX8581=mCONFIG_RTC_DRV_RX8025=m#
# SPI RTC drivers
#CONFIG_RTC_DRV_M41T94=yCONFIG_RTC_DRV_DS1305=y
#CONFIG_RTC_DRV_DS1390is not setCONFIG_RTC_DRV_MAX6902=mCONFIG_RTC_DRV_R9701=yCONFIG_RTC_DRV_RS5C348=y
#CONFIG_RTC_DRV_DS3234is not set#
# Platform RTC drivers
#CONFIG_RTC_DRV_CMOS=mCONFIG_RTC_DRV_DS1286=yCONFIG_RTC_DRV_DS1511=y
#CONFIG_RTC_DRV_DS1553is not setCONFIG_RTC_DRV_DS1742=mCONFIG_RTC_DRV_STK17TA8=yCONFIG_RTC_DRV_M48T86=m
#CONFIG_RTC_DRV_M48T35is not set
#CONFIG_RTC_DRV_M48T59is not setCONFIG_RTC_DRV_BQ4802=m
#CONFIG_RTC_DRV_V3020is not set
#CONFIG_RTC_DRV_PCF50633is not set#
# on-CPU RTC drivers
#CONFIG_DMADEVICES=y#
# DMA Devices
#CONFIG_INTEL_IOATDMA=mCONFIG_DMA_ENGINE=y#
# DMA Clients
#CONFIG_NET_DMA=y
#CONFIG_DMATESTis not setCONFIG_DCA=mCONFIG_AUXDISPLAY=yCONFIG_KS0108=yCONFIG_KS0108_PORT=0x378CONFIG_KS0108_DELAY=2
#CONFIG_CFAG12864Bis not setCONFIG_UIO=mCONFIG_UIO_CIF=mCONFIG_UIO_PDRV=mCONFIG_UIO_PDRV_GENIRQ=m
#CONFIG_UIO_SMXis not setCONFIG_UIO_AEC=m
#CONFIG_UIO_SERCOS3is not set#
# TI VLYNQ
#
#CONFIG_STAGINGis not set
#CONFIG_X86_PLATFORM_DEVICESis not set#
# Firmware Drivers
#
#CONFIG_EDDis not set
#CONFIG_FIRMWARE_MEMMAPis not setCONFIG_DELL_RBU=m
#CONFIG_DCDBASis not set
#CONFIG_ISCSI_IBFT_FINDis not set#
# File systems
#
#CONFIG_EXT2_FSis not setCONFIG_EXT3_FS=yCONFIG_EXT3_DEFAULTS_TO_ORDERED=yCONFIG_EXT3_FS_XATTR=yCONFIG_EXT3_FS_POSIX_ACL=yCONFIG_EXT3_FS_SECURITY=yCONFIG_EXT4_FS=y
#CONFIG_EXT4DEV_COMPATis not setCONFIG_EXT4_FS_XATTR=yCONFIG_EXT4_FS_POSIX_ACL=yCONFIG_EXT4_FS_SECURITY=yCONFIG_JBD=y
#CONFIG_JBD_DEBUGis not setCONFIG_JBD2=yCONFIG_JBD2_DEBUG=yCONFIG_FS_MBCACHE=yCONFIG_REISERFS_FS=yCONFIG_REISERFS_CHECK=y
#CONFIG_REISERFS_PROC_INFOis not setCONFIG_REISERFS_FS_XATTR=yCONFIG_REISERFS_FS_POSIX_ACL=yCONFIG_REISERFS_FS_SECURITY=yCONFIG_JFS_FS=yCONFIG_JFS_POSIX_ACL=yCONFIG_JFS_SECURITY=y
#CONFIG_JFS_DEBUGis not set
#CONFIG_JFS_STATISTICSis not setCONFIG_FS_POSIX_ACL=y
#CONFIG_XFS_FSis not setCONFIG_GFS2_FS=y
#CONFIG_GFS2_FS_LOCKING_DLMis not set
#CONFIG_OCFS2_FSis not setCONFIG_BTRFS_FS=y
#CONFIG_BTRFS_FS_POSIX_ACLis not setCONFIG_FILE_LOCKING=yCONFIG_FSNOTIFY=yCONFIG_DNOTIFY=y
#CONFIG_INOTIFYis not setCONFIG_INOTIFY_USER=yCONFIG_QUOTA=yCONFIG_QUOTA_NETLINK_INTERFACE=y
#CONFIG_PRINT_QUOTA_WARNINGis not setCONFIG_QUOTA_TREE=y
#CONFIG_QFMT_V1is not setCONFIG_QFMT_V2=yCONFIG_QUOTACTL=yCONFIG_AUTOFS_FS=yCONFIG_AUTOFS4_FS=mCONFIG_FUSE_FS=y
#CONFIG_CUSEis not set#
# Caches
#CONFIG_FSCACHE=yCONFIG_FSCACHE_STATS=y
#CONFIG_FSCACHE_HISTOGRAMis not setCONFIG_FSCACHE_DEBUG=yCONFIG_CACHEFILES=yCONFIG_CACHEFILES_DEBUG=yCONFIG_CACHEFILES_HISTOGRAM=y#
# CD-ROM/DVD Filesystems
#CONFIG_ISO9660_FS=y
#CONFIG_JOLIETis not setCONFIG_ZISOFS=yCONFIG_UDF_FS=yCONFIG_UDF_NLS=y#
# DOS/FAT/NT Filesystems
#CONFIG_FAT_FS=yCONFIG_MSDOS_FS=yCONFIG_VFAT_FS=mCONFIG_FAT_DEFAULT_CODEPAGE=437CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"CONFIG_NTFS_FS=mCONFIG_NTFS_DEBUG=y
#CONFIG_NTFS_RWis not set#
# Pseudo filesystems
#CONFIG_PROC_FS=yCONFIG_PROC_KCORE=yCONFIG_PROC_VMCORE=yCONFIG_PROC_SYSCTL=y
#CONFIG_PROC_PAGE_MONITORis not setCONFIG_SYSFS=yCONFIG_TMPFS=y
#CONFIG_TMPFS_POSIX_ACLis not setCONFIG_HUGETLBFS=yCONFIG_HUGETLB_PAGE=y
#CONFIG_CONFIGFS_FSis not setCONFIG_MISC_FILESYSTEMS=yCONFIG_ADFS_FS=mCONFIG_ADFS_FS_RW=yCONFIG_AFFS_FS=yCONFIG_ECRYPT_FS=yCONFIG_HFS_FS=mCONFIG_HFSPLUS_FS=m
#CONFIG_BEFS_FSis not setCONFIG_BFS_FS=mCONFIG_EFS_FS=mCONFIG_CRAMFS=m
#CONFIG_SQUASHFSis not setCONFIG_VXFS_FS=mCONFIG_MINIX_FS=mCONFIG_OMFS_FS=yCONFIG_HPFS_FS=mCONFIG_QNX4FS_FS=yCONFIG_ROMFS_FS=mCONFIG_ROMFS_BACKED_BY_BLOCK=y
#CONFIG_ROMFS_BACKED_BY_MTDis not set
#CONFIG_ROMFS_BACKED_BY_BOTHis not setCONFIG_ROMFS_ON_BLOCK=yCONFIG_SYSV_FS=yCONFIG_UFS_FS=yCONFIG_UFS_FS_WRITE=yCONFIG_UFS_DEBUG=yCONFIG_EXOFS_FS=mCONFIG_EXOFS_DEBUG=yCONFIG_NILFS2_FS=yCONFIG_NETWORK_FILESYSTEMS=yCONFIG_NFS_FS=m
#CONFIG_NFS_V3is not setCONFIG_NFS_V4=y
#CONFIG_NFS_V4_1is not setCONFIG_NFS_FSCACHE=yCONFIG_NFSD=yCONFIG_NFSD_V2_ACL=yCONFIG_NFSD_V3=yCONFIG_NFSD_V3_ACL=yCONFIG_NFSD_V4=yCONFIG_LOCKD=yCONFIG_LOCKD_V4=yCONFIG_EXPORTFS=yCONFIG_NFS_ACL_SUPPORT=yCONFIG_NFS_COMMON=yCONFIG_SUNRPC=yCONFIG_SUNRPC_GSS=yCONFIG_RPCSEC_GSS_KRB5=yCONFIG_RPCSEC_GSS_SPKM3=yCONFIG_SMB_FS=y
#CONFIG_SMB_NLS_DEFAULTis not setCONFIG_CIFS=mCONFIG_CIFS_STATS=yCONFIG_CIFS_STATS2=y
#CONFIG_CIFS_WEAK_PW_HASHis not setCONFIG_CIFS_UPCALL=y
#CONFIG_CIFS_XATTRis not setCONFIG_CIFS_DEBUG2=yCONFIG_CIFS_DFS_UPCALL=yCONFIG_CIFS_EXPERIMENTAL=yCONFIG_NCP_FS=yCONFIG_NCPFS_PACKET_SIGNING=yCONFIG_NCPFS_IOCTL_LOCKING=yCONFIG_NCPFS_STRONG=yCONFIG_NCPFS_NFS_NS=yCONFIG_NCPFS_OS2_NS=yCONFIG_NCPFS_SMALLDOS=yCONFIG_NCPFS_NLS=y
#CONFIG_NCPFS_EXTRASis not setCONFIG_CODA_FS=mCONFIG_AFS_FS=y
#CONFIG_AFS_DEBUGis not setCONFIG_AFS_FSCACHE=y#
# Partition Types
#CONFIG_PARTITION_ADVANCED=yCONFIG_ACORN_PARTITION=y
#CONFIG_ACORN_PARTITION_CUMANAis not setCONFIG_ACORN_PARTITION_EESOX=y
#CONFIG_ACORN_PARTITION_ICSis not set
#CONFIG_ACORN_PARTITION_ADFSis not set
#CONFIG_ACORN_PARTITION_POWERTECis not set
#CONFIG_ACORN_PARTITION_RISCIXis not setCONFIG_OSF_PARTITION=yCONFIG_AMIGA_PARTITION=y
#CONFIG_ATARI_PARTITIONis not set
#CONFIG_MAC_PARTITIONis not setCONFIG_MSDOS_PARTITION=yCONFIG_BSD_DISKLABEL=yCONFIG_MINIX_SUBPARTITION=yCONFIG_SOLARIS_X86_PARTITION=yCONFIG_UNIXWARE_DISKLABEL=yCONFIG_LDM_PARTITION=y
#CONFIG_LDM_DEBUGis not setCONFIG_SGI_PARTITION=y
#CONFIG_ULTRIX_PARTITIONis not set
#CONFIG_SUN_PARTITIONis not setCONFIG_KARMA_PARTITION=y
#CONFIG_EFI_PARTITIONis not setCONFIG_SYSV68_PARTITION=yCONFIG_NLS=yCONFIG_NLS_DEFAULT="iso8859-1"CONFIG_NLS_CODEPAGE_437=yCONFIG_NLS_CODEPAGE_737=yCONFIG_NLS_CODEPAGE_775=mCONFIG_NLS_CODEPAGE_850=y
#CONFIG_NLS_CODEPAGE_852is not setCONFIG_NLS_CODEPAGE_855=yCONFIG_NLS_CODEPAGE_857=mCONFIG_NLS_CODEPAGE_860=yCONFIG_NLS_CODEPAGE_861=yCONFIG_NLS_CODEPAGE_862=mCONFIG_NLS_CODEPAGE_863=m
#CONFIG_NLS_CODEPAGE_864is not setCONFIG_NLS_CODEPAGE_865=yCONFIG_NLS_CODEPAGE_866=yCONFIG_NLS_CODEPAGE_869=yCONFIG_NLS_CODEPAGE_936=mCONFIG_NLS_CODEPAGE_950=mCONFIG_NLS_CODEPAGE_932=m
#CONFIG_NLS_CODEPAGE_949is not setCONFIG_NLS_CODEPAGE_874=y
#CONFIG_NLS_ISO8859_8is not set
#CONFIG_NLS_CODEPAGE_1250is not setCONFIG_NLS_CODEPAGE_1251=mCONFIG_NLS_ASCII=mCONFIG_NLS_ISO8859_1=yCONFIG_NLS_ISO8859_2=yCONFIG_NLS_ISO8859_3=mCONFIG_NLS_ISO8859_4=yCONFIG_NLS_ISO8859_5=yCONFIG_NLS_ISO8859_6=y
#CONFIG_NLS_ISO8859_7is not setCONFIG_NLS_ISO8859_9=y
#CONFIG_NLS_ISO8859_13is not set
#CONFIG_NLS_ISO8859_14is not setCONFIG_NLS_ISO8859_15=m
#CONFIG_NLS_KOI8_Ris not set
#CONFIG_NLS_KOI8_Uis not setCONFIG_NLS_UTF8=m
#CONFIG_DLMis not set#
# Kernel hacking
#CONFIG_TRACE_IRQFLAGS_SUPPORT=yCONFIG_PRINTK_TIME=y
#CONFIG_ENABLE_WARN_DEPRECATEDis not setCONFIG_ENABLE_MUST_CHECK=yCONFIG_FRAME_WARN=1024CONFIG_MAGIC_SYSRQ=y
#CONFIG_UNUSED_SYMBOLSis not setCONFIG_DEBUG_FS=yCONFIG_HEADERS_CHECK=yCONFIG_DEBUG_KERNEL=y
#CONFIG_DEBUG_SHIRQis not setCONFIG_DETECT_SOFTLOCKUP=yCONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=yCONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1CONFIG_DETECT_HUNG_TASK=yCONFIG_BOOTPARAM_HUNG_TASK_PANIC=yCONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=1CONFIG_SCHED_DEBUG=yCONFIG_SCHEDSTATS=y
#CONFIG_TIMER_STATSis not setCONFIG_DEBUG_OBJECTS=yCONFIG_DEBUG_OBJECTS_SELFTEST=yCONFIG_DEBUG_OBJECTS_FREE=yCONFIG_DEBUG_OBJECTS_TIMERS=yCONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
#CONFIG_SLUB_DEBUG_ONis not setCONFIG_SLUB_STATS=yCONFIG_DEBUG_KMEMLEAK=yCONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=400
#CONFIG_DEBUG_KMEMLEAK_TESTis not setCONFIG_DEBUG_RT_MUTEXES=yCONFIG_DEBUG_PI_LIST=yCONFIG_RT_MUTEX_TESTER=yCONFIG_DEBUG_SPINLOCK=yCONFIG_DEBUG_MUTEXES=yCONFIG_DEBUG_LOCK_ALLOC=yCONFIG_PROVE_LOCKING=yCONFIG_LOCKDEP=y
#CONFIG_LOCK_STATis not setCONFIG_DEBUG_LOCKDEP=yCONFIG_TRACE_IRQFLAGS=y
#CONFIG_DEBUG_SPINLOCK_SLEEPis not set
#CONFIG_DEBUG_LOCKING_API_SELFTESTSis not setCONFIG_STACKTRACE=yCONFIG_DEBUG_HIGHMEM=y
#CONFIG_DEBUG_VMis not set
#CONFIG_DEBUG_VIRTUALis not setCONFIG_DEBUG_WRITECOUNT=y
#CONFIG_DEBUG_MEMORY_INITis not setCONFIG_DEBUG_LIST=yCONFIG_DEBUG_SG=yCONFIG_DEBUG_NOTIFIERS=yCONFIG_ARCH_WANT_FRAME_POINTERS=yCONFIG_FRAME_POINTER=yCONFIG_BOOT_PRINTK_DELAY=yCONFIG_RCU_TORTURE_TEST=y
#CONFIG_RCU_TORTURE_TEST_RUNNABLEis not set
#CONFIG_RCU_CPU_STALL_DETECTORis not setCONFIG_BACKTRACE_SELF_TEST=m
#CONFIG_DEBUG_BLOCK_EXT_DEVTis not setCONFIG_FAULT_INJECTION=yCONFIG_FAILSLAB=y
#CONFIG_FAIL_PAGE_ALLOCis not setCONFIG_FAIL_MAKE_REQUEST=yCONFIG_FAIL_IO_TIMEOUT=y
#CONFIG_FAULT_INJECTION_DEBUG_FSis not setCONFIG_LATENCYTOP=yCONFIG_SYSCTL_SYSCALL_CHECK=yCONFIG_DEBUG_PAGEALLOC=yCONFIG_USER_STACKTRACE_SUPPORT=yCONFIG_NOP_TRACER=yCONFIG_HAVE_FTRACE_NMI_ENTER=yCONFIG_HAVE_FUNCTION_TRACER=yCONFIG_HAVE_FUNCTION_GRAPH_TRACER=yCONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=yCONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=yCONFIG_HAVE_DYNAMIC_FTRACE=yCONFIG_HAVE_FTRACE_MCOUNT_RECORD=yCONFIG_HAVE_FTRACE_SYSCALLS=yCONFIG_RING_BUFFER=yCONFIG_FTRACE_NMI_ENTER=yCONFIG_EVENT_TRACING=yCONFIG_CONTEXT_SWITCH_TRACER=yCONFIG_TRACING=yCONFIG_GENERIC_TRACER=yCONFIG_TRACING_SUPPORT=yCONFIG_FTRACE=yCONFIG_FUNCTION_TRACER=y
#CONFIG_IRQSOFF_TRACERis not setCONFIG_SYSPROF_TRACER=y
#CONFIG_SCHED_TRACERis not setCONFIG_FTRACE_SYSCALLS=yCONFIG_BOOT_TRACER=yCONFIG_BRANCH_PROFILE_NONE=y
#CONFIG_PROFILE_ANNOTATED_BRANCHESis not set
#CONFIG_PROFILE_ALL_BRANCHESis not setCONFIG_POWER_TRACER=yCONFIG_STACK_TRACER=yCONFIG_KMEMTRACE=y
#CONFIG_WORKQUEUE_TRACERis not setCONFIG_BLK_DEV_IO_TRACE=yCONFIG_DYNAMIC_FTRACE=yCONFIG_FUNCTION_PROFILER=yCONFIG_FTRACE_MCOUNT_RECORD=yCONFIG_FTRACE_SELFTEST=yCONFIG_FTRACE_STARTUP_TEST=yCONFIG_MMIOTRACE=yCONFIG_MMIOTRACE_TEST=m
#CONFIG_RING_BUFFER_BENCHMARKis not setCONFIG_PROVIDE_OHCI1394_DMA_INIT=yCONFIG_BUILD_DOCSRC=yCONFIG_DYNAMIC_DEBUG=yCONFIG_DMA_API_DEBUG=y
#CONFIG_SAMPLESis not setCONFIG_HAVE_ARCH_KGDB=yCONFIG_KGDB=yCONFIG_KGDB_SERIAL_CONSOLE=m
#CONFIG_KGDB_TESTSis not setCONFIG_HAVE_ARCH_KMEMCHECK=yCONFIG_STRICT_DEVMEM=yCONFIG_X86_VERBOSE_BOOTUP=yCONFIG_EARLY_PRINTK=yCONFIG_EARLY_PRINTK_DBGP=yCONFIG_DEBUG_STACKOVERFLOW=yCONFIG_DEBUG_STACK_USAGE=yCONFIG_DEBUG_PER_CPU_MAPS=y
#CONFIG_X86_PTDUMPis not setCONFIG_DEBUG_RODATA=y
#CONFIG_DEBUG_RODATA_TESTis not setCONFIG_DEBUG_NX_TEST=mCONFIG_4KSTACKS=y
#CONFIG_DOUBLEFAULTis not setCONFIG_IOMMU_STRESS=yCONFIG_HAVE_MMIOTRACE_SUPPORT=yCONFIG_IO_DELAY_TYPE_0X80=0CONFIG_IO_DELAY_TYPE_0XED=1CONFIG_IO_DELAY_TYPE_UDELAY=2CONFIG_IO_DELAY_TYPE_NONE=3
#CONFIG_IO_DELAY_0X80is not setCONFIG_IO_DELAY_0XED=y
#CONFIG_IO_DELAY_UDELAYis not set
#CONFIG_IO_DELAY_NONEis not setCONFIG_DEFAULT_IO_DELAY_TYPE=1CONFIG_DEBUG_BOOT_PARAMS=yCONFIG_CPA_DEBUG=yCONFIG_OPTIMIZE_INLINING=y#
# Security options
#CONFIG_KEYS=yCONFIG_KEYS_DEBUG_PROC_KEYS=yCONFIG_SECURITY=yCONFIG_SECURITYFS=yCONFIG_SECURITY_NETWORK=y
#CONFIG_SECURITY_NETWORK_XFRMis not setCONFIG_SECURITY_PATH=y
#CONFIG_SECURITY_FILE_CAPABILITIESis not set
#CONFIG_SECURITY_SMACKis not setCONFIG_SECURITY_TOMOYO=yCONFIG_IMA=yCONFIG_IMA_MEASURE_PCR_IDX=10CONFIG_IMA_AUDIT=yCONFIG_CRYPTO=y#
# Crypto core or helper
#CONFIG_CRYPTO_FIPS=yCONFIG_CRYPTO_ALGAPI=yCONFIG_CRYPTO_ALGAPI2=yCONFIG_CRYPTO_AEAD=yCONFIG_CRYPTO_AEAD2=yCONFIG_CRYPTO_BLKCIPHER=yCONFIG_CRYPTO_BLKCIPHER2=yCONFIG_CRYPTO_HASH=yCONFIG_CRYPTO_HASH2=yCONFIG_CRYPTO_RNG=yCONFIG_CRYPTO_RNG2=yCONFIG_CRYPTO_PCOMP=yCONFIG_CRYPTO_MANAGER=yCONFIG_CRYPTO_MANAGER2=yCONFIG_CRYPTO_GF128MUL=yCONFIG_CRYPTO_NULL=mCONFIG_CRYPTO_WORKQUEUE=yCONFIG_CRYPTO_CRYPTD=yCONFIG_CRYPTO_AUTHENC=yCONFIG_CRYPTO_TEST=m#
# Authenticated Encryption with Associated Data
#CONFIG_CRYPTO_CCM=yCONFIG_CRYPTO_GCM=mCONFIG_CRYPTO_SEQIV=y#
# Block modes
#CONFIG_CRYPTO_CBC=yCONFIG_CRYPTO_CTR=yCONFIG_CRYPTO_CTS=mCONFIG_CRYPTO_ECB=yCONFIG_CRYPTO_LRW=m
#CONFIG_CRYPTO_PCBCis not setCONFIG_CRYPTO_XTS=m#
# Hash modes
#CONFIG_CRYPTO_HMAC=yCONFIG_CRYPTO_XCBC=m#
# Digest
#CONFIG_CRYPTO_CRC32C=yCONFIG_CRYPTO_CRC32C_INTEL=yCONFIG_CRYPTO_MD4=mCONFIG_CRYPTO_MD5=yCONFIG_CRYPTO_MICHAEL_MIC=y
#CONFIG_CRYPTO_RMD128is not setCONFIG_CRYPTO_RMD160=y
#CONFIG_CRYPTO_RMD256is not set
#CONFIG_CRYPTO_RMD320is not setCONFIG_CRYPTO_SHA1=yCONFIG_CRYPTO_SHA256=mCONFIG_CRYPTO_SHA512=m
#CONFIG_CRYPTO_TGR192is not setCONFIG_CRYPTO_WP512=y#
# Ciphers
#CONFIG_CRYPTO_AES=yCONFIG_CRYPTO_AES_586=mCONFIG_CRYPTO_ANUBIS=yCONFIG_CRYPTO_ARC4=y
#CONFIG_CRYPTO_BLOWFISHis not setCONFIG_CRYPTO_CAMELLIA=yCONFIG_CRYPTO_CAST5=yCONFIG_CRYPTO_CAST6=mCONFIG_CRYPTO_DES=yCONFIG_CRYPTO_FCRYPT=mCONFIG_CRYPTO_KHAZAD=y
#CONFIG_CRYPTO_SALSA20is not setCONFIG_CRYPTO_SALSA20_586=y
#CONFIG_CRYPTO_SEEDis not set
#CONFIG_CRYPTO_SERPENTis not setCONFIG_CRYPTO_TEA=mCONFIG_CRYPTO_TWOFISH=mCONFIG_CRYPTO_TWOFISH_COMMON=m
#CONFIG_CRYPTO_TWOFISH_586is not set#
# Compression
#CONFIG_CRYPTO_DEFLATE=yCONFIG_CRYPTO_ZLIB=y
#CONFIG_CRYPTO_LZOis not set#
# Random Number Generation
#CONFIG_CRYPTO_ANSI_CPRNG=m
#CONFIG_CRYPTO_HWis not setCONFIG_HAVE_KVM=yCONFIG_HAVE_KVM_IRQCHIP=yCONFIG_VIRTUALIZATION=yCONFIG_KVM=y
#CONFIG_KVM_INTELis not setCONFIG_KVM_AMD=mCONFIG_KVM_TRACE=y
#CONFIG_LGUESTis not setCONFIG_VIRTIO=mCONFIG_VIRTIO_RING=mCONFIG_VIRTIO_PCI=mCONFIG_VIRTIO_BALLOON=mCONFIG_BINARY_PRINTF=y#
# Library routines
#CONFIG_BITREVERSE=yCONFIG_GENERIC_FIND_FIRST_BIT=yCONFIG_GENERIC_FIND_NEXT_BIT=yCONFIG_GENERIC_FIND_LAST_BIT=yCONFIG_CRC_CCITT=yCONFIG_CRC16=yCONFIG_CRC_T10DIF=mCONFIG_CRC_ITU_T=yCONFIG_CRC32=yCONFIG_CRC7=yCONFIG_LIBCRC32C=yCONFIG_ZLIB_INFLATE=yCONFIG_ZLIB_DEFLATE=yCONFIG_HAS_IOMEM=yCONFIG_HAS_IOPORT=yCONFIG_HAS_DMA=yCONFIG_CHECK_SIGNATURE=y
#CONFIG_CPUMASK_OFFSTACKis not setCONFIG_NLATTR=yCONFIG_FORCE_SUCCESSFUL_BUILD=yCONFIG_FORCE_MINIMAL_CONFIG=yCONFIG_FORCE_MINIMAL_CONFIG_PHYS=yCONFIG_X86_32_ALWAYS_ON=y
Re: [tip:core/rcu] rcu: Consolidate sparse and lockdep declarations in include/linux/rcupdate.h
Quoted 28 lines · Paul E. McKenney
Quoted 27 lines · Ingo Molnar
Quoted 8 lines · tip-bot for Paul E. McKenney
Commit-ID: bc33f24bdca8b6e97376e3a182ab69e6cdefa989 Gitweb: http://git.kernel.org/tip/bc33f24bdca8b6e97376e3a182ab69e6cdefa989 Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:47 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:37 +0200rcu: Consolidate sparse and lockdep declarations in
include/linux/rcupdate.h-tip testing found a spontaneous reboot crash, which i bisected back to this commit:
bc33f24bdca8b6e97376e3a182ab69e6cdefa989is first bad committhe reboot happens during the ftrace syscall tracepoints self-test:
[ 34.618832] Testing event sys_exit_set_robust_list: OK [ 34.635511] Testing event sys_enter_get_robust_list: OK [ 34.652164] Testing event sys_exit_get_robust_list: OK [ 34.668844] Testing event sys_enter_futex: OK [ 34.685495] Testing event sys_exit_futex: OK [ 34.702170] Testing event lock_acquire: [instant reboot]
Quoted 8 lines
Quoted 3 lines
There's no log message - just a reboot - which signals some severe crash - perhaps some locking related infinite recursion or something like that?
Pretty impressive for having mostly moved RCU's lockdep-related declarations from one file to another... :-/
Looking into it, probably a typo on my part.
I rechecked this several times, and don't see how anything else should have noticed this patch. That said, that self-test is rather amazing code, so...
For the moment, I will simply drop bc33f24bdca8 from my stack. For one thing, once CONFIG_PREEMPT_RCU is dropped, there is much less advantage to consolidating these annotations.
But I do have one stupid question... Given that rcu_read_lock() cannot participate in deadlock cycles, why is lockdep tracking it?
In any case, I will send a new stack in a day or so (currently testing) that drops bc33f24bdca8 and adds some changes that make CPU hotplug work much better for CONFIG_TREE_PREEMPT_RCU.
Thanx, Paul
Peter Zijlstra
maintainerRe: [PATCH -tip] v3 Simplify rcu_pending()/rcu_check_callbacks() API
In reply to Paul E. McKenneyQuoted 9 lines · Paul E. McKenney
From: Paul E. McKenney <[email protected]>
All calls from outside RCU are of the form:
if (rcu_pending(cpu)) rcu_check_callbacks(cpu, user);This is silly, instead we put a call to
rcu_pending()inrcu_check_callbacks(),
It could be non-silly if rcu_pending() were a very simple inline function, in that case it would avoid the full function call.
Still in such a case you can make rcu_check_callbacks() the inline function which does the same and have the real function called somthing else.
Anyway, its all moot since rcu_pending() wasn't a simple inline function anyway, so you've replaced two function calls with one, which seems good.
Re: [PATCH -tip] v3 Renamings to increase RCU clarity.
In reply to Paul E. McKenneyQuoted 60 lines · Paul E. McKenney
From: Paul E. McKenney <[email protected]>
Make RCU-sched, RCU-bh, and RCU-preempt be underlying implementations, with "RCU" defined in terms of one of the three. Update the outdated
rcu_qsctr_inc()names, as these functions no longer increment anything.Signed-off-by Paul E. McKenney <[email protected]>--- Documentation/RCU/trace.txt | 7 ++-- include/linux/rcupdate.h | 21 ++++++++--- include/linux/rcupreempt.h | 4 +- include/linux/rcutree.h | 8 +++-- kernel/rcupreempt.c | 8 ++-- kernel/rcutree.c | 80 +++++++++++++++++++++++++++---------------- kernel/rcutree.h | 4 +- kernel/rcutree_trace.c | 20 +++++----- kernel/sched.c | 2 +- kernel/softirq.c | 4 +- 10 files changed, 95 insertions(+), 63 deletions(-)Documentation/RCU/trace.txt +3
-4@@ -191,8 +191,7 @@ rcu/rcuhier (which displays the struct rcu_node hierarchy). The output of "cat rcu/rcudata" looks as follows: -rcu: -rcu: +rcu_sched: 0 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=10951/1 dn=0 df=1101 of=0 ri=36 ql=0 b=10 1 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=16117/1 dn=0 df=1015 of=0 ri=0 ql=0 b=10 2 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=1445/1 dn=0 df=1839 of=0 ri=0 ql=0 b=10@@ -306,7 +305,7 @@ comma-separated-variable spreadsheet format. The output of "cat rcu/rcugp" looks as follows: -rcu: completed=33062 gpnum=33063 +rcu_sched: completed=33062 gpnum=33063 rcu_bh: completed=464 gpnum=464 Again, this output is for both "rcu" and "rcu_bh". The fields are@@ -413,7 +412,7 @@ o Each element of the form "1/1 0:127 ^0" represents one struct The output of "cat rcu/rcu_pending" looks as follows: -rcu: +rcu_sched: 0 np=255892 qsp=53936 cbr=0 cng=14417 gpc=10033 gps=24320 nf=6445 nn=146741 1 np=261224 qsp=54638 cbr=0 cng=25723 gpc=16310 gps=2849 nf=5912 nn=155792 2 np=237496 qsp=49664 cbr=0 cng=2762 gpc=45478 gps=1762 nf=1201 nn=136629include/linux/rcupdate.h +0
-0@@ -157,17 +157,28 @@ extern int rcu_scheduler_active;* - call_rcu_sched() and rcu_barrier_sched() * on the write-side to insure proper synchronization. */
include/linux/rcupdate.h extern int rcu_scheduler_active; · line 167
Quoted 10 lines
include/linux/rcupdate.h +8
-2-#define rcu_read_lock_sched () preempt_disable() -#define rcu_read_lock_sched_notrace () preempt_disable_notrace() +static inline void rcu_read_lock_sched (void ) +{ +preempt_disable (); +} +static inline void rcu_read_lock_sched_notrace (void ) +{ +preempt_disable_notrace (); +}
It need be marked "notrace". Sometimes a function marked "inline" may not be inlined when it is compiled.
Lai.
Quoted 418 lines
include/linux/rcupdate.h +8
-3/* * rcu_read_unlock_sched - marks the end of a RCU-classic critical section * * See rcu_read_lock_sched for more information. */ -#define rcu_read_unlock_sched () preempt_enable() -#define rcu_read_unlock_sched_notrace () preempt_enable_notrace() - +static inline void rcu_read_unlock_sched (void ) +{ +preempt_enable (); +} +static inline void rcu_read_unlock_sched_notrace (void ) +{ +preempt_enable_notrace (); +}/** include/linux/rcupreempt.h +2
-2@@ -40,8 +40,8 @@#include <linux/cpumask.h> #include <linux/seqlock.h> -extern void rcu_qsctr_inc (int cpu); -static inline void rcu_bh_qsctr_inc (int cpu) { } +extern void rcu_sched_qs (int cpu); +static inline void rcu_bh_qs (int cpu) { }/* * Someone might want to pass call_rcu_bh as a function pointer. include/linux/rcutree.h +5
-3@@ -30,8 +30,8 @@#ifndef __LINUX_RCUTREE_H#define __LINUX_RCUTREE_H -extern void rcu_qsctr_inc (int cpu); -extern void rcu_bh_qsctr_inc (int cpu); +extern void rcu_sched_qs (int cpu); +extern void rcu_bh_qs (int cpu);extern int rcu_pending (int cpu);extern int rcu_needs_cpu (int cpu);@@ -73,7 +73,8 @@ static inline void __rcu_read_unlock_bh(void)#define __synchronize_sched () synchronize_rcu() -#define call_rcu_sched (head, func) call_rcu(head, func) +extern void call_rcu_sched (struct rcu_head *head, +void (*func)(struct rcu_head *rcu));static inline void synchronize_rcu_expedited (void ) {@@ -91,6 +92,7 @@ extern void rcu_restart_cpu(int cpu);extern long rcu_batches_completed (void );extern long rcu_batches_completed_bh (void ); +extern long rcu_batches_completed_sched (void );static inline void rcu_init_sched (void ) {kernel/rcupreempt.c +4
-4@@ -159,7 +159,7 @@ static DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_dyntick_sched, rcu_dyntick_sched .dynticks = 1, }; -void rcu_qsctr_inc (int cpu) +void rcu_sched_qs (int cpu) {struct rcu_dyntick_sched *rdssp = &per_cpu (rcu_dyntick_sched, cpu);@@ -967,12 +967,12 @@ void rcu_check_callbacks(int cpu, int user)* If this CPU took its interrupt from user mode or from the * idle loop, and this is not a nested interrupt, then * this CPU has to have exited all prior preept-disable -* sections of code. So increment the counter to note this. +* sections of code. So invoke rcu_sched_qs() to note this. * * The memory barrier is needed to handle the case where * writes from a preempt-disable section of code get reordered * into schedule() by this CPU's write buffer. So the memory -* barrier makes sure that the rcu_qsctr_inc() is seen by other +* barrier makes sure that the rcu_sched_qs() is seen by other * CPUs to happen after any such write. */ @@ -980,7 +980,7 @@ void rcu_check_callbacks(int cpu, int user) (idle_cpu(cpu) && !in_softirq() && hardirq_count() <= (1 << HARDIRQ_SHIFT))) {smp_mb ();/* Guard against aggressive schedule(). */ -rcu_qsctr_inc (cpu); +rcu_sched_qs (cpu); }rcu_check_mb (cpu);kernel/rcutree.c +50
-30@@ -74,26 +74,25 @@ EXPORT_SYMBOL_GPL(rcu_lock_map); .n_force_qs_ngp = 0, \ } -struct rcu_state rcu_state =RCU_STATE_INITIALIZER (rcu_state); -DEFINE_PER_CPU(struct rcu_data, rcu_data); +struct rcu_state rcu_sched_state =RCU_STATE_INITIALIZER (rcu_sched_state); +DEFINE_PER_CPU(struct rcu_data, rcu_sched_data);struct rcu_state rcu_bh_state =RCU_STATE_INITIALIZER (rcu_bh_state); DEFINE_PER_CPU(struct rcu_data, rcu_bh_data);/* -* Increment the quiescent state counter. -* The counter is a bit degenerated: We do not need to know +* Note a quiescent state. Because we do not need to know * how many quiescent states passed, just if there was at least -* one since the start of the grace period. Thus just a flag. +* one since the start of the grace period, this just sets a flag. */ -void rcu_qsctr_inc (int cpu) +void rcu_sched_qs (int cpu) { -struct rcu_data *rdp = &per_cpu (rcu_data, cpu); +struct rcu_data *rdp = &per_cpu (rcu_sched_data, cpu); rdp->passed_quiesc =1 ; rdp->passed_quiesc_completed = rdp->completed; } -void rcu_bh_qsctr_inc (int cpu) +void rcu_bh_qs (int cpu) {struct rcu_data *rdp = &per_cpu (rcu_bh_data, cpu); rdp->passed_quiesc =1 ;@@ -114,11 +113,21 @@ static int qlowmark = 100; /* Once only this many pending, use blimit. */static void force_quiescent_state (struct rcu_state *rsp,int relaxed);/* +* Return the number of RCU-sched batches processed thus far for debug & stats. +*/ +long rcu_batches_completed_sched (void ) +{ +return rcu_sched_state.completed; +} +EXPORT_SYMBOL_GPL (rcu_batches_completed_sched); + +/* * Return the number of RCU batches processed thus far for debug & stats. +* @@@ placeholder, maps to rcu_batches_completed_sched(). */ long rcu_batches_completed (void ) { -return rcu_state.completed; +return rcu_batches_completed_sched (); }EXPORT_SYMBOL_GPL (rcu_batches_completed);@@ -310,7 +319,7 @@ void rcu_irq_exit(void)WARN_ON_RATELIMIT (rdtp->dynticks &0x1 , &rcu_rs);/* If the interrupt queued a callback, get out of dyntick mode. */ -if (__get_cpu_var (rcu_data).nxtlist || +if (__get_cpu_var (rcu_sched_data).nxtlist ||__get_cpu_var (rcu_bh_data).nxtlist)set_need_resched (); }@@ -847,7 +856,7 @@ static void __rcu_offline_cpu(int cpu, struct rcu_state *rsp)/* * Move callbacks from the outgoing CPU to the running CPU. * Note that the outgoing CPU is now quiscent, so it is now -* (uncharacteristically) safe to access it rcu_data structure. +* (uncharacteristically) safe to access its rcu_data structure. * Note also that we must carefully retain the order of the * outgoing CPU's callbacks in order for rcu_barrier() to work * correctly. Finally, note that we start all the callbacks @@ -878,7 +887,7 @@ static void __rcu_offline_cpu(int cpu, struct rcu_state *rsp)*/ static void rcu_offline_cpu (int cpu) { -__rcu_offline_cpu (cpu, &rcu_state); +__rcu_offline_cpu (cpu, &rcu_sched_state);__rcu_offline_cpu (cpu, &rcu_bh_state); }@@ -973,17 +982,16 @@ void rcu_check_callbacks(int cpu, int user)* Get here if this CPU took its interrupt from user * mode or from the idle loop, and if this is not a * nested interrupt. In this case, the CPU is in -* a quiescent state, so count it. +* a quiescent state, so note it. * * No memory barrier is required here because both -* rcu_qsctr_inc() and rcu_bh_qsctr_inc() reference -* only CPU-local variables that other CPUs neither -* access nor modify, at least not while the corresponding -* CPU is online. +* rcu_sched_qs() and rcu_bh_qs() reference only CPU-local +* variables that other CPUs neither access nor modify, +* at least not while the corresponding CPU is online. */ -rcu_qsctr_inc (cpu); -rcu_bh_qsctr_inc (cpu); +rcu_sched_qs (cpu); +rcu_bh_qs (cpu); }else if (!in_softirq ()) {@@ -991,10 +999,10 @@ void rcu_check_callbacks(int cpu, int user)* Get here if this CPU did not take its interrupt from * softirq, in other words, if it is not interrupting * a rcu_bh read-side critical section. This is an _bh -* critical section, so count it. +* critical section, so note it. */ -rcu_bh_qsctr_inc (cpu); +rcu_bh_qs (cpu); }raise_softirq (RCU_SOFTIRQ ); }@@ -1174,7 +1182,8 @@ static void rcu_process_callbacks(struct softirq_action *unused)*/ smp_mb ();/* See above block comment. */ -__rcu_process_callbacks (&rcu_state, &__get_cpu_var (rcu_data)); +__rcu_process_callbacks (&rcu_sched_state, + &__get_cpu_var (rcu_sched_data));__rcu_process_callbacks (&rcu_bh_state, &__get_cpu_var (rcu_bh_data));/* @@ -1231,14 +1240,25 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu), }/* -* Queue an RCU callback for invocation after a grace period. +* Queue an RCU-sched callback for invocation after a grace period. +*/ +void call_rcu_sched (struct rcu_head *head,void (*func)(struct rcu_head *rcu)) +{ +__call_rcu (head, func, &rcu_sched_state); +} +EXPORT_SYMBOL_GPL (call_rcu_sched); + +/* +* @@@ Queue an RCU callback for invocation after a grace period. +* @@@ Placeholder pending rcutree_plugin.h. */ void call_rcu (struct rcu_head *head,void (*func)(struct rcu_head *rcu)) { -__call_rcu (head, func, &rcu_state); +call_rcu_sched (head, func); }EXPORT_SYMBOL_GPL (call_rcu); +/* * Queue an RCU for invocation after a quicker grace period. */ @@ -1311,7 +1331,7 @@ static int __rcu_pending(struct rcu_state *rsp, struct rcu_data *rdp)*/ int rcu_pending (int cpu) { -return __rcu_pending (&rcu_state, &per_cpu (rcu_data, cpu)) || +return __rcu_pending (&rcu_sched_state, &per_cpu (rcu_sched_data, cpu)) ||__rcu_pending (&rcu_bh_state, &per_cpu (rcu_bh_data, cpu)); }@@ -1324,7 +1344,7 @@ int rcu_pending(int cpu)int rcu_needs_cpu (int cpu) {/* RCU callbacks either ready or pending? */ -return per_cpu (rcu_data, cpu).nxtlist || +return per_cpu (rcu_sched_data, cpu).nxtlist ||per_cpu (rcu_bh_data, cpu).nxtlist; }@@ -1418,7 +1438,7 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp)static void __cpuinit rcu_online_cpu (int cpu) { -rcu_init_percpu_data (cpu, &rcu_state); +rcu_init_percpu_data (cpu, &rcu_sched_state);rcu_init_percpu_data (cpu, &rcu_bh_state); }@@ -1545,10 +1565,10 @@ void __init __rcu_init(void)#ifdef CONFIG_RCU_CPU_STALL_DETECTOR printk (KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n" );#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ -rcu_init_one (&rcu_state); -RCU_DATA_PTR_INIT (&rcu_state, rcu_data); +rcu_init_one (&rcu_sched_state); +RCU_DATA_PTR_INIT (&rcu_sched_state, rcu_sched_data);for_each_possible_cpu (i) -rcu_boot_init_percpu_data (i, &rcu_state); +rcu_boot_init_percpu_data (i, &rcu_sched_state);rcu_init_one (&rcu_bh_state);RCU_DATA_PTR_INIT (&rcu_bh_state, rcu_bh_data);for_each_possible_cpu (i)kernel/rcutree.h +2
-2@@ -238,8 +238,8 @@ struct rcu_state {/* * RCU implementation internal declarations: */ -extern struct rcu_state rcu_state; -DECLARE_PER_CPU(struct rcu_data, rcu_data); +extern struct rcu_state rcu_sched_state; +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);kernel/rcutree_trace.c +10
-10@@ -77,8 +77,8 @@ static void print_one_rcu_data(struct seq_file *m, struct rcu_data *rdp)static int show_rcudata (struct seq_file *m,void *unused) { -seq_puts (m,"rcu:\n" ); -PRINT_RCU_DATA (rcu_data, print_one_rcu_data, m); +seq_puts (m,"rcu_sched:\n" ); +PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data, m);seq_puts (m,"rcu_bh:\n" );PRINT_RCU_DATA (rcu_bh_data, print_one_rcu_data, m);return 0 ;@@ -125,8 +125,8 @@ static int show_rcudata_csv(struct seq_file *m, void *unused)seq_puts (m,"\"dt\",\"dt nesting\",\"dn\",\"df\"," );#endif /* #ifdef CONFIG_NO_HZ */ seq_puts (m,"\"of\",\"ri\",\"ql\",\"b\"\n" ); -seq_puts (m,"\"rcu:\"\n" ); -PRINT_RCU_DATA (rcu_data, print_one_rcu_data_csv, m); +seq_puts (m,"\"rcu_sched:\"\n" ); +PRINT_RCU_DATA (rcu_sched_data, print_one_rcu_data_csv, m);seq_puts (m,"\"rcu_bh:\"\n" );PRINT_RCU_DATA (rcu_bh_data, print_one_rcu_data_csv, m);return 0 ;@@ -172,8 +172,8 @@ static void print_one_rcu_state(struct seq_file *m, struct rcu_state *rsp)static int show_rcuhier (struct seq_file *m,void *unused) { -seq_puts (m,"rcu:\n" ); -print_one_rcu_state (m, &rcu_state); +seq_puts (m,"rcu_sched:\n" ); +print_one_rcu_state (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );print_one_rcu_state (m, &rcu_bh_state);return 0 ;@@ -194,8 +194,8 @@ static struct file_operations rcuhier_fops = {static int show_rcugp (struct seq_file *m,void *unused) { -seq_printf (m,"rcu: completed=%ld gpnum=%ld\n" , - rcu_state.completed, rcu_state.gpnum); +seq_printf (m,"rcu_sched: completed=%ld gpnum=%ld\n" , + rcu_sched_state.completed, rcu_sched_state.gpnum);seq_printf (m,"rcu_bh: completed=%ld gpnum=%ld\n" , rcu_bh_state.completed, rcu_bh_state.gpnum);return 0 ;@@ -244,8 +244,8 @@ static void print_rcu_pendings(struct seq_file *m, struct rcu_state *rsp)static int show_rcu_pending (struct seq_file *m,void *unused) { -seq_puts (m,"rcu:\n" ); -print_rcu_pendings (m, &rcu_state); +seq_puts (m,"rcu_sched:\n" ); +print_rcu_pendings (m, &rcu_sched_state);seq_puts (m,"rcu_bh:\n" );print_rcu_pendings (m, &rcu_bh_state);return 0 ;kernel/sched.c +1
-1@@ -5325,7 +5325,7 @@ need_resched:preempt_disable (); cpu =smp_processor_id (); rq =cpu_rq (cpu); -rcu_qsctr_inc (cpu); +rcu_sched_qs (cpu); prev = rq->curr; switch_count = &prev->nivcsw;kernel/softirq.c +2
-2@@ -227,7 +227,7 @@ restart:preempt_count () = prev_count; } -rcu_bh_qsctr_inc (cpu); +rcu_bh_qs (cpu); } h++; pending >>=1 ;@@ -721,7 +721,7 @@ static int ksoftirqd(void * __bind_cpu)preempt_enable_no_resched ();cond_resched ();preempt_disable (); -rcu_qsctr_inc ((long )__bind_cpu); +rcu_sched_qs ((long )__bind_cpu); }preempt_enable ();set_current_state (TASK_INTERRUPTIBLE );
Peter Zijlstra
maintainerRe: [PATCH RFC -tip 0/4] v3 RCU cleanups and simplified preemptable RCU
In reply to Paul E. McKenneyQuoted 5 lines · Paul E. McKenney
o Rename variables and functions so that RCU-sched is an
underlying definition, along with RCU-bh and (when so configured) RCU-preempt. RCU then maps to either RCU-sched or RCU-preempt, depending on configuration.
Nice, but we're not quite there yet it seems, since RCU-preempt isn't available outside of TREE_PREEMPT_RCU afaiks.
That is, I'm still hoping for the day that generic code can do:
rcu_preempt_read_lock(); call_rcu_preempt(&my_rcu_thing); rcu_preempt_read_unlock();
And have it work like expected, this would, I think, remove much of the need for SRCU.
The thing I've talked about earlier is an extension of this where you can create multiple RCU domains along the lines of:
struct rcu_preempt_domain my_domain;
rcu_preempt_init(&my_domain);
and
rcu_preempt_read_lock(&my_domain); call_rcu_preempt(&my_domain, &my_rcu_head); rcu_preempt_read_unlock(&my_domain);
Which would allow you to create smaller RCU domains for when you want faster grace periods due to less interference of other rcu users.
Anyway, enough rambling, the patch-set does look very nice, and if time permits I'll try and go through the preempt-tree-rcu thing.
Thanks
Re: [PATCH -tip] v3 Consolidate sparse and lockdep declarations in include/linux/rcupdate.h
In reply to Paul E. McKenneyQuoted 86 lines · Paul E. McKenney
From: Paul E. McKenney <[email protected]>
Signed-off-by Paul E. McKenney <[email protected]>--- include/linux/rcupdate.h | 46 ++++++++++++++++++++++++++++++++++++++++--- include/linux/rcupreempt.h | 4 +- include/linux/rcutree.h | 18 ----------------- 3 files changed, 44 insertions(+), 24 deletions(-)include/linux/rcupdate.h +34
-4@@ -80,6 +80,16 @@ extern int rcu_scheduler_active; (ptr)->next =NULL ; (ptr)->func =NULL ; \ } while (0) +#ifdef CONFIG_DEBUG_LOCK_ALLOC +extern struct lockdep_map rcu_lock_map; +# define rcu_read_acquire () \ + lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) +# define rcu_read_release () lock_release(&rcu_lock_map, 1, _THIS_IP_) +#else +# define rcu_read_acquire () do { } while (0) +# define rcu_read_release () do { } while (0) +#endif +/** * rcu_read_lock - mark the beginning of an RCU read-side critical section. * @@ -109,7 +119,12 @@ extern int rcu_scheduler_active;* * It is illegal to block while in an RCU read-side critical section. */ -#define rcu_read_lock () __rcu_read_lock() +static inline void rcu_read_lock (void ) +{ +__rcu_read_lock (); +__acquire (RCU ); +rcu_read_acquire (); +}/** * rcu_read_unlock - marks the end of an RCU read-side critical section. @@ -126,7 +141,12 @@ extern int rcu_scheduler_active;* used as well. RCU does not care how the writers keep out of each * others' way, as long as they do so. */ -#define rcu_read_unlock () __rcu_read_unlock() +static inline void rcu_read_unlock (void ) +{ +rcu_read_release (); +__release (RCU ); +__rcu_read_unlock (); +}/** * rcu_read_lock_bh - mark the beginning of a softirq-only RCU critical section @@ -139,14 +159,24 @@ extern int rcu_scheduler_active;* can use just rcu_read_lock(). * */ -#define rcu_read_lock_bh () __rcu_read_lock_bh() +static inline void rcu_read_lock_bh (void ) +{ +__rcu_read_lock_bh (); +__acquire (RCU_BH ); +rcu_read_acquire (); +}/* * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section * * See rcu_read_lock_bh() for more information. */ -#define rcu_read_unlock_bh () __rcu_read_unlock_bh() +static inline void rcu_read_unlock_bh (void ) +{ +rcu_read_release (); +__release (RCU_BH ); +__rcu_read_unlock_bh (); +}/** * rcu_read_lock_sched - mark the beginning of a RCU-classic critical section
include/linux/rcupdate.h extern int rcu_scheduler_active; · line 196
Quoted 7 lines
include/linux/rcupdate.h +2
-0@@ -160,10 +190,14 @@ extern int rcu_scheduler_active;static inline void rcu_read_lock_sched (void ) {preempt_disable (); +__acquire (RCU_SCHED ); +rcu_read_acquire (); }static inline void rcu_read_lock_sched_notrace (void )
It need be marked "notrace" too.
include/linux/rcupdate.h extern int rcu_scheduler_active; · line 202
Quoted 6 lines
include/linux/rcupdate.h +2
-0{preempt_disable_notrace (); +__acquire (RCU_SCHED ); +rcu_read_acquire (); }
It may cause infinity recursion.rcu_read_acquire() calls rcu_read_lock_sched_notrace() before current->lockdep_recursion is set to 1 when tracing in on, thus infinity recursion occurs.
Lai
Re: [PATCH -tip] v3 Consolidate sparse and lockdep declarations in include/linux/rcupdate.h
Quoted 97 lines · Lai Jiangshan
Quoted 86 lines · Paul E. McKenney
From: Paul E. McKenney <[email protected]>
Signed-off-by Paul E. McKenney <[email protected]>--- include/linux/rcupdate.h | 46 ++++++++++++++++++++++++++++++++++++++++--- include/linux/rcupreempt.h | 4 +- include/linux/rcutree.h | 18 ----------------- 3 files changed, 44 insertions(+), 24 deletions(-)include/linux/rcupdate.h +34
-4@@ -80,6 +80,16 @@ extern int rcu_scheduler_active; (ptr)->next =NULL ; (ptr)->func =NULL ; \ } while (0) +#ifdef CONFIG_DEBUG_LOCK_ALLOC +extern struct lockdep_map rcu_lock_map; +# define rcu_read_acquire () \ + lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) +# define rcu_read_release () lock_release(&rcu_lock_map, 1, _THIS_IP_) +#else +# define rcu_read_acquire () do { } while (0) +# define rcu_read_release () do { } while (0) +#endif +/** * rcu_read_lock - mark the beginning of an RCU read-side critical section. * @@ -109,7 +119,12 @@ extern int rcu_scheduler_active;* * It is illegal to block while in an RCU read-side critical section. */ -#define rcu_read_lock () __rcu_read_lock() +static inline void rcu_read_lock (void ) +{ +__rcu_read_lock (); +__acquire (RCU ); +rcu_read_acquire (); +}/** * rcu_read_unlock - marks the end of an RCU read-side critical section. @@ -126,7 +141,12 @@ extern int rcu_scheduler_active;* used as well. RCU does not care how the writers keep out of each * others' way, as long as they do so. */ -#define rcu_read_unlock () __rcu_read_unlock() +static inline void rcu_read_unlock (void ) +{ +rcu_read_release (); +__release (RCU ); +__rcu_read_unlock (); +}/** * rcu_read_lock_bh - mark the beginning of a softirq-only RCU critical section @@ -139,14 +159,24 @@ extern int rcu_scheduler_active;* can use just rcu_read_lock(). * */ -#define rcu_read_lock_bh () __rcu_read_lock_bh() +static inline void rcu_read_lock_bh (void ) +{ +__rcu_read_lock_bh (); +__acquire (RCU_BH ); +rcu_read_acquire (); +}/* * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section * * See rcu_read_lock_bh() for more information. */ -#define rcu_read_unlock_bh () __rcu_read_unlock_bh() +static inline void rcu_read_unlock_bh (void ) +{ +rcu_read_release (); +__release (RCU_BH ); +__rcu_read_unlock_bh (); +}/** * rcu_read_lock_sched - mark the beginning of a RCU-classic critical section include/linux/rcupdate.h extern int rcu_scheduler_active; · line 196
Quoted 7 lines
include/linux/rcupdate.h +2
-0@@ -160,10 +190,14 @@ extern int rcu_scheduler_active;static inline void rcu_read_lock_sched (void ) {preempt_disable (); +__acquire (RCU_SCHED ); +rcu_read_acquire (); }static inline void rcu_read_lock_sched_notrace (void )It need be marked "notrace" too.
Quoted 11 lines
include/linux/rcupdate.h extern int rcu_scheduler_active; · line 202
Quoted 6 lines
include/linux/rcupdate.h +2
-0{preempt_disable_notrace (); +__acquire (RCU_SCHED ); +rcu_read_acquire (); }It may cause infinity recursion.
rcu_read_acquire()callsrcu_read_lock_sched_notrace()beforecurrent->lockdep_recursionis set to 1 when tracing in on, thus infinity recursion occurs.
ah, this would explain the crash i reported in:
http://lkml.org/lkml/2009/8/23/170 Ingo
Re: [tip:core/rcu] rcu: Consolidate sparse and lockdep declarations in include/linux/rcupdate.h
In reply to Paul E. McKenneyQuoted 33 lines · Paul E. McKenney
Quoted 32 lines · Paul E. McKenney
Quoted 30 lines · Ingo Molnar
Quoted 8 lines · tip-bot for Paul E. McKenney
Commit-ID: bc33f24bdca8b6e97376e3a182ab69e6cdefa989 Gitweb: http://git.kernel.org/tip/bc33f24bdca8b6e97376e3a182ab69e6cdefa989 Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:47 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:37 +0200rcu: Consolidate sparse and lockdep declarations in
include/linux/rcupdate.h-tip testing found a spontaneous reboot crash, which i bisected back to this commit:
bc33f24bdca8b6e97376e3a182ab69e6cdefa989is first bad committhe reboot happens during the ftrace syscall tracepoints self-test:
[ 34.618832] Testing event sys_exit_set_robust_list: OK [ 34.635511] Testing event sys_enter_get_robust_list: OK [ 34.652164] Testing event sys_exit_get_robust_list: OK [ 34.668844] Testing event sys_enter_futex: OK [ 34.685495] Testing event sys_exit_futex: OK [ 34.702170] Testing event lock_acquire: [instant reboot]There's no log message - just a reboot - which signals some severe crash - perhaps some locking related infinite recursion or something like that?
Quoted 8 lines
Quoted 4 lines
Pretty impressive for having mostly moved RCU's lockdep-related declarations from one file to another... :-/
Looking into it, probably a typo on my part.
I rechecked this several times, and don't see how anything else should have noticed this patch. That said, that self-test is rather amazing code, so...
What do you think about the infinite recursion bug that Lai Jiangshan's found in that patch? (sharp eyes really!) That might explain the crash -tip testing found.
Ingo
Re: [PATCH -tip] v3 Renamings to increase RCU clarity.
In reply to Lai JiangshanQuoted 2 lines · Lai Jiangshan
Quoted 1 line · Paul E. McKenney
From: Paul E. McKenney <[email protected]>
[ . . . ]
Quoted 9 lines
include/linux/rcupdate.h extern int rcu_scheduler_active; · line 167
Quoted 4 lines
include/linux/rcupdate.h +4
-0+static inline void rcu_read_lock_sched_notrace (void ) +{ +preempt_disable_notrace (); +}It need be marked "notrace". Sometimes a function marked "inline" may not be inlined when it is compiled.
Lai.
Good eyes, and thank you -very- much!!! I doubt that I would have ever spotted this on my own, as I was just assuming that the compiler would see the preempt_disable_notrace() directly in all cases...
Thanx, Paul
Re: [PATCH -tip] v3 Simplify rcu_pending()/rcu_check_callbacks() API
In reply to Peter ZijlstraQuoted 14 lines · Peter Zijlstra
Quoted 9 lines · Paul E. McKenney
From: Paul E. McKenney <[email protected]>
All calls from outside RCU are of the form:
if (rcu_pending(cpu)) rcu_check_callbacks(cpu, user);This is silly, instead we put a call to
rcu_pending()inrcu_check_callbacks(),It could be non-silly if
rcu_pending()were a very simple inline function, in that case it would avoid the full function call.
Quoted 7 lines
Still in such a case you can make
rcu_check_callbacks()the inline function which does the same and have the real function called somthing else.Anyway, its all moot since
rcu_pending()wasn't a simple inline function anyway, so you've replaced two function calls with one, which seems good.
Indeed, there was a time when rcu_pending() was a much simpler function, but those days are long past. ;-)
Thank you for looking this over!!!
Thanx, Paul
Re: [PATCH RFC -tip 0/4] v3 RCU cleanups and simplified preemptable RCU
In reply to Peter ZijlstraQuoted 12 lines · Peter Zijlstra
Quoted 5 lines · Paul E. McKenney
o Rename variables and functions so that RCU-sched is an
underlying definition, along with RCU-bh and (when so configured) RCU-preempt. RCU then maps to either RCU-sched or RCU-preempt, depending on configuration.Nice, but we're not quite there yet it seems, since RCU-preempt isn't available outside of
TREE_PREEMPT_RCUafaiks.That is, I'm still hoping for the day that generic code can do:
Quoted 8 lines
rcu_preempt_read_lock(); call_rcu_preempt(&my_rcu_thing); rcu_preempt_read_unlock();And have it work like expected, this would, I think, remove much of the need for SRCU.
Longer term, CONFIG_PREEMPT will imply CONFIG_TREE_PREEMPT_RCU and !CONFIG_PREEMPT will imply CONFIG_TREE_RCU. This will reduce the number of combinations in need of testing. So then the question is "what does call_rcu_preempt() mean in !CONFIG_PREEMPT"?
If we permit things like mutex_lock(), we have the possibility of indefinitely extended RCU read-side critical sections, which leads us to:
Quoted 8 lines
The thing I've talked about earlier is an extension of this where you can create multiple RCU domains along the lines of:
struct
rcu_preempt_domainmy_domain;rcu_preempt_init(&my_domain);
Quoted 6 lines
and
rcu_preempt_read_lock(&my_domain); call_rcu_preempt(&my_domain, &my_rcu_head); rcu_preempt_read_unlock(&my_domain);
This is in fact what SRCU does. Of course, it also requires that the return value from rcu_preempt_read_lock() be passed into rcu_preempt_read_unlock() (AKA srcu_read_lock() and srcu_read_unlock()), in order to handle the case where there are a number of nested SRCU read-side critical sections with different domains. I suppose that we could instead dynamically allocate space for this information, but...
Quoted 2 lines
Which would allow you to create smaller RCU domains for when you want faster grace periods due to less interference of other rcu users.
The other thing in -tip for this purpose is synchronize_rcu_expedited().
Quoted 2 lines
Anyway, enough rambling, the patch-set does look very nice, and if time permits I'll try and go through the preempt-tree-rcu thing.
I would very much appreciate that!!! My next patch set (hopefully later today Pacific time) will fix CPU hotplug for the single-node-tree case, with full support later this week.
Thanx, Paul
Re: [PATCH -tip] v3 Consolidate sparse and lockdep declarations in include/linux/rcupdate.h
In reply to Lai JiangshanQuoted 5 lines · Lai Jiangshan
Quoted 4 lines · Paul E. McKenney
From: Paul E. McKenney <[email protected]>
Signed-off-by Paul E. McKenney <[email protected]>---
[ . . . ]
Quoted 11 lines
include/linux/rcupdate.h extern int rcu_scheduler_active; · line 196
Quoted 9 lines
*
rcu_read_lock_sched- mark the beginning of a RCU-classic critical sectioninclude/linux/rcupdate.h +2
-0@@ -160,10 +190,14 @@ extern int rcu_scheduler_active;static inline void rcu_read_lock_sched (void ) {preempt_disable (); +__acquire (RCU_SCHED ); +rcu_read_acquire (); }static inline void rcu_read_lock_sched_notrace (void )It need be marked "notrace" too.
I guess I just need to grep for "_notrace(" in my code. ;-)
Quoted 10 lines
include/linux/rcupdate.h extern int rcu_scheduler_active; · line 201
Quoted 5 lines
include/linux/rcupdate.h +2
-0{preempt_disable_notrace (); +__acquire (RCU_SCHED ); +rcu_read_acquire (); }It may cause infinity recursion.
rcu_read_acquire()callsrcu_read_lock_sched_notrace()beforecurrent->lockdep_recursionis set to 1 when tracing in on, thus infinity recursion occurs.
That might explain Ingo's test results.
Thank you again, good catch!!!
Thanx, Paul
Re: [tip:core/rcu] rcu: Consolidate sparse and lockdep declarations in include/linux/rcupdate.h
In reply to Ingo MolnarQuoted 41 lines · Ingo Molnar
Quoted 38 lines · Paul E. McKenney
Quoted 36 lines · Paul E. McKenney
Quoted 27 lines · Ingo Molnar
Quoted 8 lines · tip-bot for Paul E. McKenney
Commit-ID: bc33f24bdca8b6e97376e3a182ab69e6cdefa989 Gitweb: http://git.kernel.org/tip/bc33f24bdca8b6e97376e3a182ab69e6cdefa989 Author: Paul E. McKenney <[email protected]> AuthorDate: Sat, 22 Aug 2009 13:56:47 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 23 Aug 2009 10:32:37 +0200rcu: Consolidate sparse and lockdep declarations in
include/linux/rcupdate.h-tip testing found a spontaneous reboot crash, which i bisected back to this commit:
bc33f24bdca8b6e97376e3a182ab69e6cdefa989is first bad committhe reboot happens during the ftrace syscall tracepoints self-test:
[ 34.618832] Testing event sys_exit_set_robust_list: OK [ 34.635511] Testing event sys_enter_get_robust_list: OK [ 34.652164] Testing event sys_exit_get_robust_list: OK [ 34.668844] Testing event sys_enter_futex: OK [ 34.685495] Testing event sys_exit_futex: OK [ 34.702170] Testing event lock_acquire: [instant reboot]Quoted 3 lines
There's no log message - just a reboot - which signals some severe crash - perhaps some locking related infinite recursion or something like that?
Pretty impressive for having mostly moved RCU's lockdep-related declarations from one file to another... :-/
Looking into it, probably a typo on my part.
Quoted 7 lines
Quoted 3 lines
I rechecked this several times, and don't see how anything else should have noticed this patch. That said, that self-test is rather amazing code, so...
What do you think about the infinite recursion bug that Lai Jiangshan's found in that patch? (sharp eyes really!) That might explain the crash -tip testing found.
Indeed!!!
My thought is to send you a temporary patch stack fixing that bug (and supplying a CPU-hotplug fix), allowing your testing to progress (but defeating bisection if using ftrace).
Then I would create a new patch stack applying the fix to the bugs Lai Jiangshan found to commit bc33f24, rebasing, retesting, and suppling a this new stack to replace commit bc33f24 and later in tip/core/rcu.
Seem reasonable?
Thanx, Paul