Additional x86 fixes for 2.6.31-rc5
Subsystems (3)
H. Peter Anvin
reviewerThe following changes since commit e00b95debb9a0f023b61abcd4b1e74f687276b47:
Linus Torvalds (1):
Merge branch 'for-linus' of git://git.kernel.org/.../bp/bp
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git x86-fixes-for-linus
H. Peter Anvin (1):
x86: comment formatting cleanup in arch/x86/kernel/tsc.c
Pallipadi, Venkatesh (1):
x86, pat: Fix set_memory_wc related corruption
Robert Richter (1):
x86: fix section mismatch for i386 init code
Tan, Wei Chong (1):
x86: SMI workaround for pit_expect_msb
arch/x86/kernel/head_32.S | 6 +++++- arch/x86/kernel/tsc.c | 22 ++++++++++++++++++++++ arch/x86/mm/pageattr.c | 9 ++++++--- 3 files changed, 33 insertions(+), 4 deletions(-)
arch/x86/kernel/head_32.S +5 -1
@@ -602,7 +602,11 @@ ignore_int: #endif iret -.section .cpuinit.data,"wa" +#ifndef CONFIG_HOTPLUG_CPU + __CPUINITDATA +#else + __REFDATA +#endif .align 4 ENTRY(initial_code) .long i386_start_kernel
arch/x86/kernel/tsc.c +22 -0
@@ -285,10 +285,32 @@ static inline int pit_expect_msb(unsigned char val, u64 *tscp, unsigned long *deinb (0x42 );if (inb (0x42 ) != val)break ; +/* +* What if an SMI kicks in here when count is just +* slightly over 5 and SMI run long enough so that PIT +* MSB value is way bigger then val? Then tscp will +* have an unreasonably large value, since the code +* has no notion of how much inb(0x42) MSB is bigger +* then val when it return from SMI. +* +* In addition, since the 2 get_cycles() are near, +* deltap may get a sane value. If this happen on the +* final few readings just before +* (d1+d2 < delta >> * 11), this may skew the average +* delta variable of quick_pit_calibrate(). +*/ tsc =get_cycles (); } *deltap =get_cycles () - tsc; *tscp = tsc; +/* +* inb(0x42) will need to be separately repeated here as the +* SMI may take so long that the old reading is no longer +* reliable. inb(0x42) after all get_cycles is the safest. +*/ +inb (0x42 ); +if (inb (0x42 ) < (val -1 )) +return 0 ;/* * We require _some_ success, but the quality control
arch/x86/mm/pageattr.c +6 -3
@@ -997,12 +997,15 @@ EXPORT_SYMBOL(set_memory_array_uc);int _set_memory_wc (unsigned long addr,int numpages) {int ret; +unsigned long addr_copy = addr; + ret =change_page_attr_set (&addr, numpages,__pgprot (_PAGE_CACHE_UC_MINUS),0 ); -if (!ret) { - ret =change_page_attr_set (&addr, numpages, -__pgprot (_PAGE_CACHE_WC),0 ); + ret =change_page_attr_set_clr (&addr_copy, numpages, +__pgprot (_PAGE_CACHE_WC), +__pgprot (_PAGE_CACHE_MASK), +0 ,0 ,NULL ); }return ret; }
Quoted 5 lines · H. Peter Anvin
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.gitx86-fixes-for-linusTan, Wei Chong (1):
x86: SMI workaround forpit_expect_msb
I really think that last one (commit fb34a8ee86) is incorrect.
We do _not_ want to do that SMI workaround in the loop, and the logic of that patch is broken anyway.
If an SMI kicks in, then it's true that tscp will be off, but that's what the error term is there for. If the error term is sufficiently small, then we don't care.
Sure, we might want the error term to be even smaller, but in no way does it actually invalidate any of the logic - the 'tsc' reading is just a guess anyway.
Also, I think that the real issue isn't even an SMI - but the fact that in the very last iteration of the loop, there's no serializing instruction _after_ the last 'rdtsc'. So even in the absense of SMI's, we do have a situation where the cycle counter was read without proper serialization.
So I think the patch does fix something, I just think it's done the wrong way.
The last check shouldn't be done the way that commit does it. It should be done outside the outer loop, since _inside_ the outer loop, we'll be testing that the PIT has the right MSB value has the right value in the next iteration.
So only the _last_ iteration is special, because that's the one that will not check the PIT MSB value any more, and because the final 'get_cycles()' isn't serialized.
In other words:
- I'd like to move the PIT MSB check to after the last iteration, rather than in every iteration
- I think we should comment on the fact that it's also a serializing instruction and so 'fences in' the TSC read.
Here's a suggested replacement - BUT NOTE THAT IT'S ENTIRELY UNTESTED!
(Ok, so the patch is bigger than it strictly needs to be - I hate repeating code, so I made that 'read PIT counter twice and compare MSB' be a new helper routine)
Hmm? What do you guys think?
Linus
--- arch/x86/kernel/tsc.c | 29 ++++++++++++++++++++++------- 1 files changed, 22 insertions(+), 7 deletions(-)
arch/x86/kernel/tsc.c +22 -7
@@ -275,15 +275,20 @@ static unsigned long pit_calibrate_tsc(u32 latch, unsigned long ms, int loopmin)* use the TSC value at the transitions to calculate a pretty * good value for the TSC frequencty. */ +static inline int pit_verify_msb (unsigned char val) +{ +/* Ignore LSB */ +inb (0x42 ); +return inb (0x42 ) == val; +} +static inline int pit_expect_msb (unsigned char val,u64 *tscp,unsigned long *deltap) {int count;u64 tsc =0 ;for (count =0 ; count <50000 ; count++) { -/* Ignore LSB */ -inb (0x42 ); -if (inb (0x42 ) != val) +if (!pit_verify_msb (val))break ; tsc =get_cycles (); }
@@ -336,8 +341,7 @@ static unsigned long quick_pit_calibrate(void)* to do that is to just read back the 16-bit counter * once from the PIT. */ -inb (0x42 ); -inb (0x42 ); +pit_verify_msb (0 );if (pit_expect_msb (0xff , &tsc, &d1)) {for (i =1 ; i <=MAX_QUICK_PIT_ITERATIONS ; i++) {
@@ -348,8 +352,19 @@ static unsigned long quick_pit_calibrate(void)* Iterate until the error is less than 500 ppm */ delta -= tsc; -if (d1+d2 < delta >>11 ) - goto success; +if (d1+d2 >= delta >>11 ) +continue ; + +/* +* Check the PIT one more time to verify that +* all TSC reads were stable wrt the PIT. +* +* This also guarantees serialization of the +* last cycle read ('d2') in pit_expect_msb. +*/ +if (!pit_verify_msb (0xfe - i)) +break ; + goto success; } }printk ("Fast TSC calibration failed\n" );
Quoted 110 lines · Linus Torvalds
Quoted 5 lines · H. Peter Anvin
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.gitx86-fixes-for-linusTan, Wei Chong (1):
x86: SMI workaround forpit_expect_msbI really think that last one (commit
fb34a8ee86) is incorrect.We do _not_ want to do that SMI workaround in the loop, and the logic of that patch is broken anyway.
If an SMI kicks in, then it's true that tscp will be off, but that's what the error term is there for. If the error term is sufficiently small, then we don't care.
Sure, we might want the error term to be even smaller, but in no way does it actually invalidate any of the logic - the 'tsc' reading is just a guess anyway. Also, I think that the real issue isn't even an SMI - but the fact that in the very last iteration of the loop, there's no serializing instruction _after_ the last 'rdtsc'. So even in the absense of SMI's, we do have a situation where the cycle counter was read without proper serialization.
So I think the patch does fix something, I just think it's done the wrong way.
The last check shouldn't be done the way that commit does it. It should be done outside the outer loop, since _inside_ the outer loop, we'll be testing that the PIT has the right MSB value has the right value in the next iteration.
So only the _last_ iteration is special, because that's the one that will not check the PIT MSB value any more, and because the final '
get_cycles()' isn't serialized.In other words:
- I'd like to move the PIT MSB check to after the last iteration, rather
than in every iteration- I think we should comment on the fact that it's also a serializing
instruction and so 'fences in' the TSC read.Here's a suggested replacement - BUT NOTE THAT IT'S ENTIRELY UNTESTED!
(Ok, so the patch is bigger than it strictly needs to be - I hate repeating code, so I made that 'read PIT counter twice and compare MSB' be a new helper routine)
Hmm? What do you guys think?
Linus
--- arch/x86/kernel/tsc.c | 29 ++++++++++++++++++++++------- 1 files changed, 22 insertions(+), 7 deletions(-)arch/x86/kernel/tsc.c +12
-7@@ -275,15 +275,20 @@ static unsigned long pit_calibrate_tsc(u32 latch, unsigned long ms, int loopmin)* use the TSC value at the transitions to calculate a pretty * good value for the TSC frequencty. */ +static inline int pit_verify_msb (unsigned char val) +{ +/* Ignore LSB */ +inb (0x42 ); +return inb (0x42 ) == val; +} +static inline int pit_expect_msb (unsigned char val,u64 *tscp,unsigned long *deltap) {int count;u64 tsc =0 ;for (count =0 ; count <50000 ; count++) { -/* Ignore LSB */ -inb (0x42 ); -if (inb (0x42 ) != val) +if (!pit_verify_msb (val))break ; tsc =get_cycles (); }@@ -336,8 +341,7 @@ static unsigned long quick_pit_calibrate(void)* to do that is to just read back the 16-bit counter * once from the PIT. */ -inb (0x42 ); -inb (0x42 ); +pit_verify_msb (0 );if (pit_expect_msb (0xff , &tsc, &d1)) {for (i =1 ; i <=MAX_QUICK_PIT_ITERATIONS ; i++) {@@ -348,8 +352,19 @@ static unsigned long quick_pit_calibrate(void)* Iterate until the error is less than 500 ppm */ delta -= tsc; -if (d1+d2 < delta >>11 ) - goto success; +if (d1+d2 >= delta >>11 ) +continue ; +
arch/x86/kernel/tsc.c static unsigned long quick_pit_calibrate(void) · line 367
Quoted 10 lines
arch/x86/kernel/tsc.c +10
-0+/* +* Check the PIT one more time to verify that +* all TSC reads were stable wrt the PIT. +* +* This also guarantees serialization of the +* last cycle read ('d2') in pit_expect_msb. +*/ +if (!pit_verify_msb (0xfe - i)) +break ; + goto success;
Oh, this reminds me of a patch i saw from John(?) a couple of months ago that added a magic final pit_verify_msb() call, which solved PIT calibration instabilities.
(Or maybe i did that hack when i tried to write an auto-error-boundary calibrator?)
I dont think we committed it because it was a 'black magic' hack as per observation and nobody realized the side-effect of the TSC synchronization which you mention above.
My memories are sketchy but i think the symptom was one failed PIT loop every 10 bootups, and it was solved by a patch very similar to yours.
So with a proper changlog and testing i'd very much go for this on those grounds ago - and if it also solves the problem observed by Wei Chong Tan that would be perfect.
[ Unfortunately Thomas (who too saw some PIT calibration
weirdnesses IIRC) wont be back for some time. ]
Ingo
Hmm.
I just noticed another issue on x86 code generation, since I was looking at assembly language generation due to the do_sigaltstack() kernel stack info leak thing.
Our "get_current()" seriously sucks now that it's a per-cpu variable.
Look at the code generated for something like
current->sas_ss_sp = (unsigned long) ss_sp; current->sas_ss_size = ss_size;
and notice how the code really really sucks:
movq %gs:per_cpu__current_task,%rcx
movq %rdx, 1152(%rcx)
movq %gs:per_cpu__current_task,%rdx
movq %rax, 1160(%rdx)because it reloads that silly per-cpu variable every time, because the assembler has a constraint of
"m" (per_cpu__current_task)
and so gcc is worried that the stores will invalidate the result of the load from the per-cpu variable.
I don't know how to fix that _well_, but here's a not-so-very-pretty patch that seems to shave off 4.5kB from my kernel, and gives gcc much better scheduling for 'current' and 'thread_info' because now it can load them early - and cache them - even in the presense of stores.
It uses a "p" (&var) constraint instead of a "m" (var) one, to make gcc think there is no actual "load" from memory. This obviously _only_ works for percpu variables that are stable within a thread, but 'current' and 'kernel_stack' should be that way.
End result: the above horror becomes a more reasonable
movq %gs:per_cpu__current_task,%rax
movq %rcx, 1152(%rax)
movq %rdx, 1160(%rax)instead (it still doesn't cache it over the whole function, but it's certainly better).
NOTE! I did not test that it all worked. I only looked at the asm, and checked out the improvements. All the ones I looked at looked reasonable.
Worthwhile? You be the judge.
There's another detail that may be worth looking at: we often get 'current' and 'thread_info' together, and they are _not_ in the same cache-line. It might be worth defining them together in the per-cpu data, and making sure they are in the same cacheline too. In general, we should probably look at which per-pcu variables are hot and read-only, and try to gathe them all together.
Linus
---
From: Linus Torvalds <[email protected]>
Date: Sat, 1 Aug 2009 11:50:54 -0700
Subject: [PATCH] x86-64: Add 'percpu_read_stable()' interface for cacheable accesses
This is very useful for some common things like 'get_current()' and 'get_thread_info()', which can be used multiple times in a function, and where the result is cacheable.
--- arch/x86/include/asm/current.h | 2 +- arch/x86/include/asm/percpu.h | 13 +++++++------ arch/x86/include/asm/thread_info.h | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-)
arch/x86/include/asm/current.h +1 -1
@@ -11,7 +11,7 @@ DECLARE_PER_CPU(struct task_struct *, current_task); static __always_inline struct task_struct *get_current(void) { -return percpu_read (current_task); +return percpu_read_stable (current_task); }#define current get_current()
arch/x86/include/asm/percpu.h +7 -6
@@ -104,36 +104,37 @@ do { \ } \ } while (0) -#define percpu_from_op (op, var) \ +#define percpu_from_op (op, var, constraint) \ ({ \ typeof(var) ret__; \ switch (sizeof(var)) { \ case 1: \ asm(op "b "__percpu_arg(1)",%0" \ : "=q" (ret__) \ - : "m" (var)); \ + : constraint); \ break; \ case 2: \ asm(op "w "__percpu_arg(1)",%0" \ : "=r" (ret__) \ - : "m" (var)); \ + : constraint); \ break; \ case 4: \ asm(op "l "__percpu_arg(1)",%0" \ : "=r" (ret__) \ - : "m" (var)); \ + : constraint); \ break; \ case 8: \ asm(op "q "__percpu_arg(1)",%0" \ : "=r" (ret__) \ - : "m" (var)); \ + : constraint); \ break; \ default: __bad_percpu_size(); \ } \ ret__; \ }) -#define percpu_read (var) percpu_from_op("mov", per_cpu__##var) +#define percpu_read (var) percpu_from_op("mov", per_cpu__##var,"m" (per_cpu__##var)) +#define percpu_read_stable (var) percpu_from_op("mov", per_cpu__##var,"p" (&per_cpu__##var))#define percpu_write (var, val) percpu_to_op("mov", per_cpu__##var, val)#define percpu_add (var, val) percpu_to_op("add", per_cpu__##var, val)#define percpu_sub (var, val) percpu_to_op("sub", per_cpu__##var, val)
arch/x86/include/asm/thread_info.h +1 -1
@@ -213,7 +213,7 @@ DECLARE_PER_CPU(unsigned long, kernel_stack);static inline struct thread_info *current_thread_info (void ) {struct thread_info *ti; - ti = (void *)(percpu_read (kernel_stack) + + ti = (void *)(percpu_read_stable (kernel_stack) +KERNEL_STACK_OFFSET -THREAD_SIZE );return ti; }
H. Peter Anvin
reviewerQuoted 26 lines · Linus Torvalds
Hmm.
I just noticed another issue on x86 code generation, since I was looking at assembly language generation due to the
do_sigaltstack()kernel stack info leak thing.Our "
get_current()" seriously sucks now that it's a per-cpu variable.Look at the code generated for something like
current->sas_ss_sp = (unsigned long) ss_sp; current->sas_ss_size = ss_size;and notice how the code really really sucks:
movq %gs:per_cpu__current_task,%rcx movq %rdx, 1152(%rcx) movq %gs:per_cpu__current_task,%rdx movq %rax, 1160(%rdx)because it reloads that silly per-cpu variable every time, because the assembler has a constraint of
"m" (per_cpu__current_task)
Quoted 8 lines
and so gcc is worried that the stores will invalidate the result of the load from the per-cpu variable.
I don't know how to fix that _well_, but here's a not-so-very-pretty patch that seems to shave off 4.5kB from my kernel, and gives gcc much better scheduling for 'current' and '
thread_info' because now it can load them early - and cache them - even in the presense of stores.
This is clearly better... now the semi-obvious question becomes if there is any way we can get compiler support to do better and migrate to that as the compiler allows. In particular, if I remember right the problem with using __thread for percpu was exactly that the current cpuness can change almost anywhere, unless preemption is disabled.
I'm wondering if we could use __thread or something like it for the stable perthreads, perhaps with additional compiler hints.
-hpa
Signature · 2 lines
H. Peter Anvin, Intel Open Source Technology Center I work for Intel. I don't speak on their behalf.
Quoted 4 lines · H. Peter Anvin
This is clearly better... now the semi-obvious question becomes if there is any way we can get compiler support to do better and migrate to that as the compiler allows.
Well, even if we had compiler support, we'd have to basically then wait forever to make sure everybody has a supported compiler. So I think we're better off not worrying too much about that - it's not going to happen any time in the near future.
I've now tested my patch, and it seems to result in a working kernel too.
Quoted 3 lines
In particular, if I remember right the problem with using
__threadfor percpu was exactly that the current cpuness can change almost anywhere, unless preemption is disabled.
That shouldn't matter. If it uses '%gs', it should all just work automatically. But if gcc does something different for thread-local, it's basically useless.
Linus
H. Peter Anvin
reviewerQuoted 11 lines · Linus Torvalds
Quoted 3 lines · H. Peter Anvin
This is clearly better... now the semi-obvious question becomes if there is any way we can get compiler support to do better and migrate to that as the compiler allows.
Well, even if we had compiler support, we'd have to basically then wait forever to make sure everybody has a supported compiler. So I think we're better off not worrying too much about that - it's not going to happen any time in the near future.
Well, we'd have to do something like:
#if __GNUC__ < version
/* current code */
#else
/* new code */
#endif
Quoted 10 lines
I've now tested my patch, and it seems to result in a working kernel too.
Quoted 3 lines
In particular, if I remember right the problem with using
__threadfor percpu was exactly that the current cpuness can change almost anywhere, unless preemption is disabled.That shouldn't matter. If it uses '%gs', it should all just work automatically. But if gcc does something different for thread-local, it's basically useless.
gcc uses %fs by default for __thread (on x86-64) but that can be overridden. I believe someone tried to use it, but found that gcc made the assumption that none of the values could change underneath it, which caused trouble. That wouldn't be an issue for variables like "current".
As I said, in the meantime I really do like your patch.
-hpa
Signature · 2 lines
H. Peter Anvin, Intel Open Source Technology Center I work for Intel. I don't speak on their behalf.
Quoted 8 lines · Linus Torvalds
Quoted 3 lines · H. Peter Anvin
In particular, if I remember right the problem with using
__threadfor percpu was exactly that the current cpuness can change almost anywhere, unless preemption is disabled.That shouldn't matter. If it uses '%gs', it should all just work automatically. But if gcc does something different for thread-local, it's basically useless.
When I tried using __thread for per-cpu variables on ppc64, I found that gcc would sometimes precompute and cache the address of a per-cpu variable even though it could always access the variable using an offset from r13. The cached address was wrong if the task got moved to a different cpu, of course, but there was no way to tell gcc that. Compiler barriers don't help because they say that the contents of variables might have changed, but not their addresses.
So on x86 the concern would be that gcc might do lea %gs:foo,%rbx and then use (%rbx) to refer to foo later on. It would be possible to use __thread for per-task variables rather than having to put all per-task things in the task_struct, but __thread doesn't work for per-cpu variables in my experience.
Paul.
H. Peter Anvin
reviewerQuoted 8 lines · Paul Mackerras
When I tried using
__threadfor per-cpu variables on ppc64, I found that gcc would sometimes precompute and cache the address of a per-cpu variable even though it could always access the variable using an offset from r13. The cached address was wrong if the task got moved to a different cpu, of course, but there was no way to tell gcc that. Compiler barriers don't help because they say that the contents of variables might have changed, but not their addresses.
Quoted 5 lines
So on x86 the concern would be that gcc might do lea %gs:foo,%rbx and then use (%rbx) to refer to foo later on. It would be possible to use
__threadfor per-task variables rather than having to put all per-task things in thetask_struct, but__threaddoesn't work for per-cpu variables in my experience.
You can't actually do "lea %gs:foo,%rbx" (lea doesn't include the segment offset, unfortunately; I asked AMD to change that on 64 bits but, not too surprisingly, they weren't able to make that change.) Getting the address is expensive, but it's obviously possible -- which may have similar bad results. It would be worth experimenting with a little bit, though.
-hpa
Signature · 2 lines
H. Peter Anvin, Intel Open Source Technology Center I work for Intel. I don't speak on their behalf.
Tejun Heo
maintainerHello,
Quoted 6 lines · H. Peter Anvin
You can't actually do "lea %gs:foo,%rbx" (lea doesn't include the segment offset, unfortunately; I asked AMD to change that on 64 bits but, not too surprisingly, they weren't able to make that change.) Getting the address is expensive, but it's obviously possible -- which may have similar bad results. It would be worth experimenting with a little bit, though.
Yeap, this part is strange. I can't understand why it was done that way. Interestingly, the segment override doesn't trigger any exception, it just gets ignored. Is there a way to retrieve %gs value without accessing memory? ie. other than %gs:identity_gs?
Thanks.
Signature · 1 line
tejun
Quoted 5 lines · Tejun Heo
Yeap, this part is strange. I can't understand why it was done that way. Interestingly, the segment override doesn't trigger any exception, it just gets ignored. Is there a way to retrieve %gs value without accessing memory? ie. other than %gs:identity_gs?
No. There's a "load segment limit" instruction, but not a base one. It's intentional - segments are supposed to be "anonymous" in protected mode (in real more of vm86 mode, the base is normally the segment register shifted left by four of course, but even that isn't _strictly_ always true).
You're very much not supposed to look at the base.
Linus
Tejun Heo
maintainerHello, Linus.
Quoted 11 lines · Linus Torvalds
I just noticed another issue on x86 code generation, since I was looking at assembly language generation due to the
do_sigaltstack()kernel stack info leak thing.Our "
get_current()" seriously sucks now that it's a per-cpu variable.Look at the code generated for something like
current->sas_ss_sp = (unsigned long) ss_sp; current->sas_ss_size = ss_size;
Quoted 6 lines
and notice how the code really really sucks:
movq %gs:per_cpu__current_task,%rcx movq %rdx, 1152(%rcx) movq %gs:per_cpu__current_task,%rdx movq %rax, 1160(%rdx)
Right. This isn't new tho. In practive, the current percpu_read() thingies behave identically to the original x86_read_percpu(). 2.6.29 generates about the same code.
(This is from the object file so the offsets haven't been set yet)
(gdb) disassemble block_all_signals
Dump of assembler code for function block_all_signals:
...
0x000000000000168a <block_all_signals+74>: mov %gs:0x0,%rax 0x0000000000001693 <block_all_signals+83>: mov %r12,0x4e0(%rax) 0x000000000000169a <block_all_signals+90>: mov %gs:0x0,%rax 0x00000000000016a3 <block_all_signals+99>: mov %r13,0x4d8(%rax) 0x00000000000016aa <block_all_signals+106>: mov %gs:0x0,%rax 0x00000000000016b3 <block_all_signals+115>: mov %r14,0x4d0(%rax) 0x00000000000016ba <block_all_signals+122>: mov %gs:0x0,%rax 0x00000000000016c3 <block_all_signals+131>: mov 0x488(%rax),%rdi
...
...
Quoted 11 lines
End result: the above horror becomes a more reasonable
movq %gs:per_cpu__current_task,%rax movq %rcx, 1152(%rax) movq %rdx, 1160(%rax)instead (it still doesn't cache it over the whole function, but it's certainly better).
NOTE! I did not test that it all worked. I only looked at the asm, and checked out the improvements. All the ones I looked at looked reasonable.
Cool. I'm currently testing the kernel. It has booted fine on 8-core 2-way NUMA machine and repetetively compiling kernel w/ -j16. Everything seems to work fine till now.
Quoted 1 line
Worthwhile? You be the judge.
I think it's definitely worthwhile. The gain is significant compared to the added miniscule complexity.
"current" is a per-thread variable implemented as a per-cpu variable. Given that we don't have many of them yet and they're accessed via arch-specific accessors, percpu_read_stable() seems like a pretty good solution to me.
If we ever need more thread variables, we might venture into using %fs and maybe __thread if other archs can be converted similarly but I think we're better off with packing such things in task_struct - per-thread is far scarier than per-cpu scalability-wise.
Quoted 6 lines
There's another detail that may be worth looking at: we often get 'current' and '
thread_info' together, and they are _not_ in the same cache-line. It might be worth defining them together in the per-cpu data, and making sure they are in the same cacheline too. In general, we should probably look at which per-pcu variables are hot and read-only, and try to gathe them all together.
Yeap, putting hot ones together would be great. I'm a bit curious why it should be hot _and_ read-only tho. For variables which aren't accessed too often by other cpus, read-onlyness shouldn't matter too much, right?
Quoted 9 lines
From: Linus Torvalds <[email protected]>
Date: Sat, 1 Aug 2009 11:50:54 -0700
Subject: [PATCH] x86-64: Add 'percpu_read_stable()' interface for cacheable accessesThis is very useful for some common things like '
get_current()' and 'get_thread_info()', which can be used multiple times in a function, and where the result is cacheable.Signed-off-by Linus Torvalds <[email protected]>
Do you want to queue it for 2.6.31? Given that the generated code changes compared to the previous kernels (both pre and post percpu stuff), I think it would be safer to queue it for 2.6.32 window. I would be happy to carry it in the percpu tree.
Thanks.
Signature · 1 line
tejun
Quoted 2 lines · Tejun Heo
Do you want to queue it for 2.6.31?
Yeah, no.
Quoted 4 lines
Given that the generated code
changes compared to the previous kernels (both pre and post percpu stuff), I think it would be safer to queue it for 2.6.32 window. I would be happy to carry it in the percpu tree.
Please do. I don't want it for 31, and I do want it to get more testing. I ran with it for a few days, and saw no problems, and it looked obvious enough, but there just isn't any overriding reason for it to be in 31.
Linus
Tejun Heo
maintainerPATCH 1/3 x86: Add 'percpu_read_stable()' interface for cacheable accesses
From: Linus Tolvards <[email protected]>
This is very useful for some common things like 'get_current()' and 'get_thread_info()', which can be used multiple times in a function, and where the result is cacheable.
tj: added comment explaining the difference between percpu_read() and
percpu_read_stable()
---
Three patches queued in my pending tree.
The second patch is a possible bug I've spotted while prepping the third one. The last one puts current_task and kernel_stack into the same cacheline as suggested by Linus. I'll hold for a few days for response and then push them to linux-next.
Ingo, these patches might as well go through x86 tree. If you think that would be better, please let me know.
Thanks.
arch/x86/include/asm/current.h | 2 +- arch/x86/include/asm/percpu.h | 22 ++++++++++++++++------ arch/x86/include/asm/thread_info.h | 2 +- 3 files changed, 18 insertions(+), 8 deletions(-)
arch/x86/include/asm/current.h +1 -1
@@ -11,7 +11,7 @@ DECLARE_PER_CPU(struct task_struct *, current_task); static __always_inline struct task_struct *get_current(void) { -return percpu_read (current_task); +return percpu_read_stable (current_task); }#define current get_current()
arch/x86/include/asm/percpu.h +16 -6
@@ -104,36 +104,46 @@ do { \ } \ } while (0) -#define percpu_from_op (op, var) \ +#define percpu_from_op (op, var, constraint) \ ({ \ typeof(var) ret__; \ switch (sizeof(var)) { \ case 1: \ asm(op "b "__percpu_arg(1)",%0" \ : "=q" (ret__) \ - : "m" (var)); \ + : constraint); \ break; \ case 2: \ asm(op "w "__percpu_arg(1)",%0" \ : "=r" (ret__) \ - : "m" (var)); \ + : constraint); \ break; \ case 4: \ asm(op "l "__percpu_arg(1)",%0" \ : "=r" (ret__) \ - : "m" (var)); \ + : constraint); \ break; \ case 8: \ asm(op "q "__percpu_arg(1)",%0" \ : "=r" (ret__) \ - : "m" (var)); \ + : constraint); \ break; \ default: __bad_percpu_size(); \ } \ ret__; \ }) -#define percpu_read (var) percpu_from_op("mov", per_cpu__##var) +/* +* percpu_read() makes gcc load the percpu variable every time it is +* accessed while percpu_read_stable() allows the value to be cached. +* percpu_read_stable() is more efficient and can be used if its value +* is guaranteed to be valid across cpus. The current users include +* get_current() and get_thread_info() both of which are actually +* per-thread variables implemented as per-cpu variables and thus +* stable for the duration of the respective task. +*/ +#define percpu_read (var) percpu_from_op("mov", per_cpu__##var,"m" (per_cpu__##var)) +#define percpu_read_stable (var) percpu_from_op("mov", per_cpu__##var,"p" (&per_cpu__##var))#define percpu_write (var, val) percpu_to_op("mov", per_cpu__##var, val)#define percpu_add (var, val) percpu_to_op("add", per_cpu__##var, val)#define percpu_sub (var, val) percpu_to_op("sub", per_cpu__##var, val)
arch/x86/include/asm/thread_info.h +1 -1
@@ -213,7 +213,7 @@ DECLARE_PER_CPU(unsigned long, kernel_stack);static inline struct thread_info *current_thread_info (void ) {struct thread_info *ti; - ti = (void *)(percpu_read (kernel_stack) + + ti = (void *)(percpu_read_stable (kernel_stack) +KERNEL_STACK_OFFSET -THREAD_SIZE );return ti; }
Signature · 1 line
1.6.0.2
H. Peter Anvin
reviewerRe: [PATCH 1/3] x86: Add 'percpu_read_stable()' interface for cacheable accesses
Quoted 4 lines · Tejun Heo
Ingo, these patches might as well go through x86 tree. If you think that would be better, please let me know.
Makes sense to me. I'll pull them into x86/percpu.
-hpa
Tejun Heo
maintainerRe: [PATCH 1/3] x86: Add 'percpu_read_stable()' interface for cacheable accesses
Quoted 7 lines · H. Peter Anvin
Quoted 4 lines · Tejun Heo
Ingo, these patches might as well go through x86 tree. If you think that would be better, please let me know.
Makes sense to me. I'll pull them into x86/percpu.
Cool, dropping from my tree then.
Thanks.
Signature · 1 line
tejun
Re: [PATCH 1/3] x86: Add 'percpu_read_stable()' interface for cacheable accesses
Quoted 10 lines · Tejun Heo
Quoted 7 lines · H. Peter Anvin
Quoted 4 lines · Tejun Heo
Ingo, these patches might as well go through x86 tree. If you think that would be better, please let me know.
Makes sense to me. I'll pull them into x86/percpu.
Cool, dropping from my tree then.
We can delegate the contents of x86/percpu to you (the topic branch contains no patches over mainline right now) - i.e. we can pull those bits from you and they could also be in your tree to keep your testing & integration consistent.
Ingo
H. Peter Anvin
reviewerRe: [PATCH 1/3] x86: Add 'percpu_read_stable()' interface for cacheable accesses
Quoted 12 lines · Ingo Molnar
Quoted 7 lines · Tejun Heo
Quoted 5 lines · H. Peter Anvin
Quoted 3 lines · Tejun Heo
Ingo, these patches might as well go through x86 tree. If you think that would be better, please let me know.
Makes sense to me. I'll pull them into x86/percpu.
Cool, dropping from my tree then.
We can delegate the contents of x86/percpu to you (the topic branch contains no patches over mainline right now) - i.e. we can pull those bits from you and they could also be in your tree to keep your testing & integration consistent.
I just pushed out these branches into tip:x86/percpu. We can zap those if there is a tree head you'd rather use.
-hpa
Re: [PATCH 1/3] x86: Add 'percpu_read_stable()' interface for cacheable accesses
Quoted 11 lines · H. Peter Anvin
Quoted 10 lines · Ingo Molnar
Quoted 7 lines · Tejun Heo
Quoted 5 lines · H. Peter Anvin
Quoted 3 lines · Tejun Heo
Ingo, these patches might as well go through x86 tree. If you think that would be better, please let me know.
Makes sense to me. I'll pull them into x86/percpu.
Cool, dropping from my tree then.
Quoted 7 lines
Quoted 5 lines
We can delegate the contents of x86/percpu to you (the topic branch contains no patches over mainline right now) - i.e. we can pull those bits from you and they could also be in your tree to keep your testing & integration consistent.
I just pushed out these branches into tip:x86/percpu.
Thanks! (I'll test it and push it out into -tip:master.)
Quoted 1 line
[...] We can zap those if there is a tree head you'd rather use.
It's fine this way i think.
Tejun: in the future you might want to offer up new x86-only bits based on tip:x86/percpu as git pulls.
Ingo
Re: [PATCH 1/3] x86: Add 'percpu_read_stable()' interface for cacheable accesses
Quoted 19 lines · Ingo Molnar
Quoted 17 lines · H. Peter Anvin
Quoted 15 lines · Ingo Molnar
Quoted 7 lines · Tejun Heo
Quoted 5 lines · H. Peter Anvin
Quoted 3 lines · Tejun Heo
Ingo, these patches might as well go through x86 tree. If you think that would be better, please let me know.
Makes sense to me. I'll pull them into x86/percpu.
Cool, dropping from my tree then.
We can delegate the contents of x86/percpu to you (the topic branch contains no patches over mainline right now) - i.e. we can pull those bits from you and they could also be in your tree to keep your testing & integration consistent.
Quoted 3 lines
Quoted 1 line
I just pushed out these branches into tip:x86/percpu.
Thanks! (I'll test it and push it out into -tip:master.)
-tip testing found that these changes crash colorfully on UP 32-bit (config attached). The first crash is:
[ 0.006255] Initializing cgroup subsys debug [ 0.007003] Initializing cgroup subsys ns [ 0.008007] ------------[ cut here ]------------ [ 0.008998] kernel BUG at kernel/cgroup.c:2841! [ 0.008998] invalid opcode: 0000 [#1] [ 0.008998] last sysfs file: [ 0.008998] Modules linked in: [ 0.008998] [ 0.008998] Pid: -1047415392, comm: Not tainted (2.6.31-rc5-tip-00974-g4bd3d34-dirty #312) System Product Name [ 0.008998] EIP: 0060:[<c1984c86>] EFLAGS: 00010206 CPU: 0 [ 0.008998] EIP is at cgroup_init_subsys+0x82/0xec [ 0.008998] EAX: c1817ac0 EBX: c1920ce0 ECX: c1812631 EDX: ffffffff [ 0.008998] ESI: 00000001 EDI: 00000000 EBP: c1977fc8 ESP: c1977fc4 [ 0.008998] DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068 [ 0.008998] Process (pid: -1047415392, ti=c1976000 task=c191b56c task.ti=00000001) [ 0.008998] Stack: [ 0.008998] c1920ce0 c1977fdc c1984f48 c19a9da0 00099800 c196f000 c1977fec c19789d2 [ 0.008998] <0> c19a9da0 00020800 c1977ff8 c197832b 00020800 01cf0003 00000000 [ 0.008998] Call Trace: [ 0.008998] [<c1984f48>] ? cgroup_init+0x105/0x127 [ 0.008998] [<c19789d2>] ? start_kernel+0x270/0x2df [ 0.008998] [<c197832b>] ? i386_start_kernel+0x65/0x6a [ 0.008998] Code: 00 c7 42 08 00 00 00 00 c7 42 0c 00 00 00 00 8d 42 08 80 4a 08 01 8b 43 28 83 c0 0c 8b 0c 85 24 64 af c1 85 c9 74 08 0f 0b eb fe <0f> 0b eb fe 89 14 85 24 64 af c1 8b 53 28 8b 04 95 54 64 af c1 [ 0.008998] EIP: [<c1984c86>] cgroup_init_subsys+0x82/0xec SS:ESP 0068:c1977fc4 [ 0.009007] ---[ end trace 4eaa2a86a8e2da22 ]--- [ 0.010001] Kernel panic - not syncing: Fatal exception [ 0.011002] Pid: -1047415392, comm: Tainted: G D 2.6.31-rc5-tip-00974-g4bd3d34-dirty #312 [ 0.012000] Call Trace: [ 0.013003] [<c1657a67>] ? printk+0x15/0x1e [ 0.014002] [<c165799b>] panic+0x3e/0xf5 [ 0.015003] [<c165a14d>] oops_end+0x6d/0xa0 [ 0.016003] [<c101f60f>] die+0x4f/0x70 [ 0.018002] [<c1659951>] do_trap+0x81/0xd0 [ 0.019001] [<c101df90>] ? do_invalid_op+0x0/0x90 [ 0.020001] [<c101e005>] do_invalid_op+0x75/0x90 [ 0.021001] [<c1984c86>] ? cgroup_init_subsys+0x82/0xec [ 0.022002] [<c101d0ed>] ? restore_all_notrace+0x0/0x18 [ 0.023001] [<c103f592>] ? vprintk+0xf2/0x300 [ 0.024000] [<c101df90>] ? do_invalid_op+0x0/0x90 [ 0.025002] [<c122c690>] ? trace_hardirqs_off_thunk+0xc/0x1c [ 0.026000] [<c16596f3>] error_code+0x63/0x70 [ 0.027000] [<c101df90>] ? do_invalid_op+0x0/0x90 [ 0.028000] [<c1984c86>] ? cgroup_init_subsys+0x82/0xec [ 0.029000] [<c1984f48>] cgroup_init+0x105/0x127 [ 0.029999] [<c19789d2>] start_kernel+0x270/0x2df [ 0.030999] [<c197832b>] i386_start_kernel+0x65/0x6a
Followed by a string of other crashes. So i've excluded them from tip:master for now.
And since these changes need rebasing anyway, could we also fix a small detail and make the patch titles more consistent:
df80174: x86: collect hot percpu variables into one cacheline 150bc29: x86, percpu: fix DECLARE/DEFINE_PER_CPU_PAGE_ALIGNED()
b32f4db: x86: Add 'percpu_read_stable()' interface for cacheable accesses
It should all be "x86, percpu: " prefixed, followed by a capitalized verb.
Thanks,
Ingo
#
# Automatically generated make config: don't edit # Linux kernel version: 2.6.31-rc5
# Mon Aug 3 08:52:34 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_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_BUG=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=yCONFIG_X86_32_LAZY_GS=yCONFIG_KTIME_SCALAR=y CONFIG_BOOTPARAM_SUPPORT_NOT_WANTED=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_CONSTRUCTORS=y
#
# General setup
#CONFIG_EXPERIMENTAL=yCONFIG_BROKEN_BOOT_ALLOWED4=yCONFIG_BROKEN_BOOT_ALLOWED3=yCONFIG_BROKEN_BOOT_ALLOWED2=yCONFIG_BROKEN_BOOT_DISALLOWED=yCONFIG_BROKEN_BOOT_EUROPE=yCONFIG_BROKEN_BOOT_TITAN=yCONFIG_BROKEN_ON_SMP=yCONFIG_INIT_ENV_ARG_LIMIT=32CONFIG_LOCALVERSION=""CONFIG_LOCALVERSION_AUTO=yCONFIG_HAVE_KERNEL_GZIP=yCONFIG_HAVE_KERNEL_BZIP2=yCONFIG_HAVE_KERNEL_LZMA=y
# CONFIG_KERNEL_GZIP is not set
# CONFIG_KERNEL_BZIP2 is not setCONFIG_KERNEL_LZMA=yCONFIG_SWAP=yCONFIG_SYSVIPC=yCONFIG_SYSVIPC_SYSCTL=yCONFIG_POSIX_MQUEUE=yCONFIG_POSIX_MQUEUE_SYSCTL=y
# CONFIG_BSD_PROCESS_ACCT is not setCONFIG_TASKSTATS=yCONFIG_TASK_DELAY_ACCT=yCONFIG_TASK_XACCT=yCONFIG_TASK_IO_ACCOUNTING=yCONFIG_AUDIT=yCONFIG_AUDITSYSCALL=yCONFIG_AUDIT_TREE=y
#
# RCU Subsystem
#CONFIG_TREE_RCU=y
# CONFIG_PREEMPT_RCU is not setCONFIG_RCU_TRACE=yCONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not setCONFIG_TREE_RCU_TRACE=y
# CONFIG_PREEMPT_RCU_TRACE is not setCONFIG_IKCONFIG=yCONFIG_IKCONFIG_PROC=yCONFIG_LOG_BUF_SHIFT=20CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
# CONFIG_GROUP_SCHED is not setCONFIG_CGROUPS=yCONFIG_CGROUP_DEBUG=yCONFIG_CGROUP_NS=yCONFIG_CGROUP_FREEZER=yCONFIG_CGROUP_DEVICE=y
# CONFIG_CPUSETS is not set
# CONFIG_CGROUP_CPUACCT is not set
# CONFIG_RESOURCE_COUNTERS 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=y
# CONFIG_PID_NS is not set
# CONFIG_NET_NS is not setCONFIG_BLK_DEV_INITRD=yCONFIG_INITRAMFS_SOURCE=""CONFIG_RD_GZIP=yCONFIG_RD_BZIP2=yCONFIG_RD_LZMA=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not setCONFIG_SYSCTL=yCONFIG_ANON_INODES=y
# CONFIG_EMBEDDED is not setCONFIG_UID16=yCONFIG_SYSCTL_SYSCALL=yCONFIG_KALLSYMS=yCONFIG_KALLSYMS_EXTRA_PASS=yCONFIG_HOTPLUG=yCONFIG_PRINTK=yCONFIG_BUG=yCONFIG_ELF_CORE=yCONFIG_PCSPKR_PLATFORM=yCONFIG_BASE_FULL=yCONFIG_FUTEX=yCONFIG_EPOLL=yCONFIG_SIGNALFD=yCONFIG_TIMERFD=yCONFIG_EVENTFD=yCONFIG_SHMEM=yCONFIG_AIO=y
#
# Performance Counters
#CONFIG_VM_EVENT_COUNTERS=yCONFIG_PCI_QUIRKS=yCONFIG_SLUB_DEBUG=y
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not setCONFIG_SLUB=y
# CONFIG_SLOB is not setCONFIG_PROFILING=yCONFIG_TRACEPOINTS=yCONFIG_MARKERS=y
# CONFIG_OPROFILE is not setCONFIG_HAVE_OPROFILE=yCONFIG_KPROBES=yCONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=yCONFIG_KRETPROBES=yCONFIG_HAVE_IOREMAP_PROT=yCONFIG_HAVE_KPROBES=yCONFIG_HAVE_KRETPROBES=yCONFIG_HAVE_ARCH_TRACEHOOK=yCONFIG_HAVE_DMA_ATTRS=yCONFIG_HAVE_DMA_API_DEBUG=yCONFIG_HAVE_HW_BREAKPOINT=y
#
# GCOV-based kernel profiling
#CONFIG_SLOW_WORK=yCONFIG_HAVE_GENERIC_DMA_COHERENT=yCONFIG_SLABINFO=yCONFIG_RT_MUTEXES=yCONFIG_BASE_SMALL=0CONFIG_MODULES=yCONFIG_MODULE_FORCE_LOAD=yCONFIG_MODULE_UNLOAD=yCONFIG_MODULE_FORCE_UNLOAD=yCONFIG_MODVERSIONS=yCONFIG_MODULE_SRCVERSION_ALL=yCONFIG_BLOCK=yCONFIG_LBDAF=y
# CONFIG_BLK_DEV_BSG is not setCONFIG_BLK_DEV_INTEGRITY=y
#
# IO Schedulers
#CONFIG_IOSCHED_NOOP=yCONFIG_IOSCHED_AS=mCONFIG_IOSCHED_DEADLINE=yCONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not setCONFIG_DEFAULT_DEADLINE=y
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not setCONFIG_DEFAULT_IOSCHED="deadline"CONFIG_PREEMPT_NOTIFIERS=yCONFIG_FREEZER=y
#
# Processor type and features
#CONFIG_TICK_ONESHOT=yCONFIG_NO_HZ=yCONFIG_HIGH_RES_TIMERS=yCONFIG_GENERIC_CLOCKEVENTS_BUILD=y
# CONFIG_SMP_SUPPORT is not setCONFIG_X86_EXTENDED_PLATFORM=yCONFIG_X86_ELAN=yCONFIG_X86_RDC321X=yCONFIG_SCHED_OMIT_FRAME_POINTER=y
# CONFIG_PARAVIRT_GUEST is not setCONFIG_MEMTEST=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_MINIMUM_CPU_FAMILY=4CONFIG_X86_DEBUGCTLMSR=yCONFIG_CPU_SUP_INTEL=yCONFIG_CPU_SUP_CYRIX_32=yCONFIG_CPU_SUP_AMD=yCONFIG_CPU_SUP_CENTAUR=yCONFIG_CPU_SUP_TRANSMETA_32=yCONFIG_CPU_SUP_UMC_32=y
# CONFIG_X86_DS is not set
# CONFIG_HPET_TIMER is not setCONFIG_DMI=y
# CONFIG_IOMMU_HELPER is not set
# CONFIG_IOMMU_API is not setCONFIG_NR_CPUS=1
# CONFIG_PREEMPT_NONE is not setCONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
# CONFIG_X86_UP_APIC is not setCONFIG_X86_MCE=y
# CONFIG_X86_ANCIENT_MCE is not setCONFIG_X86_MCE_INJECT=mCONFIG_VM86=yCONFIG_I8K=yCONFIG_X86_REBOOTFIXUPS=y
# CONFIG_MICROCODE is not setCONFIG_X86_MSR=m
# CONFIG_X86_CPUID is not setCONFIG_X86_CPU_DEBUG=mCONFIG_UP_WANTED_1=yCONFIG_UP_WANTED_2=yCONFIG_UP_WANTED=y
# CONFIG_NOHIGHMEM is not setCONFIG_HIGHMEM4G=y
# CONFIG_HIGHMEM64G is not setCONFIG_PAGE_OFFSET=0xC0000000CONFIG_HIGHMEM=y
# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not setCONFIG_ARCH_FLATMEM_ENABLE=yCONFIG_ARCH_SPARSEMEM_ENABLE=yCONFIG_ARCH_SELECT_MEMORY_MODEL=yCONFIG_ILLEGAL_POINTER_VALUE=0CONFIG_SELECT_MEMORY_MODEL=yCONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not setCONFIG_FLATMEM=yCONFIG_FLAT_NODE_MEM_MAP=yCONFIG_SPARSEMEM_STATIC=yCONFIG_PAGEFLAGS_EXTENDED=yCONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_PHYS_ADDR_T_64BIT is not setCONFIG_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=4096
# CONFIG_HIGHPTE is not setCONFIG_X86_CHECK_BIOS_CORRUPTION=yCONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
# CONFIG_X86_RESERVE_LOW_64K is not setCONFIG_MATH_EMULATION=yCONFIG_MTRR=y
# CONFIG_MTRR_SANITIZER is not setCONFIG_X86_PAT=yCONFIG_SECCOMP=y
# CONFIG_CC_STACKPROTECTOR is not set
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not setCONFIG_HZ_1000=yCONFIG_HZ=1000CONFIG_SCHED_HRTICK=yCONFIG_KEXEC=y
# CONFIG_CRASH_DUMP is not set
# CONFIG_KEXEC_JUMP is not setCONFIG_PHYSICAL_START=0x1000000CONFIG_RELOCATABLE=yCONFIG_X86_NEED_RELOCS=yCONFIG_PHYSICAL_ALIGN=0x1000000CONFIG_COMPAT_VDSO=yCONFIG_CMDLINE_BOOL=yCONFIG_CMDLINE=""CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
#
# Power management and ACPI options
#CONFIG_PM=yCONFIG_PM_DEBUG=y
# CONFIG_PM_VERBOSE is not setCONFIG_CAN_PM_TRACE=yCONFIG_PM_TRACE=yCONFIG_PM_TRACE_RTC=yCONFIG_PM_SLEEP=y
# CONFIG_SUSPEND is not setCONFIG_HIBERNATION_NVS=yCONFIG_HIBERNATION=yCONFIG_PM_STD_PARTITION=""
# CONFIG_ACPI is not setCONFIG_X86_APM_BOOT=yCONFIG_APM=yCONFIG_APM_IGNORE_USER_SUSPEND=yCONFIG_APM_DO_ENABLE=yCONFIG_APM_CPU_IDLE=yCONFIG_APM_DISPLAY_BLANK=yCONFIG_APM_ALLOW_INTS=y
#
# 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=y
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GOMMCONFIG is not set
# CONFIG_PCI_GODIRECT is not setCONFIG_PCI_GOOLPC=y
# CONFIG_PCI_GOANY is not setCONFIG_PCI_BIOS=yCONFIG_PCI_DIRECT=yCONFIG_PCI_OLPC=yCONFIG_PCI_DOMAINS=yCONFIG_PCIEPORTBUS=yCONFIG_HOTPLUG_PCI_PCIE=mCONFIG_PCIEAER=yCONFIG_PCIE_ECRC=yCONFIG_PCIEAER_INJECT=mCONFIG_PCIEASPM=yCONFIG_PCIEASPM_DEBUG=y
# CONFIG_ARCH_SUPPORTS_MSI is not setCONFIG_PCI_LEGACY=yCONFIG_PCI_STUB=m
# CONFIG_PCI_IOV is not setCONFIG_ISA_DMA_API=yCONFIG_ISA=yCONFIG_EISA=yCONFIG_EISA_VLB_PRIMING=y
# CONFIG_EISA_PCI_EISA is not set
# CONFIG_EISA_VIRTUAL_ROOT is not setCONFIG_EISA_NAMES=yCONFIG_MCA=yCONFIG_MCA_LEGACY=yCONFIG_MCA_PROC_FS=y
CONFIG_SCx200=m
CONFIG_SCx200HR_TIMER=mCONFIG_OLPC=y
# CONFIG_PCCARD is not setCONFIG_HOTPLUG_PCI=mCONFIG_HOTPLUG_PCI_FAKE=mCONFIG_HOTPLUG_PCI_COMPAQ=mCONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=yCONFIG_HOTPLUG_PCI_CPCI=y
# CONFIG_HOTPLUG_PCI_CPCI_ZT5550 is not setCONFIG_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=y
# CONFIG_BINFMT_AOUT is not setCONFIG_BINFMT_MISC=mCONFIG_HAVE_ATOMIC_IOMAP=yCONFIG_NET=y
#
# Networking options
#CONFIG_PACKET=yCONFIG_PACKET_MMAP=yCONFIG_UNIX=yCONFIG_XFRM=y
# CONFIG_XFRM_USER is not setCONFIG_XFRM_SUB_POLICY=yCONFIG_XFRM_MIGRATE=y
# CONFIG_XFRM_STATISTICS is not setCONFIG_XFRM_IPCOMP=mCONFIG_NET_KEY=yCONFIG_NET_KEY_MIGRATE=yCONFIG_INET=yCONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not setCONFIG_IP_FIB_HASH=y
# CONFIG_IP_PNP is not setCONFIG_NET_IPIP=m
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not setCONFIG_ARPD=yCONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not setCONFIG_INET_ESP=yCONFIG_INET_IPCOMP=mCONFIG_INET_XFRM_TUNNEL=mCONFIG_INET_TUNNEL=mCONFIG_INET_XFRM_MODE_TRANSPORT=mCONFIG_INET_XFRM_MODE_TUNNEL=mCONFIG_INET_XFRM_MODE_BEET=mCONFIG_INET_LRO=yCONFIG_INET_DIAG=yCONFIG_INET_TCP_DIAG=yCONFIG_TCP_CONG_ADVANCED=yCONFIG_TCP_CONG_BIC=y
# CONFIG_TCP_CONG_CUBIC is not set
# CONFIG_TCP_CONG_WESTWOOD is not set
# CONFIG_TCP_CONG_HTCP is not setCONFIG_TCP_CONG_HSTCP=m
# CONFIG_TCP_CONG_HYBLA is not setCONFIG_TCP_CONG_VEGAS=mCONFIG_TCP_CONG_SCALABLE=yCONFIG_TCP_CONG_LP=yCONFIG_TCP_CONG_VENO=y
# CONFIG_TCP_CONG_YEAH is not set
# CONFIG_TCP_CONG_ILLINOIS is not setCONFIG_DEFAULT_BIC=y
# CONFIG_DEFAULT_CUBIC is not set
# CONFIG_DEFAULT_HTCP is not set
# CONFIG_DEFAULT_VEGAS is not set
# CONFIG_DEFAULT_WESTWOOD is not set
# CONFIG_DEFAULT_RENO is not setCONFIG_DEFAULT_TCP_CONG="bic"
# CONFIG_TCP_MD5SIG is not set
# CONFIG_IPV6 is not set
# CONFIG_NETLABEL is not set
# CONFIG_NETWORK_SECMARK is not setCONFIG_NETFILTER=yCONFIG_NETFILTER_DEBUG=yCONFIG_NETFILTER_ADVANCED=yCONFIG_BRIDGE_NETFILTER=y
#
# Core Netfilter Configuration
#CONFIG_NETFILTER_NETLINK=m
# CONFIG_NETFILTER_NETLINK_QUEUE is not setCONFIG_NETFILTER_NETLINK_LOG=m
# CONFIG_NF_CONNTRACK is not setCONFIG_NETFILTER_XTABLES=y
# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
# CONFIG_NETFILTER_XT_TARGET_DSCP is not setCONFIG_NETFILTER_XT_TARGET_HL=m
# CONFIG_NETFILTER_XT_TARGET_LED is not setCONFIG_NETFILTER_XT_TARGET_MARK=yCONFIG_NETFILTER_XT_TARGET_NFLOG=mCONFIG_NETFILTER_XT_TARGET_NFQUEUE=mCONFIG_NETFILTER_XT_TARGET_RATEEST=yCONFIG_NETFILTER_XT_TARGET_TRACE=mCONFIG_NETFILTER_XT_TARGET_TCPMSS=yCONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
# CONFIG_NETFILTER_XT_MATCH_COMMENT is not setCONFIG_NETFILTER_XT_MATCH_DCCP=m
# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
# CONFIG_NETFILTER_XT_MATCH_ESP is not setCONFIG_NETFILTER_XT_MATCH_HASHLIMIT=mCONFIG_NETFILTER_XT_MATCH_HL=yCONFIG_NETFILTER_XT_MATCH_IPRANGE=mCONFIG_NETFILTER_XT_MATCH_LENGTH=y
# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
# CONFIG_NETFILTER_XT_MATCH_MAC is not setCONFIG_NETFILTER_XT_MATCH_MARK=yCONFIG_NETFILTER_XT_MATCH_MULTIPORT=mCONFIG_NETFILTER_XT_MATCH_OWNER=mCONFIG_NETFILTER_XT_MATCH_POLICY=y
# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not setCONFIG_NETFILTER_XT_MATCH_PKTTYPE=mCONFIG_NETFILTER_XT_MATCH_QUOTA=mCONFIG_NETFILTER_XT_MATCH_RATEEST=yCONFIG_NETFILTER_XT_MATCH_REALM=yCONFIG_NETFILTER_XT_MATCH_RECENT=mCONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT=yCONFIG_NETFILTER_XT_MATCH_SCTP=m
# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not setCONFIG_NETFILTER_XT_MATCH_STRING=mCONFIG_NETFILTER_XT_MATCH_TCPMSS=mCONFIG_NETFILTER_XT_MATCH_TIME=yCONFIG_NETFILTER_XT_MATCH_U32=m
# CONFIG_NETFILTER_XT_MATCH_OSF is not set
# CONFIG_IP_VS is not set
#
# IP: Netfilter Configuration
#
# CONFIG_NF_DEFRAG_IPV4 is not setCONFIG_IP_NF_QUEUE=yCONFIG_IP_NF_IPTABLES=m
# CONFIG_IP_NF_MATCH_ADDRTYPE is not setCONFIG_IP_NF_MATCH_AH=m
# CONFIG_IP_NF_MATCH_ECN is not set
# CONFIG_IP_NF_MATCH_TTL is not setCONFIG_IP_NF_FILTER=mCONFIG_IP_NF_TARGET_REJECT=mCONFIG_IP_NF_TARGET_LOG=mCONFIG_IP_NF_TARGET_ULOG=mCONFIG_IP_NF_MANGLE=m
# CONFIG_IP_NF_TARGET_ECN is not setCONFIG_IP_NF_TARGET_TTL=mCONFIG_IP_NF_RAW=mCONFIG_IP_NF_SECURITY=mCONFIG_IP_NF_ARPTABLES=y
# CONFIG_IP_NF_ARPFILTER is not setCONFIG_IP_NF_ARP_MANGLE=m
#
# DECnet: Netfilter Configuration
#
# CONFIG_DECNET_NF_GRABULATOR is not setCONFIG_BRIDGE_NF_EBTABLES=mCONFIG_BRIDGE_EBT_BROUTE=mCONFIG_BRIDGE_EBT_T_FILTER=mCONFIG_BRIDGE_EBT_T_NAT=m
# CONFIG_BRIDGE_EBT_802_3 is not set
# CONFIG_BRIDGE_EBT_AMONG is not setCONFIG_BRIDGE_EBT_ARP=m
# CONFIG_BRIDGE_EBT_IP is not setCONFIG_BRIDGE_EBT_LIMIT=m
# CONFIG_BRIDGE_EBT_MARK is not setCONFIG_BRIDGE_EBT_PKTTYPE=mCONFIG_BRIDGE_EBT_STP=m
# CONFIG_BRIDGE_EBT_VLAN is not setCONFIG_BRIDGE_EBT_ARPREPLY=m
# CONFIG_BRIDGE_EBT_DNAT is not setCONFIG_BRIDGE_EBT_MARK_T=mCONFIG_BRIDGE_EBT_REDIRECT=m
# CONFIG_BRIDGE_EBT_SNAT is not setCONFIG_BRIDGE_EBT_LOG=mCONFIG_BRIDGE_EBT_ULOG=m
# CONFIG_BRIDGE_EBT_NFLOG is not set
# CONFIG_IP_DCCP is not setCONFIG_IP_SCTP=y
# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
# CONFIG_SCTP_HMAC_NONE is not set
# CONFIG_SCTP_HMAC_SHA1 is not setCONFIG_SCTP_HMAC_MD5=y
# CONFIG_TIPC is not setCONFIG_ATM=mCONFIG_ATM_CLIP=m
# CONFIG_ATM_CLIP_NO_ICMP is not setCONFIG_ATM_LANE=m
# CONFIG_ATM_MPOA is not setCONFIG_ATM_BR2684=m
# CONFIG_ATM_BR2684_IPFILTER is not setCONFIG_STP=yCONFIG_GARP=mCONFIG_BRIDGE=yCONFIG_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=yCONFIG_DECNET=yCONFIG_DECNET_ROUTER=yCONFIG_LLC=yCONFIG_LLC2=yCONFIG_IPX=m
# CONFIG_IPX_INTERN is not set
# CONFIG_ATALK is not setCONFIG_X25=y
# CONFIG_LAPB is not setCONFIG_ECONET=yCONFIG_ECONET_AUNUDP=yCONFIG_ECONET_NATIVE=yCONFIG_WAN_ROUTER=mCONFIG_PHONET=m
# CONFIG_IEEE802154 is not setCONFIG_NET_SCHED=y
#
# Queueing/Scheduling
#CONFIG_NET_SCH_CBQ=y
# CONFIG_NET_SCH_HTB is not setCONFIG_NET_SCH_HFSC=m
# CONFIG_NET_SCH_ATM is not setCONFIG_NET_SCH_PRIO=yCONFIG_NET_SCH_MULTIQ=mCONFIG_NET_SCH_RED=m
# CONFIG_NET_SCH_SFQ is not setCONFIG_NET_SCH_TEQL=mCONFIG_NET_SCH_TBF=mCONFIG_NET_SCH_GRED=mCONFIG_NET_SCH_DSMARK=mCONFIG_NET_SCH_NETEM=mCONFIG_NET_SCH_DRR=mCONFIG_NET_SCH_INGRESS=y
#
# Classification
#CONFIG_NET_CLS=y
# CONFIG_NET_CLS_BASIC is not set
# CONFIG_NET_CLS_TCINDEX is not setCONFIG_NET_CLS_ROUTE4=mCONFIG_NET_CLS_ROUTE=y
# CONFIG_NET_CLS_FW is not setCONFIG_NET_CLS_U32=yCONFIG_CLS_U32_PERF=y
# CONFIG_CLS_U32_MARK is not setCONFIG_NET_CLS_RSVP=mCONFIG_NET_CLS_RSVP6=yCONFIG_NET_CLS_FLOW=yCONFIG_NET_CLS_CGROUP=yCONFIG_NET_EMATCH=yCONFIG_NET_EMATCH_STACK=32CONFIG_NET_EMATCH_CMP=mCONFIG_NET_EMATCH_NBYTE=yCONFIG_NET_EMATCH_U32=m
# CONFIG_NET_EMATCH_META is not setCONFIG_NET_EMATCH_TEXT=yCONFIG_NET_CLS_ACT=yCONFIG_NET_ACT_POLICE=y
# CONFIG_NET_ACT_GACT is not setCONFIG_NET_ACT_MIRRED=yCONFIG_NET_ACT_IPT=mCONFIG_NET_ACT_NAT=m
# CONFIG_NET_ACT_PEDIT is not setCONFIG_NET_ACT_SIMP=y
# CONFIG_NET_ACT_SKBEDIT is not setCONFIG_NET_CLS_IND=yCONFIG_NET_SCH_FIFO=yCONFIG_DCB=y
#
# Network testing
#CONFIG_NET_PKTGEN=mCONFIG_NET_TCPPROBE=yCONFIG_NET_DROP_MONITOR=yCONFIG_HAMRADIO=y
#
# Packet Radio protocols
#
# CONFIG_AX25 is not setCONFIG_CAN=mCONFIG_CAN_RAW=m
# CONFIG_CAN_BCM is not set
#
# CAN Device Drivers
#CONFIG_CAN_VCAN=mCONFIG_CAN_DEV=mCONFIG_CAN_CALC_BITTIMING=y
# CONFIG_CAN_SJA1000 is not setCONFIG_CAN_DEBUG_DEVICES=yCONFIG_IRDA=m
#
# IrDA protocols
#CONFIG_IRLAN=mCONFIG_IRNET=mCONFIG_IRCOMM=mCONFIG_IRDA_ULTRA=y
#
# IrDA options
#
# CONFIG_IRDA_CACHE_LAST_LSAP is not setCONFIG_IRDA_FAST_RR=yCONFIG_IRDA_DEBUG=y
#
# Infrared-port device drivers
#
#
# SIR device drivers
#
# CONFIG_IRTTY_SIR is not set
#
# Dongle support
#CONFIG_KINGSUN_DONGLE=mCONFIG_KSDAZZLE_DONGLE=mCONFIG_KS959_DONGLE=m
#
# FIR device drivers
#CONFIG_USB_IRDA=mCONFIG_SIGMATEL_FIR=mCONFIG_NSC_FIR=mCONFIG_WINBOND_FIR=mCONFIG_TOSHIBA_FIR=mCONFIG_SMC_IRCC_FIR=mCONFIG_ALI_FIR=m
# CONFIG_VLSI_FIR is not setCONFIG_VIA_FIR=mCONFIG_MCS_FIR=mCONFIG_BT=y
# CONFIG_BT_L2CAP is not set
# CONFIG_BT_SCO is not set
#
# Bluetooth device drivers
#CONFIG_BT_HCIBTUSB=mCONFIG_BT_HCIUART=m
# CONFIG_BT_HCIUART_H4 is not set
# CONFIG_BT_HCIUART_BCSP is not setCONFIG_BT_HCIUART_LL=yCONFIG_BT_HCIBCM203X=yCONFIG_BT_HCIBPA10X=mCONFIG_BT_HCIBFUSB=mCONFIG_BT_HCIVHCI=y
# CONFIG_AF_RXRPC is not setCONFIG_FIB_RULES=yCONFIG_WIRELESS=yCONFIG_CFG80211=mCONFIG_CFG80211_REG_DEBUG=yCONFIG_CFG80211_DEBUGFS=y
# CONFIG_WIRELESS_OLD_REGULATORY is not setCONFIG_WIRELESS_EXT=yCONFIG_WIRELESS_EXT_SYSFS=yCONFIG_LIB80211=yCONFIG_LIB80211_CRYPT_WEP=yCONFIG_LIB80211_CRYPT_CCMP=yCONFIG_LIB80211_CRYPT_TKIP=yCONFIG_LIB80211_DEBUG=yCONFIG_MAC80211=mCONFIG_MAC80211_DEFAULT_PS=yCONFIG_MAC80211_DEFAULT_PS_VALUE=1
#
# Rate control algorithm selection
#CONFIG_MAC80211_RC_MINSTREL=y
# CONFIG_MAC80211_RC_DEFAULT_PID is not setCONFIG_MAC80211_RC_DEFAULT_MINSTREL=yCONFIG_MAC80211_RC_DEFAULT="minstrel"CONFIG_MAC80211_LEDS=yCONFIG_MAC80211_DEBUGFS=yCONFIG_MAC80211_DEBUG_MENU=yCONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT=yCONFIG_MAC80211_NOINLINE=yCONFIG_MAC80211_VERBOSE_DEBUG=y
# CONFIG_MAC80211_HT_DEBUG is not set
# CONFIG_MAC80211_TKIP_DEBUG is not setCONFIG_MAC80211_IBSS_DEBUG=y
# CONFIG_MAC80211_VERBOSE_PS_DEBUG is not set
# CONFIG_MAC80211_DEBUG_COUNTERS is not set
# CONFIG_WIMAX is not setCONFIG_RFKILL=yCONFIG_RFKILL_LEDS=yCONFIG_RFKILL_INPUT=y
#
# Device Drivers
#
#
# Generic Driver Options
#CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"CONFIG_STANDALONE=yCONFIG_PREVENT_FIRMWARE_BUILD=yCONFIG_FW_LOADER=yCONFIG_FIRMWARE_IN_KERNEL=yCONFIG_EXTRA_FIRMWARE=""
# CONFIG_SYS_HYPERVISOR is not setCONFIG_CONNECTOR=mCONFIG_PARPORT=mCONFIG_PARPORT_PC=mCONFIG_PARPORT_SERIAL=mCONFIG_PARPORT_PC_FIFO=yCONFIG_PARPORT_PC_SUPERIO=y
# CONFIG_PARPORT_GSC is not setCONFIG_PARPORT_AX88796=m
# CONFIG_PARPORT_1284 is not setCONFIG_PARPORT_NOT_PC=y
# CONFIG_PNP is not setCONFIG_BLK_DEV=yCONFIG_BLK_DEV_FD=mCONFIG_BLK_DEV_XD=mCONFIG_BLK_CPQ_DA=y
# CONFIG_BLK_CPQ_CISS_DA is not setCONFIG_BLK_DEV_DAC960=m
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not setCONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not setCONFIG_BLK_DEV_NBD=yCONFIG_BLK_DEV_OSD=mCONFIG_BLK_DEV_SX8=mCONFIG_BLK_DEV_UB=m
# CONFIG_BLK_DEV_RAM is not setCONFIG_CDROM_PKTCDVD=mCONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
# CONFIG_ATA_OVER_ETH is not setCONFIG_VIRTIO_BLK=m
# CONFIG_BLK_DEV_HD is not set
# CONFIG_MISC_DEVICES is not setCONFIG_TIFM_CORE=mCONFIG_EEPROM_93CX6=mCONFIG_HAVE_IDE=y
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not setCONFIG_SCSI=yCONFIG_SCSI_DMA=y
# CONFIG_SCSI_TGT is not setCONFIG_SCSI_NETLINK=y
# CONFIG_SCSI_PROC_FS is not set
#
# SCSI support type (disk, tape, CD-ROM)
#CONFIG_BLK_DEV_SD=yCONFIG_CHR_DEV_ST=mCONFIG_CHR_DEV_OSST=mCONFIG_BLK_DEV_SR=mCONFIG_BLK_DEV_SR_VENDOR=yCONFIG_CHR_DEV_SG=y
# CONFIG_CHR_DEV_SCH is not setCONFIG_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=m
# CONFIG_SCSI_ISCSI_ATTRS is not setCONFIG_SCSI_SAS_ATTRS=yCONFIG_SCSI_SAS_LIBSAS=yCONFIG_SCSI_SAS_ATA=yCONFIG_SCSI_SAS_HOST_SMP=yCONFIG_SCSI_SAS_LIBSAS_DEBUG=y
# CONFIG_SCSI_LOWLEVEL is not setCONFIG_SCSI_AIC7XXX=yCONFIG_SCSI_DH=yCONFIG_SCSI_DH_RDAC=yCONFIG_SCSI_DH_HP_SW=mCONFIG_SCSI_DH_EMC=yCONFIG_SCSI_DH_ALUA=mCONFIG_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_SATA_PMP=yCONFIG_SATA_AHCI=y
# CONFIG_SATA_SIL24 is not setCONFIG_ATA_SFF=yCONFIG_SATA_SVW=yCONFIG_ATA_PIIX=y
# CONFIG_SATA_MV is not setCONFIG_SATA_NV=yCONFIG_PDC_ADMA=yCONFIG_SATA_QSTOR=mCONFIG_SATA_PROMISE=mCONFIG_SATA_SX4=m
# CONFIG_SATA_SIL is not setCONFIG_SATA_SIS=y
# CONFIG_SATA_ULI is not setCONFIG_SATA_VIA=yCONFIG_SATA_VITESSE=mCONFIG_SATA_INIC162X=y
# CONFIG_PATA_ALI is not setCONFIG_PATA_AMD=yCONFIG_PATA_ARTOP=mCONFIG_PATA_ATIIXP=m
# CONFIG_PATA_CMD640_PCI is not setCONFIG_PATA_CMD64X=y
# CONFIG_PATA_CS5520 is not setCONFIG_PATA_CS5530=mCONFIG_PATA_CS5535=yCONFIG_PATA_CS5536=yCONFIG_PATA_CYPRESS=yCONFIG_PATA_EFAR=yCONFIG_ATA_GENERIC=mCONFIG_PATA_HPT366=yCONFIG_PATA_HPT37X=y
# CONFIG_PATA_HPT3X2N is not setCONFIG_PATA_HPT3X3=mCONFIG_PATA_HPT3X3_DMA=y
# CONFIG_PATA_IT821X is not setCONFIG_PATA_IT8213=mCONFIG_PATA_JMICRON=mCONFIG_PATA_LEGACY=m
# CONFIG_PATA_TRIFLEX is not setCONFIG_PATA_MARVELL=y
# CONFIG_PATA_MPIIX is not setCONFIG_PATA_OLDPIIX=yCONFIG_PATA_NETCELL=mCONFIG_PATA_NINJA32=m
# CONFIG_PATA_NS87410 is not setCONFIG_PATA_NS87415=yCONFIG_PATA_OPTI=y
# CONFIG_PATA_OPTIDMA is not setCONFIG_PATA_PDC_OLD=mCONFIG_PATA_QDI=yCONFIG_PATA_RADISYS=yCONFIG_PATA_RZ1000=y
# CONFIG_PATA_SC1200 is not setCONFIG_PATA_SERVERWORKS=yCONFIG_PATA_PDC2027X=y
# CONFIG_PATA_SIL680 is not setCONFIG_PATA_SIS=y
# CONFIG_PATA_VIA is not setCONFIG_PATA_WINBOND=mCONFIG_PATA_WINBOND_VLB=mCONFIG_PATA_SCH=mCONFIG_MD=yCONFIG_BLK_DEV_MD=y
# CONFIG_MD_AUTODETECT is not setCONFIG_MD_LINEAR=yCONFIG_MD_RAID0=yCONFIG_MD_RAID1=yCONFIG_MD_RAID10=yCONFIG_MD_RAID456=mCONFIG_MD_RAID6_PQ=mCONFIG_MD_MULTIPATH=yCONFIG_MD_FAULTY=m
# CONFIG_BLK_DEV_DM is not setCONFIG_FUSION=yCONFIG_FUSION_SPI=y
# CONFIG_FUSION_FC is not setCONFIG_FUSION_SAS=mCONFIG_FUSION_MAX_SGE=128CONFIG_FUSION_CTL=yCONFIG_FUSION_LOGGING=y
#
# 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=mCONFIG_IEEE1394_OHCI1394=mCONFIG_IEEE1394_PCILYNX=m
# CONFIG_IEEE1394_SBP2 is not setCONFIG_IEEE1394_ETH1394_ROM_ENTRY=yCONFIG_IEEE1394_ETH1394=m
# CONFIG_IEEE1394_RAWIO is not setCONFIG_IEEE1394_VIDEO1394=mCONFIG_IEEE1394_DV1394=mCONFIG_IEEE1394_VERBOSEDEBUG=yCONFIG_I2O=yCONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
# CONFIG_I2O_EXT_ADAPTEC is not setCONFIG_I2O_CONFIG=y
# CONFIG_I2O_CONFIG_OLD_IOCTL is not set
# CONFIG_I2O_BUS is not set
# CONFIG_I2O_BLOCK is not setCONFIG_I2O_SCSI=mCONFIG_I2O_PROC=mCONFIG_MACINTOSH_DRIVERS=y
# CONFIG_MAC_EMUMOUSEBTN is not setCONFIG_NETDEVICES=y
# CONFIG_IFB is not set
# CONFIG_DUMMY is not setCONFIG_BONDING=m
# CONFIG_MACVLAN is not setCONFIG_EQUALIZER=yCONFIG_TUN=mCONFIG_VETH=mCONFIG_ARCNET=yCONFIG_ARCNET_1201=y
# CONFIG_ARCNET_1051 is not setCONFIG_ARCNET_RAW=yCONFIG_ARCNET_CAP=y
# CONFIG_ARCNET_COM90xx is not set
CONFIG_ARCNET_COM90xxIO=m
# CONFIG_ARCNET_RIM_I is not setCONFIG_ARCNET_COM20020=mCONFIG_ARCNET_COM20020_ISA=mCONFIG_ARCNET_COM20020_PCI=mCONFIG_PHYLIB=y
#
# MII PHY device drivers
#CONFIG_MARVELL_PHY=y
# CONFIG_DAVICOM_PHY is not set CONFIG_QSEMI_PHY=y
# CONFIG_LXT_PHY is not set CONFIG_CICADA_PHY=mCONFIG_VITESSE_PHY=yCONFIG_SMSC_PHY=yCONFIG_BROADCOM_PHY=yCONFIG_ICPLUS_PHY=mCONFIG_REALTEK_PHY=m
# CONFIG_NATIONAL_PHY is not set CONFIG_STE10XP=mCONFIG_LSI_ET1011C_PHY=y CONFIG_FIXED_PHY=yCONFIG_MDIO_BITBANG=m
# CONFIG_MDIO_GPIO is not set CONFIG_NET_ETHERNET=yCONFIG_MII=yCONFIG_HAPPYMEAL=yCONFIG_SUNGEM=mCONFIG_CASSINI=yCONFIG_NET_VENDOR_3COM=yCONFIG_EL1=mCONFIG_EL2=mCONFIG_ELPLUS=y
# CONFIG_EL16 is not setCONFIG_EL3=mCONFIG_3C515=yCONFIG_ELMC=m
# CONFIG_ELMC_II is not set CONFIG_VORTEX=yCONFIG_TYPHOON=yCONFIG_LANCE=m
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_ENC28J60 is not set CONFIG_ETHOC=yCONFIG_NET_VENDOR_RACAL=yCONFIG_NI5010=m
# CONFIG_NI52 is not set
# CONFIG_NI65 is not setCONFIG_DNET=y
# CONFIG_NET_TULIP is not set CONFIG_AT1700=mCONFIG_DEPCA=y
# CONFIG_HP100 is not setCONFIG_NET_ISA=yCONFIG_E2100=m
# CONFIG_EWRK3 is not set CONFIG_EEXPRESS=y
# CONFIG_EEXPRESS_PRO is not set CONFIG_HPLAN=m
# CONFIG_LP486E is not setCONFIG_ETH16I=mCONFIG_NE2000=mCONFIG_ZNET=mCONFIG_SEEQ8005=yCONFIG_NE2_MCA=mCONFIG_IBMLANA=y
# 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=y
# CONFIG_PCNET32 is not set
# CONFIG_AMD8111_ETH is not set CONFIG_ADAPTEC_STARFIRE=yCONFIG_AC3200=yCONFIG_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=mCONFIG_E100=yCONFIG_LNE390=m
# CONFIG_FEALNX is not set CONFIG_NATSEMI=mCONFIG_NE2K_PCI=mCONFIG_NE3210=yCONFIG_ES3210=yCONFIG_8139CP=mCONFIG_8139TOO=yCONFIG_8139TOO_PIO=y CONFIG_8139TOO_TUNE_TWISTER=y
# CONFIG_8139TOO_8129 is not set CONFIG_8139_OLD_RX_RESET=y
# CONFIG_R6040 is not set
# CONFIG_SIS900 is not set CONFIG_EPIC100=mCONFIG_SMSC9420=mCONFIG_SUNDANCE=yCONFIG_SUNDANCE_MMIO=y
# CONFIG_TLAN is not setCONFIG_KS8842=y
# CONFIG_KS8851 is not set CONFIG_VIA_RHINE=yCONFIG_VIA_RHINE_MMIO=yCONFIG_SC92031=mCONFIG_NET_POCKET=yCONFIG_ATP=mCONFIG_DE600=m
# CONFIG_DE620 is not setCONFIG_ATL2=yCONFIG_NETDEV_1000=yCONFIG_ACENIC=y CONFIG_ACENIC_OMIT_TIGON_I=yCONFIG_DL2K=mCONFIG_E1000=yCONFIG_E1000E=yCONFIG_IP1000=yCONFIG_IGB=m
# CONFIG_IGBVF is not set
# CONFIG_NS83820 is not set CONFIG_HAMACHI=yCONFIG_YELLOWFIN=y
# CONFIG_R8169 is not setCONFIG_SIS190=y
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set CONFIG_VIA_VELOCITY=mCONFIG_TIGON3=y
# CONFIG_BNX2 is not set
# CONFIG_QLA3XXX is not setCONFIG_ATL1=yCONFIG_ATL1E=mCONFIG_ATL1C=yCONFIG_JME=mCONFIG_NETDEV_10000=yCONFIG_MDIO=yCONFIG_CHELSIO_T1=yCONFIG_CHELSIO_T1_1G=y CONFIG_CHELSIO_T3_DEPENDS=y CONFIG_CHELSIO_T3=yCONFIG_ENIC=y
# CONFIG_IXGBE is not setCONFIG_IXGB=yCONFIG_S2IO=mCONFIG_MYRI10GE=m
# CONFIG_NIU is not setCONFIG_MLX4_EN=yCONFIG_MLX4_CORE=yCONFIG_MLX4_DEBUG=y
# CONFIG_TEHUTI is not setCONFIG_BNX2X=yCONFIG_QLGE=m
# CONFIG_SFC is not set
# CONFIG_BE2NET is not setCONFIG_TR=mCONFIG_IBMTR=mCONFIG_IBMOL=m
# CONFIG_IBMLS is not set
# CONFIG_3C359 is not set CONFIG_TMS380TR=mCONFIG_TMSPCI=mCONFIG_SKISA=m
# CONFIG_PROTEON is not setCONFIG_ABYSS=mCONFIG_MADGEMC=mCONFIG_SMCTR=m
#
# Wireless LAN
#CONFIG_WLAN_PRE80211=yCONFIG_STRIP=y
# CONFIG_ARLAN is not setCONFIG_WAVELAN=yCONFIG_WLAN_80211=yCONFIG_LIBERTAS=mCONFIG_LIBERTAS_USB=mCONFIG_LIBERTAS_SPI=mCONFIG_LIBERTAS_DEBUG=yCONFIG_LIBERTAS_THINFIRM=mCONFIG_LIBERTAS_THINFIRM_USB=mCONFIG_AIRO=mCONFIG_ATMEL=yCONFIG_PCI_ATMEL=mCONFIG_AT76C50X_USB=mCONFIG_PRISM54=yCONFIG_USB_ZD1201=yCONFIG_USB_NET_RNDIS_WLAN=mCONFIG_RTL8180=mCONFIG_RTL8187=mCONFIG_RTL8187_LEDS=yCONFIG_ADM8211=mCONFIG_MAC80211_HWSIM=mCONFIG_MWL8K=m
# CONFIG_P54_COMMON is not setCONFIG_ATH_COMMON=mCONFIG_ATH5K=mCONFIG_ATH5K_DEBUG=yCONFIG_ATH9K=mCONFIG_ATH9K_DEBUG=yCONFIG_AR9170_USB=mCONFIG_AR9170_LEDS=yCONFIG_IPW2100=mCONFIG_IPW2100_MONITOR=yCONFIG_IPW2100_DEBUG=yCONFIG_IPW2200=yCONFIG_IPW2200_MONITOR=yCONFIG_IPW2200_RADIOTAP=yCONFIG_IPW2200_PROMISCUOUS=yCONFIG_IPW2200_QOS=yCONFIG_IPW2200_DEBUG=yCONFIG_LIBIPW=y
# CONFIG_LIBIPW_DEBUG is not setCONFIG_IWLWIFI=m
# CONFIG_IWLWIFI_LEDS is not setCONFIG_IWLWIFI_SPECTRUM_MEASUREMENT=yCONFIG_IWLWIFI_DEBUG=yCONFIG_IWLWIFI_DEBUGFS=yCONFIG_IWLAGN=m
# CONFIG_IWL4965 is not set
# CONFIG_IWL5000 is not setCONFIG_IWL3945=mCONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
# CONFIG_HOSTAP is not setCONFIG_B43=mCONFIG_B43_PCI_AUTOSELECT=yCONFIG_B43_PCICORE_AUTOSELECT=yCONFIG_B43_LEDS=yCONFIG_B43_HWRNG=yCONFIG_B43_DEBUG=y
# CONFIG_B43_FORCE_PIO is not setCONFIG_B43LEGACY=mCONFIG_B43LEGACY_PCI_AUTOSELECT=yCONFIG_B43LEGACY_PCICORE_AUTOSELECT=yCONFIG_B43LEGACY_LEDS=yCONFIG_B43LEGACY_HWRNG=y
# CONFIG_B43LEGACY_DEBUG is not setCONFIG_B43LEGACY_PIO=y
# CONFIG_B43LEGACY_DMA_AND_PIO_MODE is not set
# CONFIG_B43LEGACY_DMA_MODE is not setCONFIG_B43LEGACY_PIO_MODE=y
# CONFIG_ZD1211RW is not set
# CONFIG_HERMES is not setCONFIG_WL12XX=m
#
# Enable WiMAX (Networking options) to see the WiMAX drivers #
#
# USB Network Adapters
#
# CONFIG_USB_CATC is not setCONFIG_USB_KAWETH=mCONFIG_USB_PEGASUS=yCONFIG_USB_RTL8150=yCONFIG_USB_USBNET=mCONFIG_USB_NET_AX8817X=mCONFIG_USB_NET_CDCETHER=mCONFIG_USB_NET_CDC_EEM=mCONFIG_USB_NET_DM9601=mCONFIG_USB_NET_SMSC95XX=mCONFIG_USB_NET_GL620A=mCONFIG_USB_NET_NET1080=mCONFIG_USB_NET_PLUSB=m
# CONFIG_USB_NET_MCS7830 is not setCONFIG_USB_NET_RNDIS_HOST=mCONFIG_USB_NET_CDC_SUBSET=mCONFIG_USB_ALI_M5632=yCONFIG_USB_AN2720=y
# CONFIG_USB_BELKIN is not setCONFIG_USB_ARMLINUX=yCONFIG_USB_EPSON2888=yCONFIG_USB_KC2190=yCONFIG_USB_NET_ZAURUS=mCONFIG_USB_HSO=yCONFIG_USB_NET_INT51X1=mCONFIG_USB_CDC_PHONET=mCONFIG_WAN=y
# CONFIG_HOSTESS_SV11 is not set
# CONFIG_COSA is not set
# CONFIG_LANMEDIA is not set
# CONFIG_SEALEVEL_4021 is not setCONFIG_HDLC=yCONFIG_HDLC_RAW=m
# CONFIG_HDLC_RAW_ETH is not set
# CONFIG_HDLC_CISCO is not setCONFIG_HDLC_FR=m
# CONFIG_HDLC_PPP is not set
#
# X.25/LAPB support is disabled
#CONFIG_PCI200SYN=mCONFIG_WANXL=mCONFIG_PC300TOO=mCONFIG_N2=mCONFIG_C101=m
# CONFIG_FARSYNC is not set
# CONFIG_DSCC4 is not setCONFIG_DLCI=mCONFIG_DLCI_MAX=8
# CONFIG_SDLA is not set
# CONFIG_WAN_ROUTER_DRIVERS is not setCONFIG_SBNI=y
# CONFIG_SBNI_MULTILINE is not set
# CONFIG_ATM_DRIVERS is not set
# CONFIG_FDDI is not setCONFIG_HIPPI=y
# CONFIG_ROADRUNNER is not set
# CONFIG_PLIP is not setCONFIG_PPP=yCONFIG_PPP_MULTILINK=yCONFIG_PPP_FILTER=yCONFIG_PPP_ASYNC=mCONFIG_PPP_SYNC_TTY=mCONFIG_PPP_DEFLATE=mCONFIG_PPP_BSDCOMP=mCONFIG_PPP_MPPE=mCONFIG_PPPOE=mCONFIG_PPPOATM=mCONFIG_PPPOL2TP=mCONFIG_SLIP=yCONFIG_SLIP_COMPRESSED=yCONFIG_SLHC=y
# CONFIG_SLIP_SMART is not setCONFIG_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=y
# CONFIG_VIRTIO_NET is not setCONFIG_ISDN=yCONFIG_ISDN_I4L=mCONFIG_ISDN_PPP=yCONFIG_ISDN_PPP_VJ=yCONFIG_ISDN_MPP=y
# CONFIG_IPPP_FILTER is not set
# CONFIG_ISDN_PPP_BSDCOMP is not setCONFIG_ISDN_AUDIO=yCONFIG_ISDN_TTY_FAX=yCONFIG_ISDN_X25=y
#
# ISDN feature submodules
#CONFIG_ISDN_DRV_LOOP=m
# CONFIG_ISDN_DIVERSION is not set
#
# ISDN4Linux hardware drivers
#
#
# Passive cards
#CONFIG_ISDN_DRV_HISAX=m
#
# D-channel protocol features
#CONFIG_HISAX_EURO=yCONFIG_DE_AOC=yCONFIG_HISAX_NO_SENDCOMPLETE=y
# CONFIG_HISAX_NO_LLC is not setCONFIG_HISAX_NO_KEYPAD=yCONFIG_HISAX_1TR6=yCONFIG_HISAX_NI1=yCONFIG_HISAX_MAX_CARDS=8
#
# HiSax supported cards
#CONFIG_HISAX_16_0=y
# CONFIG_HISAX_16_3 is not set
# CONFIG_HISAX_TELESPCI is not setCONFIG_HISAX_S0BOX=yCONFIG_HISAX_AVM_A1=yCONFIG_HISAX_FRITZPCI=y
# CONFIG_HISAX_AVM_A1_PCMCIA is not set
# CONFIG_HISAX_ELSA is not set
# CONFIG_HISAX_IX1MICROR2 is not setCONFIG_HISAX_DIEHLDIVA=yCONFIG_HISAX_ASUSCOM=yCONFIG_HISAX_TELEINT=y
# CONFIG_HISAX_HFCS is not set
# CONFIG_HISAX_SEDLBAUER is not setCONFIG_HISAX_SPORTSTER=yCONFIG_HISAX_MIC=y
# CONFIG_HISAX_NETJET is not setCONFIG_HISAX_NETJET_U=yCONFIG_HISAX_NICCY=yCONFIG_HISAX_ISURF=yCONFIG_HISAX_HSTSAPHIR=yCONFIG_HISAX_BKM_A4T=yCONFIG_HISAX_SCT_QUADRO=yCONFIG_HISAX_GAZEL=y
# CONFIG_HISAX_HFC_PCI is not setCONFIG_HISAX_W6692=yCONFIG_HISAX_HFC_SX=y
# CONFIG_HISAX_DEBUG is not set
#
# HiSax PCMCIA card service modules
#
#
# HiSax sub driver modules
#CONFIG_HISAX_ST5481=mCONFIG_HISAX_HFCUSB=mCONFIG_HISAX_HFC4S8S=m
# CONFIG_HISAX_FRITZ_PCIPNP is not setCONFIG_HISAX_HDLC=y
#
# Active cards
#CONFIG_ISDN_DRV_PCBIT=mCONFIG_ISDN_DRV_SC=m
# CONFIG_ISDN_DRV_ACT2000 is not set
# CONFIG_HYSDN is not setCONFIG_ISDN_CAPI=y
# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set
# CONFIG_CAPI_TRACE is not set
# CONFIG_ISDN_CAPI_MIDDLEWARE is not setCONFIG_ISDN_CAPI_CAPI20=mCONFIG_ISDN_CAPI_CAPIDRV=m
#
# CAPI hardware drivers
#CONFIG_CAPI_AVM=yCONFIG_ISDN_DRV_AVMB1_B1ISA=m
# CONFIG_ISDN_DRV_AVMB1_B1PCI is not set
# CONFIG_ISDN_DRV_AVMB1_T1ISA is not setCONFIG_ISDN_DRV_AVMB1_B1PCMCIA=mCONFIG_ISDN_DRV_AVMB1_T1PCI=yCONFIG_ISDN_DRV_AVMB1_C4=m
# CONFIG_CAPI_EICON is not setCONFIG_ISDN_DRV_GIGASET=mCONFIG_GIGASET_BASE=m
# CONFIG_GIGASET_M105 is not set
# CONFIG_GIGASET_M101 is not set
# CONFIG_GIGASET_DEBUG is not setCONFIG_PHONE=y
#
# Input device support
#CONFIG_INPUT=yCONFIG_INPUT_FF_MEMLESS=yCONFIG_INPUT_POLLDEV=y
#
# Userland interfaces
#CONFIG_INPUT_MOUSEDEV=yCONFIG_INPUT_MOUSEDEV_PSAUX=yCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768CONFIG_INPUT_JOYDEV=mCONFIG_INPUT_EVDEV=yCONFIG_INPUT_EVBUG=y
#
# Input Device Drivers
#CONFIG_INPUT_KEYBOARD=yCONFIG_KEYBOARD_ATKBD=yCONFIG_KEYBOARD_LKKBD=mCONFIG_KEYBOARD_GPIO=y
# CONFIG_KEYBOARD_MATRIX is not setCONFIG_KEYBOARD_LM8323=mCONFIG_KEYBOARD_NEWTON=yCONFIG_KEYBOARD_STOWAWAY=mCONFIG_KEYBOARD_SUNKBD=m
# CONFIG_KEYBOARD_XTKBD is not setCONFIG_INPUT_MOUSE=yCONFIG_MOUSE_PS2=mCONFIG_MOUSE_PS2_ALPS=yCONFIG_MOUSE_PS2_LOGIPS2PP=yCONFIG_MOUSE_PS2_SYNAPTICS=yCONFIG_MOUSE_PS2_LIFEBOOK=yCONFIG_MOUSE_PS2_TRACKPOINT=yCONFIG_MOUSE_PS2_ELANTECH=y
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
# CONFIG_MOUSE_PS2_OLPC is not set
# CONFIG_MOUSE_SERIAL is not setCONFIG_MOUSE_APPLETOUCH=yCONFIG_MOUSE_BCM5974=yCONFIG_MOUSE_INPORT=yCONFIG_MOUSE_ATIXL=yCONFIG_MOUSE_LOGIBM=yCONFIG_MOUSE_PC110PAD=yCONFIG_MOUSE_VSXXXAA=y
# CONFIG_MOUSE_GPIO is not setCONFIG_MOUSE_SYNAPTICS_I2C=m
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not setCONFIG_INPUT_MISC=yCONFIG_INPUT_PCSPKR=yCONFIG_INPUT_APANEL=m
# CONFIG_INPUT_WISTRON_BTNS is not setCONFIG_INPUT_ATI_REMOTE=m
# CONFIG_INPUT_ATI_REMOTE2 is not set
# CONFIG_INPUT_KEYSPAN_REMOTE is not setCONFIG_INPUT_POWERMATE=yCONFIG_INPUT_YEALINK=mCONFIG_INPUT_CM109=yCONFIG_INPUT_UINPUT=yCONFIG_INPUT_GPIO_ROTARY_ENCODER=m
#
# Hardware I/O ports
#CONFIG_SERIO=yCONFIG_SERIO_I8042=y
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not setCONFIG_SERIO_PCIPS2=mCONFIG_SERIO_LIBPS2=yCONFIG_SERIO_RAW=m
# CONFIG_GAMEPORT is not set
#
# Character devices
#CONFIG_VT=yCONFIG_CONSOLE_TRANSLATIONS=yCONFIG_VT_CONSOLE=yCONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_DEVKMEM is not setCONFIG_SERIAL_NONSTANDARD=y
# CONFIG_COMPUTONE is not setCONFIG_ROCKETPORT=mCONFIG_CYCLADES=yCONFIG_CYZ_INTR=yCONFIG_DIGIEPCA=mCONFIG_MOXA_INTELLIO=yCONFIG_MOXA_SMARTIO=y
# CONFIG_ISI is not setCONFIG_SYNCLINK=yCONFIG_SYNCLINKMP=mCONFIG_SYNCLINK_GT=mCONFIG_N_HDLC=mCONFIG_RISCOM8=yCONFIG_SPECIALIX=mCONFIG_SX=mCONFIG_RIO=yCONFIG_RIO_OLDPCI=y
# CONFIG_STALDRV is not setCONFIG_NOZOMI=y
#
# Serial drivers
#CONFIG_SERIAL_8250=yCONFIG_SERIAL_8250_CONSOLE=yCONFIG_FIX_EARLYCON_MEM=yCONFIG_SERIAL_8250_PCI=yCONFIG_SERIAL_8250_NR_UARTS=4CONFIG_SERIAL_8250_RUNTIME_UARTS=4CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not setCONFIG_SERIAL_8250_SHARE_IRQ=yCONFIG_SERIAL_8250_DETECT_IRQ=yCONFIG_SERIAL_8250_RSA=yCONFIG_SERIAL_8250_MCA=m
#
# Non-8250 serial port support
#
# CONFIG_SERIAL_MAX3100 is not setCONFIG_SERIAL_CORE=yCONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not setCONFIG_UNIX98_PTYS=yCONFIG_DEVPTS_MULTIPLE_INSTANCES=y
# CONFIG_LEGACY_PTYS is not setCONFIG_PRINTER=mCONFIG_LP_CONSOLE=y
# CONFIG_PPDEV is not setCONFIG_HVC_DRIVER=yCONFIG_VIRTIO_CONSOLE=yCONFIG_IPMI_HANDLER=yCONFIG_IPMI_PANIC_EVENT=y
# CONFIG_IPMI_PANIC_STRING is not set
# CONFIG_IPMI_DEVICE_INTERFACE is not setCONFIG_IPMI_SI=yCONFIG_IPMI_WATCHDOG=mCONFIG_IPMI_POWEROFF=yCONFIG_HW_RANDOM=y
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
# CONFIG_HW_RANDOM_INTEL is not set
# CONFIG_HW_RANDOM_AMD is not setCONFIG_HW_RANDOM_GEODE=m
# CONFIG_HW_RANDOM_VIA is not setCONFIG_HW_RANDOM_VIRTIO=mCONFIG_NVRAM=mCONFIG_RTC=mCONFIG_GEN_RTC=yCONFIG_GEN_RTC_X=yCONFIG_DTLK=yCONFIG_R3964=mCONFIG_APPLICOM=m
# CONFIG_SONYPI is not setCONFIG_MWAVE=y
CONFIG_SCx200_GPIO=m
# CONFIG_PC8736x_GPIO is not setCONFIG_NSC_GPIO=mCONFIG_CS5535_GPIO=yCONFIG_RAW_DRIVER=yCONFIG_MAX_RAW_DEVS=256CONFIG_HANGCHECK_TIMER=m
# CONFIG_TCG_TPM is not setCONFIG_TELCLOCK=yCONFIG_DEVPORT=yCONFIG_I2C=mCONFIG_I2C_BOARDINFO=yCONFIG_I2C_CHARDEV=m
# CONFIG_I2C_HELPER_AUTO is not set
#
# I2C Algorithms
#CONFIG_I2C_ALGOBIT=mCONFIG_I2C_ALGOPCF=mCONFIG_I2C_ALGOPCA=m
#
# I2C Hardware Bus support
#
#
# PC SMBus host controller drivers
#CONFIG_I2C_ALI1535=mCONFIG_I2C_ALI1563=mCONFIG_I2C_ALI15X3=mCONFIG_I2C_AMD756=mCONFIG_I2C_AMD8111=mCONFIG_I2C_I801=mCONFIG_I2C_ISCH=mCONFIG_I2C_PIIX4=mCONFIG_I2C_NFORCE2=m
# CONFIG_I2C_SIS5595 is not setCONFIG_I2C_SIS630=m
# CONFIG_I2C_SIS96X is not setCONFIG_I2C_VIA=mCONFIG_I2C_VIAPRO=m
#
# I2C system bus drivers (mostly embedded / system-on-chip) #
# CONFIG_I2C_GPIO is not setCONFIG_I2C_OCORES=mCONFIG_I2C_SIMTEC=m
#
# External I2C/SMBus adapter drivers
#
# CONFIG_I2C_PARPORT is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_TAOS_EVM is not setCONFIG_I2C_TINY_USB=m
#
# Graphics adapter I2C/DDC channel drivers
#
# CONFIG_I2C_VOODOO3 is not set
#
# Other I2C/SMBus bus drivers
#CONFIG_I2C_ELEKTOR=m
# CONFIG_I2C_PCA_PLATFORM is not set
# CONFIG_I2C_STUB is not set
CONFIG_SCx200_I2C=m
CONFIG_SCx200_I2C_SCL=12
CONFIG_SCx200_I2C_SDA=13
CONFIG_SCx200_ACB=m
#
# Miscellaneous I2C Chip support
#CONFIG_DS1682=m
# CONFIG_SENSORS_TSL2550 is not setCONFIG_I2C_DEBUG_CORE=yCONFIG_I2C_DEBUG_ALGO=yCONFIG_I2C_DEBUG_BUS=yCONFIG_I2C_DEBUG_CHIP=yCONFIG_SPI=yCONFIG_SPI_MASTER=y
#
# SPI Master Controller Drivers
#CONFIG_SPI_BITBANG=m
# CONFIG_SPI_BUTTERFLY is not set
# CONFIG_SPI_GPIO is not setCONFIG_SPI_LM70_LLP=m
#
# SPI Protocol Masters
#
# CONFIG_SPI_SPIDEV is not setCONFIG_SPI_TLE62X0=y
#
# PPS support
#
# CONFIG_PPS is not setCONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=yCONFIG_GPIOLIB=yCONFIG_GPIO_SYSFS=y
#
# Memory mapped GPIO expanders:
#
#
# I2C GPIO expanders:
#CONFIG_GPIO_MAX732X=mCONFIG_GPIO_PCA953X=mCONFIG_GPIO_PCF857X=m
#
# PCI GPIO expanders:
#CONFIG_GPIO_BT8XX=m
#
# SPI GPIO expanders:
#CONFIG_GPIO_MAX7301=m
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_W1 is not set
# CONFIG_POWER_SUPPLY is not set
# CONFIG_HWMON is not setCONFIG_THERMAL=y
# CONFIG_WATCHDOG is not setCONFIG_SSB_POSSIBLE=y
#
# Sonics Silicon Backplane
#CONFIG_SSB=yCONFIG_SSB_SPROM=yCONFIG_SSB_PCIHOST_POSSIBLE=yCONFIG_SSB_PCIHOST=yCONFIG_SSB_B43_PCI_BRIDGE=yCONFIG_SSB_DEBUG=yCONFIG_SSB_DRIVER_PCICORE_POSSIBLE=yCONFIG_SSB_DRIVER_PCICORE=y
#
# Multifunction device drivers
#CONFIG_MFD_CORE=mCONFIG_MFD_SM501=yCONFIG_MFD_SM501_GPIO=y
# CONFIG_HTC_PASIC3 is not setCONFIG_TPS65010=m
# CONFIG_MFD_TMIO is not setCONFIG_MFD_WM8400=m
# CONFIG_MFD_PCF50633 is not set
# CONFIG_AB3100_CORE is not setCONFIG_EZX_PCAP=yCONFIG_REGULATOR=yCONFIG_REGULATOR_DEBUG=y
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not setCONFIG_REGULATOR_USERSPACE_CONSUMER=mCONFIG_REGULATOR_BQ24022=yCONFIG_REGULATOR_MAX1586=mCONFIG_REGULATOR_WM8400=mCONFIG_REGULATOR_LP3971=m
# CONFIG_MEDIA_SUPPORT is not set
#
# Graphics support
#
# CONFIG_AGP is not set
# CONFIG_DRM is not setCONFIG_VGASTATE=mCONFIG_VIDEO_OUTPUT_CONTROL=yCONFIG_FB=mCONFIG_FIRMWARE_EDID=yCONFIG_FB_DDC=m
# CONFIG_FB_BOOT_VESA_SUPPORT is not setCONFIG_FB_CFB_FILLRECT=mCONFIG_FB_CFB_COPYAREA=mCONFIG_FB_CFB_IMAGEBLIT=m
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not setCONFIG_FB_SYS_FILLRECT=mCONFIG_FB_SYS_COPYAREA=mCONFIG_FB_SYS_IMAGEBLIT=mCONFIG_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=mCONFIG_FB_DEFERRED_IO=yCONFIG_FB_SVGALIB=m
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not setCONFIG_FB_MODE_HELPERS=yCONFIG_FB_TILEBLITTING=y
#
# Frame buffer hardware drivers
#
# CONFIG_FB_PM2 is not setCONFIG_FB_CYBER2000=m
# CONFIG_FB_ARC is not set
# CONFIG_FB_UVESA is not set
# CONFIG_FB_N411 is not set
# CONFIG_FB_HGA is not setCONFIG_FB_S1D13XXX=m
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not setCONFIG_FB_LE80578=m
# CONFIG_FB_CARILLO_RANCH is not setCONFIG_FB_MATROX=mCONFIG_FB_MATROX_MILLENIUM=yCONFIG_FB_MATROX_MYSTIQUE=y
# CONFIG_FB_MATROX_G is not set
# CONFIG_FB_MATROX_I2C is not setCONFIG_FB_MATROX_MULTIHEAD=y
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not setCONFIG_FB_S3=mCONFIG_FB_SAVAGE=mCONFIG_FB_SAVAGE_I2C=y
# CONFIG_FB_SAVAGE_ACCEL is not setCONFIG_FB_SIS=m
# CONFIG_FB_SIS_300 is not set
# CONFIG_FB_SIS_315 is not set
# CONFIG_FB_VIA is not setCONFIG_FB_NEOMAGIC=mCONFIG_FB_KYRO=mCONFIG_FB_3DFX=mCONFIG_FB_3DFX_ACCEL=yCONFIG_FB_3DFX_I2C=y
# CONFIG_FB_VOODOO1 is not setCONFIG_FB_VT8623=mCONFIG_FB_TRIDENT=mCONFIG_FB_ARK=m
# CONFIG_FB_PM3 is not setCONFIG_FB_CARMINE=mCONFIG_FB_CARMINE_DRAM_EVAL=y
# CONFIG_CARMINE_DRAM_CUSTOM is not setCONFIG_FB_GEODE=y
# CONFIG_FB_GEODE_LX is not setCONFIG_FB_GEODE_GX=mCONFIG_FB_GEODE_GX1=m
# CONFIG_FB_TMIO is not set
# CONFIG_FB_SM501 is not setCONFIG_FB_METRONOME=m
# CONFIG_FB_MB862XX is not setCONFIG_FB_BROADSHEET=mCONFIG_BACKLIGHT_LCD_SUPPORT=y
# CONFIG_LCD_CLASS_DEVICE is not setCONFIG_BACKLIGHT_CLASS_DEVICE=m
# CONFIG_BACKLIGHT_GENERIC is not set
# CONFIG_BACKLIGHT_PROGEAR is not setCONFIG_BACKLIGHT_MBP_NVIDIA=mCONFIG_BACKLIGHT_SAHARA=m
#
# Display device support
#CONFIG_DISPLAY_SUPPORT=m
#
# 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=y
# CONFIG_LOGO_LINUX_VGA16 is not setCONFIG_LOGO_LINUX_CLUT224=y
# CONFIG_SOUND is not setCONFIG_HID_SUPPORT=yCONFIG_HID=y
# CONFIG_HID_DEBUG is not setCONFIG_HIDRAW=y
#
# USB Input Devices
#CONFIG_USB_HID=yCONFIG_HID_PID=y
# CONFIG_USB_HIDDEV is not setCONFIG_USB_MOUSE=y
#
# Special HID drivers
#CONFIG_HID_A4TECH=yCONFIG_HID_APPLE=yCONFIG_HID_BELKIN=yCONFIG_HID_CHERRY=yCONFIG_HID_CHICONY=yCONFIG_HID_CYPRESS=yCONFIG_HID_DRAGONRISE=y
# CONFIG_DRAGONRISE_FF is not setCONFIG_HID_EZKEY=yCONFIG_HID_KYE=yCONFIG_HID_GYRATION=yCONFIG_HID_KENSINGTON=yCONFIG_HID_LOGITECH=yCONFIG_LOGITECH_FF=yCONFIG_LOGIRUMBLEPAD2_FF=yCONFIG_HID_MICROSOFT=yCONFIG_HID_MONTEREY=yCONFIG_HID_NTRIG=yCONFIG_HID_PANTHERLORD=y
# CONFIG_PANTHERLORD_FF is not setCONFIG_HID_PETALYNX=yCONFIG_HID_SAMSUNG=yCONFIG_HID_SONY=yCONFIG_HID_SUNPLUS=yCONFIG_HID_GREENASIA=y
# CONFIG_GREENASIA_FF is not setCONFIG_HID_SMARTJOYPLUS=y
# CONFIG_SMARTJOYPLUS_FF is not setCONFIG_HID_TOPSEED=yCONFIG_HID_THRUSTMASTER=yCONFIG_THRUSTMASTER_FF=yCONFIG_HID_ZEROPLUS=y
# CONFIG_ZEROPLUS_FF is not setCONFIG_USB_SUPPORT=yCONFIG_USB_ARCH_HAS_HCD=yCONFIG_USB_ARCH_HAS_OHCI=yCONFIG_USB_ARCH_HAS_EHCI=yCONFIG_USB=yCONFIG_USB_DEBUG=y
# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
#
# Miscellaneous USB options
#CONFIG_USB_DEVICEFS=y
# CONFIG_USB_DEVICE_CLASS is not setCONFIG_USB_DYNAMIC_MINORS=yCONFIG_USB_SUSPEND=y
# CONFIG_USB_OTG is not setCONFIG_USB_MON=mCONFIG_USB_WUSB=yCONFIG_USB_WUSB_CBAF=mCONFIG_USB_WUSB_CBAF_DEBUG=y
#
# USB Host Controller Drivers
#CONFIG_USB_C67X00_HCD=mCONFIG_USB_XHCI_HCD=yCONFIG_USB_XHCI_HCD_DEBUGGING=yCONFIG_USB_EHCI_HCD=y
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
# CONFIG_USB_EHCI_TT_NEWSCHED is not setCONFIG_USB_OXU210HP_HCD=yCONFIG_USB_ISP116X_HCD=yCONFIG_USB_ISP1760_HCD=yCONFIG_USB_OHCI_HCD=yCONFIG_USB_OHCI_HCD_SSB=y
# 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_U132_HCD=m
# CONFIG_USB_SL811_HCD is not setCONFIG_USB_R8A66597_HCD=mCONFIG_USB_HWA_HCD=y
#
# USB Device Class drivers
#CONFIG_USB_ACM=y
# CONFIG_USB_PRINTER is not setCONFIG_USB_WDM=m
# CONFIG_USB_TMC is not set
#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may #
#
# also be needed; see USB_STORAGE Help for more info # CONFIG_USB_STORAGE=m CONFIG_USB_STORAGE_DEBUG=y CONFIG_USB_STORAGE_DATAFAB=m # CONFIG_USB_STORAGE_FREECOM is not set # CONFIG_USB_STORAGE_ISD200 is not set # CONFIG_USB_STORAGE_USBAT is not set CONFIG_USB_STORAGE_SDDR09=m CONFIG_USB_STORAGE_SDDR55=m CONFIG_USB_STORAGE_JUMPSHOT=m CONFIG_USB_STORAGE_ALAUDA=m # CONFIG_USB_STORAGE_ONETOUCH is not set # CONFIG_USB_STORAGE_KARMA is not set CONFIG_USB_STORAGE_CYPRESS_ATACB=m CONFIG_USB_LIBUSUAL=y
#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not setCONFIG_USB_MICROTEK=m
#
# USB port drivers
#CONFIG_USB_USS720=mCONFIG_USB_SERIAL=mCONFIG_USB_EZUSB=yCONFIG_USB_SERIAL_GENERIC=yCONFIG_USB_SERIAL_AIRCABLE=mCONFIG_USB_SERIAL_ARK3116=mCONFIG_USB_SERIAL_BELKIN=m
# CONFIG_USB_SERIAL_CH341 is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not setCONFIG_USB_SERIAL_DIGI_ACCELEPORT=mCONFIG_USB_SERIAL_CP210X=mCONFIG_USB_SERIAL_CYPRESS_M8=m
# CONFIG_USB_SERIAL_EMPEG is not setCONFIG_USB_SERIAL_FTDI_SIO=mCONFIG_USB_SERIAL_FUNSOFT=mCONFIG_USB_SERIAL_VISOR=m
# CONFIG_USB_SERIAL_IPAQ is not set
# CONFIG_USB_SERIAL_IR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not setCONFIG_USB_SERIAL_EDGEPORT_TI=m
# CONFIG_USB_SERIAL_GARMIN is not set
# CONFIG_USB_SERIAL_IPW is not setCONFIG_USB_SERIAL_IUU=m
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not setCONFIG_USB_SERIAL_KEYSPAN=mCONFIG_USB_SERIAL_KEYSPAN_MPR=y
# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not setCONFIG_USB_SERIAL_KEYSPAN_USA28X=yCONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not setCONFIG_USB_SERIAL_KEYSPAN_USA19=yCONFIG_USB_SERIAL_KEYSPAN_USA18X=yCONFIG_USB_SERIAL_KEYSPAN_USA19W=y
# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not setCONFIG_USB_SERIAL_KEYSPAN_USA19QI=yCONFIG_USB_SERIAL_KEYSPAN_USA49W=y
# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
# CONFIG_USB_SERIAL_KLSI is not set
# CONFIG_USB_SERIAL_KOBIL_SCT is not setCONFIG_USB_SERIAL_MCT_U232=mCONFIG_USB_SERIAL_MOS7720=mCONFIG_USB_SERIAL_MOS7840=mCONFIG_USB_SERIAL_MOTOROLA=m
# CONFIG_USB_SERIAL_NAVMAN is not setCONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_OTI6858 is not setCONFIG_USB_SERIAL_QUALCOMM=m
# CONFIG_USB_SERIAL_SPCP8X5 is not setCONFIG_USB_SERIAL_HP4X=mCONFIG_USB_SERIAL_SAFE=m
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
# CONFIG_USB_SERIAL_SIEMENS_MPI is not setCONFIG_USB_SERIAL_SIERRAWIRELESS=mCONFIG_USB_SERIAL_SYMBOL=mCONFIG_USB_SERIAL_TI=mCONFIG_USB_SERIAL_CYBERJACK=mCONFIG_USB_SERIAL_XIRCOM=m
# CONFIG_USB_SERIAL_OPTION is not set
# CONFIG_USB_SERIAL_OMNINET is not setCONFIG_USB_SERIAL_OPTICON=mCONFIG_USB_SERIAL_DEBUG=m
#
# USB Miscellaneous drivers
#
# CONFIG_USB_EMI62 is not setCONFIG_USB_EMI26=yCONFIG_USB_ADUTUX=yCONFIG_USB_SEVSEG=y
# CONFIG_USB_RIO500 is not setCONFIG_USB_LEGOTOWER=m
# CONFIG_USB_LCD is not setCONFIG_USB_BERRY_CHARGE=y
# CONFIG_USB_LED is not setCONFIG_USB_CYPRESS_CY7C63=mCONFIG_USB_CYTHERM=mCONFIG_USB_IDMOUSE=mCONFIG_USB_FTDI_ELAN=y
# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_SISUSBVGA is not setCONFIG_USB_LD=mCONFIG_USB_TRANCEVIBRATOR=yCONFIG_USB_IOWARRIOR=mCONFIG_USB_TEST=yCONFIG_USB_ISIGHTFW=yCONFIG_USB_VST=m
# CONFIG_USB_ATM is not set
#
# OTG and related infrastructure
#CONFIG_USB_OTG_UTILS=y
# CONFIG_USB_GPIO_VBUS is not setCONFIG_NOP_USB_XCEIV=mCONFIG_UWB=yCONFIG_UWB_HWA=y
# CONFIG_UWB_WHCI is not set
# CONFIG_UWB_WLP is not setCONFIG_UWB_I1480U=y
# CONFIG_MMC is not setCONFIG_MEMSTICK=mCONFIG_MEMSTICK_DEBUG=y
#
# MemoryStick drivers
#CONFIG_MEMSTICK_UNSAFE_RESUME=yCONFIG_MSPRO_BLOCK=m
#
# MemoryStick Host Controller Drivers
#CONFIG_MEMSTICK_TIFM_MS=mCONFIG_MEMSTICK_JMICRON_38X=mCONFIG_NEW_LEDS=yCONFIG_LEDS_CLASS=y
#
# LED drivers
#CONFIG_LEDS_NET48XX=mCONFIG_LEDS_WRAP=m
# CONFIG_LEDS_ALIX2 is not setCONFIG_LEDS_PCA9532=mCONFIG_LEDS_GPIO=mCONFIG_LEDS_GPIO_PLATFORM=yCONFIG_LEDS_LP3944=mCONFIG_LEDS_CLEVO_MAIL=mCONFIG_LEDS_PCA955X=mCONFIG_LEDS_DAC124S085=m
# CONFIG_LEDS_BD2802 is not set
#
# LED Triggers
#CONFIG_LEDS_TRIGGERS=yCONFIG_LEDS_TRIGGER_TIMER=y
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not setCONFIG_LEDS_TRIGGER_BACKLIGHT=m
# CONFIG_LEDS_TRIGGER_GPIO is not set
# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
#
# iptables trigger is under Netfilter config (LED target) # CONFIG_ACCESSIBILITY=y CONFIG_A11Y_BRAILLE_CONSOLE=y # CONFIG_INFINIBAND is not set CONFIG_EDAC=y
#
# Reporting subsystems
#CONFIG_EDAC_DEBUG=yCONFIG_EDAC_DEBUG_VERBOSE=y
# CONFIG_EDAC_MM_EDAC is not set
# CONFIG_RTC_CLASS is not setCONFIG_DMADEVICES=y
#
# DMA Devices
#
# CONFIG_INTEL_IOATDMA is not setCONFIG_AUXDISPLAY=y
# CONFIG_KS0108 is not set
# CONFIG_UIO is not set
#
# TI VLYNQ
#CONFIG_X86_PLATFORM_DEVICES=y
#
# Firmware Drivers
#CONFIG_EDD=mCONFIG_EDD_OFF=yCONFIG_FIRMWARE_MEMMAP=yCONFIG_DELL_RBU=mCONFIG_DCDBAS=yCONFIG_DMIID=y
# CONFIG_ISCSI_IBFT_FIND is not set
#
# File systems
#CONFIG_EXT2_FS=mCONFIG_EXT2_FS_XATTR=y
# CONFIG_EXT2_FS_POSIX_ACL is not setCONFIG_EXT2_FS_SECURITY=yCONFIG_EXT2_FS_XIP=yCONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not setCONFIG_EXT3_FS_XATTR=yCONFIG_EXT3_FS_POSIX_ACL=yCONFIG_EXT3_FS_SECURITY=y
# CONFIG_EXT4_FS is not setCONFIG_FS_XIP=yCONFIG_JBD=yCONFIG_JBD_DEBUG=yCONFIG_JBD2=mCONFIG_JBD2_DEBUG=yCONFIG_FS_MBCACHE=yCONFIG_REISERFS_FS=mCONFIG_REISERFS_CHECK=y
# CONFIG_REISERFS_PROC_INFO is not setCONFIG_REISERFS_FS_XATTR=y
# CONFIG_REISERFS_FS_POSIX_ACL is not setCONFIG_REISERFS_FS_SECURITY=yCONFIG_JFS_FS=mCONFIG_JFS_POSIX_ACL=yCONFIG_JFS_SECURITY=yCONFIG_JFS_DEBUG=y
# CONFIG_JFS_STATISTICS is not setCONFIG_FS_POSIX_ACL=yCONFIG_XFS_FS=yCONFIG_XFS_QUOTA=yCONFIG_XFS_POSIX_ACL=yCONFIG_XFS_RT=y
# CONFIG_XFS_DEBUG is not set
# CONFIG_GFS2_FS is not setCONFIG_OCFS2_FS=mCONFIG_OCFS2_FS_O2CB=mCONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OCFS2_FS_STATS is not setCONFIG_OCFS2_DEBUG_MASKLOG=y
# CONFIG_OCFS2_DEBUG_FS is not setCONFIG_OCFS2_FS_POSIX_ACL=yCONFIG_BTRFS_FS=mCONFIG_BTRFS_FS_POSIX_ACL=yCONFIG_FILE_LOCKING=yCONFIG_FSNOTIFY=yCONFIG_DNOTIFY=yCONFIG_INOTIFY=y
# CONFIG_INOTIFY_USER is not setCONFIG_QUOTA=y
# CONFIG_QUOTA_NETLINK_INTERFACE is not setCONFIG_PRINT_QUOTA_WARNING=yCONFIG_QUOTA_TREE=m
# CONFIG_QFMT_V1 is not setCONFIG_QFMT_V2=mCONFIG_QUOTACTL=yCONFIG_AUTOFS_FS=yCONFIG_AUTOFS4_FS=yCONFIG_FUSE_FS=m
# CONFIG_CUSE is not setCONFIG_GENERIC_ACL=y
#
# Caches
#CONFIG_FSCACHE=y
# CONFIG_FSCACHE_STATS is not setCONFIG_FSCACHE_HISTOGRAM=y
# CONFIG_FSCACHE_DEBUG is not setCONFIG_CACHEFILES=yCONFIG_CACHEFILES_DEBUG=y
# CONFIG_CACHEFILES_HISTOGRAM is not set
#
# CD-ROM/DVD Filesystems
#CONFIG_ISO9660_FS=m
# CONFIG_JOLIET is not setCONFIG_ZISOFS=yCONFIG_UDF_FS=yCONFIG_UDF_NLS=y
#
# DOS/FAT/NT Filesystems
#CONFIG_FAT_FS=mCONFIG_MSDOS_FS=mCONFIG_VFAT_FS=mCONFIG_FAT_DEFAULT_CODEPAGE=437CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#CONFIG_PROC_FS=yCONFIG_PROC_KCORE=yCONFIG_PROC_SYSCTL=yCONFIG_PROC_PAGE_MONITOR=yCONFIG_SYSFS=yCONFIG_TMPFS=yCONFIG_TMPFS_POSIX_ACL=yCONFIG_HUGETLBFS=yCONFIG_HUGETLB_PAGE=yCONFIG_CONFIGFS_FS=y
# CONFIG_MISC_FILESYSTEMS is not set
# CONFIG_NETWORK_FILESYSTEMS is not setCONFIG_EXPORTFS=y
#
# Partition Types
#CONFIG_PARTITION_ADVANCED=yCONFIG_ACORN_PARTITION=y
# CONFIG_ACORN_PARTITION_CUMANA is not set
# CONFIG_ACORN_PARTITION_EESOX is not setCONFIG_ACORN_PARTITION_ICS=yCONFIG_ACORN_PARTITION_ADFS=yCONFIG_ACORN_PARTITION_POWERTEC=yCONFIG_ACORN_PARTITION_RISCIX=yCONFIG_OSF_PARTITION=y
# CONFIG_AMIGA_PARTITION is not setCONFIG_ATARI_PARTITION=y
# CONFIG_MAC_PARTITION is not setCONFIG_MSDOS_PARTITION=yCONFIG_BSD_DISKLABEL=y
# CONFIG_MINIX_SUBPARTITION is not setCONFIG_SOLARIS_X86_PARTITION=yCONFIG_UNIXWARE_DISKLABEL=y
# CONFIG_LDM_PARTITION is not setCONFIG_SGI_PARTITION=yCONFIG_ULTRIX_PARTITION=y
# CONFIG_SUN_PARTITION is not setCONFIG_KARMA_PARTITION=yCONFIG_EFI_PARTITION=yCONFIG_SYSV68_PARTITION=yCONFIG_NLS=yCONFIG_NLS_DEFAULT="iso8859-1"CONFIG_NLS_CODEPAGE_437=yCONFIG_NLS_CODEPAGE_737=yCONFIG_NLS_CODEPAGE_775=y
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not setCONFIG_NLS_CODEPAGE_855=y
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not setCONFIG_NLS_CODEPAGE_861=m
# CONFIG_NLS_CODEPAGE_862 is not setCONFIG_NLS_CODEPAGE_863=m
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not setCONFIG_NLS_CODEPAGE_866=mCONFIG_NLS_CODEPAGE_869=mCONFIG_NLS_CODEPAGE_936=y
# CONFIG_NLS_CODEPAGE_950 is not setCONFIG_NLS_CODEPAGE_932=mCONFIG_NLS_CODEPAGE_949=mCONFIG_NLS_CODEPAGE_874=mCONFIG_NLS_ISO8859_8=mCONFIG_NLS_CODEPAGE_1250=m
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ASCII is not setCONFIG_NLS_ISO8859_1=mCONFIG_NLS_ISO8859_2=y
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not setCONFIG_NLS_ISO8859_5=m
# CONFIG_NLS_ISO8859_6 is not setCONFIG_NLS_ISO8859_7=yCONFIG_NLS_ISO8859_9=m
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not setCONFIG_NLS_ISO8859_15=yCONFIG_NLS_KOI8_R=yCONFIG_NLS_KOI8_U=y
# CONFIG_NLS_UTF8 is not setCONFIG_DLM=yCONFIG_DLM_DEBUG=y
#
# Kernel hacking
#CONFIG_TRACE_IRQFLAGS_SUPPORT=yCONFIG_PRINTK_TIME=yCONFIG_ALLOW_WARNINGS=yCONFIG_ENABLE_WARN_DEPRECATED=y
# CONFIG_ENABLE_MUST_CHECK is not setCONFIG_FRAME_WARN=1024CONFIG_MAGIC_SYSRQ=yCONFIG_UNUSED_SYMBOLS=yCONFIG_DEBUG_FS=yCONFIG_HEADERS_CHECK=yCONFIG_DEBUG_SECTION_MISMATCH=y
# CONFIG_DEBUG_KERNEL is not setCONFIG_SLUB_DEBUG_ON=yCONFIG_SLUB_STATS=yCONFIG_TRACE_IRQFLAGS=yCONFIG_STACKTRACE=yCONFIG_DEBUG_BUGVERBOSE=yCONFIG_DEBUG_MEMORY_INIT=yCONFIG_ARCH_WANT_FRAME_POINTERS=yCONFIG_FRAME_POINTER=y
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_LATENCYTOP is not setCONFIG_SYSCTL_SYSCALL_CHECK=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_TRACER_MAX_TRACE=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_FUNCTION_GRAPH_TRACER is not setCONFIG_IRQSOFF_TRACER=yCONFIG_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 set
# CONFIG_POWER_TRACER is not setCONFIG_KSYM_TRACER=yCONFIG_PROFILE_KSYM_TRACER=yCONFIG_STACK_TRACER=yCONFIG_KMEMTRACE=yCONFIG_WORKQUEUE_TRACER=yCONFIG_BLK_DEV_IO_TRACE=yCONFIG_DYNAMIC_FTRACE=yCONFIG_FUNCTION_PROFILER=yCONFIG_FTRACE_MCOUNT_RECORD=yCONFIG_FTRACE_SELFTEST=yCONFIG_FTRACE_STARTUP_TEST=yCONFIG_MMIOTRACE=y
# CONFIG_MMIOTRACE_TEST is not setCONFIG_PROVIDE_OHCI1394_DMA_INIT=yCONFIG_BUILD_DOCSRC=yCONFIG_DYNAMIC_DEBUG=yCONFIG_DMA_API_DEBUG=yCONFIG_SAMPLES=yCONFIG_SAMPLE_MARKERS=mCONFIG_SAMPLE_TRACEPOINTS=mCONFIG_SAMPLE_TRACE_EVENTS=mCONFIG_SAMPLE_KOBJECT=mCONFIG_SAMPLE_KPROBES=mCONFIG_SAMPLE_KRETPROBES=mCONFIG_SAMPLE_HW_BREAKPOINT=mCONFIG_HAVE_ARCH_KGDB=yCONFIG_HAVE_ARCH_KMEMCHECK=y
# CONFIG_STRICT_DEVMEM is not setCONFIG_X86_VERBOSE_BOOTUP=yCONFIG_EARLY_PRINTK=yCONFIG_EARLY_PRINTK_DBGP=y
# CONFIG_4KSTACKS is not setCONFIG_DOUBLEFAULT=yCONFIG_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=3CONFIG_IO_DELAY_0X80=y
# CONFIG_IO_DELAY_0XED is not set
# CONFIG_IO_DELAY_UDELAY is not set
# CONFIG_IO_DELAY_NONE is not setCONFIG_DEFAULT_IO_DELAY_TYPE=0CONFIG_OPTIMIZE_INLINING=y
#
# Security options
#CONFIG_KEYS=yCONFIG_KEYS_DEBUG_PROC_KEYS=yCONFIG_SECURITY=yCONFIG_SECURITYFS=y
# CONFIG_SECURITY_NETWORK is not setCONFIG_SECURITY_PATH=yCONFIG_SECURITY_FILE_CAPABILITIES=yCONFIG_SECURITY_TOMOYO=yCONFIG_XOR_BLOCKS=mCONFIG_ASYNC_CORE=mCONFIG_ASYNC_MEMCPY=mCONFIG_ASYNC_XOR=mCONFIG_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=y
# CONFIG_CRYPTO_TEST is not set
#
# Authenticated Encryption with Associated Data
#CONFIG_CRYPTO_CCM=mCONFIG_CRYPTO_GCM=mCONFIG_CRYPTO_SEQIV=y
#
# Block modes
#CONFIG_CRYPTO_CBC=yCONFIG_CRYPTO_CTR=y
# CONFIG_CRYPTO_CTS is not setCONFIG_CRYPTO_ECB=y
# CONFIG_CRYPTO_LRW is not setCONFIG_CRYPTO_PCBC=mCONFIG_CRYPTO_XTS=m
#
# Hash modes
#CONFIG_CRYPTO_HMAC=y
# CONFIG_CRYPTO_XCBC is not set
#
# Digest
#CONFIG_CRYPTO_CRC32C=yCONFIG_CRYPTO_CRC32C_INTEL=m
# CONFIG_CRYPTO_MD4 is not setCONFIG_CRYPTO_MD5=yCONFIG_CRYPTO_MICHAEL_MIC=yCONFIG_CRYPTO_RMD128=y
# CONFIG_CRYPTO_RMD160 is not setCONFIG_CRYPTO_RMD256=y
# CONFIG_CRYPTO_RMD320 is not setCONFIG_CRYPTO_SHA1=yCONFIG_CRYPTO_SHA256=mCONFIG_CRYPTO_SHA512=y
# CONFIG_CRYPTO_TGR192 is not set
# CONFIG_CRYPTO_WP512 is not set
#
# Ciphers
#CONFIG_CRYPTO_AES=y
# CONFIG_CRYPTO_AES_586 is not set
# CONFIG_CRYPTO_ANUBIS is not setCONFIG_CRYPTO_ARC4=yCONFIG_CRYPTO_BLOWFISH=yCONFIG_CRYPTO_CAMELLIA=mCONFIG_CRYPTO_CAST5=m
# CONFIG_CRYPTO_CAST6 is not setCONFIG_CRYPTO_DES=yCONFIG_CRYPTO_FCRYPT=yCONFIG_CRYPTO_KHAZAD=y
# CONFIG_CRYPTO_SALSA20 is not setCONFIG_CRYPTO_SALSA20_586=m
# CONFIG_CRYPTO_SEED is not setCONFIG_CRYPTO_SERPENT=mCONFIG_CRYPTO_TEA=m
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_TWOFISH_586 is not set
#
# Compression
#CONFIG_CRYPTO_DEFLATE=m
# CONFIG_CRYPTO_ZLIB is not setCONFIG_CRYPTO_LZO=y
#
# Random Number Generation
#CONFIG_CRYPTO_ANSI_CPRNG=yCONFIG_CRYPTO_HW=yCONFIG_CRYPTO_DEV_PADLOCK=m
# CONFIG_CRYPTO_DEV_PADLOCK_AES is not setCONFIG_CRYPTO_DEV_PADLOCK_SHA=mCONFIG_CRYPTO_DEV_GEODE=yCONFIG_CRYPTO_DEV_HIFN_795X=yCONFIG_CRYPTO_DEV_HIFN_795X_RNG=yCONFIG_HAVE_KVM=yCONFIG_HAVE_KVM_IRQCHIP=yCONFIG_VIRTUALIZATION=yCONFIG_KVM=yCONFIG_KVM_INTEL=mCONFIG_KVM_AMD=m
# CONFIG_KVM_TRACE is not setCONFIG_LGUEST=yCONFIG_VIRTIO=yCONFIG_VIRTIO_RING=yCONFIG_VIRTIO_PCI=mCONFIG_VIRTIO_BALLOON=yCONFIG_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=mCONFIG_CRC16=mCONFIG_CRC_T10DIF=yCONFIG_CRC_ITU_T=yCONFIG_CRC32=yCONFIG_CRC7=mCONFIG_LIBCRC32C=yCONFIG_AUDIT_GENERIC=yCONFIG_ZLIB_INFLATE=yCONFIG_ZLIB_DEFLATE=mCONFIG_LZO_COMPRESS=yCONFIG_LZO_DECOMPRESS=yCONFIG_DECOMPRESS_GZIP=yCONFIG_DECOMPRESS_BZIP2=yCONFIG_DECOMPRESS_LZMA=yCONFIG_TEXTSEARCH=yCONFIG_TEXTSEARCH_KMP=yCONFIG_TEXTSEARCH_BM=yCONFIG_TEXTSEARCH_FSM=yCONFIG_HAS_IOMEM=yCONFIG_HAS_IOPORT=yCONFIG_HAS_DMA=yCONFIG_CHECK_SIGNATURE=yCONFIG_NLATTR=yCONFIG_FORCE_SUCCESSFUL_BUILD=yCONFIG_FORCE_MINIMAL_CONFIG=yCONFIG_FORCE_MINIMAL_CONFIG_PHYS=yCONFIG_X86_32_ALWAYS_ON=y
Tejun Heo
maintainerPATCH 1/3 x86, percpu: Add 'percpu_read_stable()' interface for cacheable accesses
From: Linus Tolvards <[email protected]>
This is very useful for some common things like 'get_current()' and 'get_thread_info()', which can be used multiple times in a function, and where the result is cacheable.
tj: Added the magical undocumented "P" modifier to UP __percpu_arg()
to force gcc to dereference the pointer value passed in via the "p" input constraint. Without this, percpu_read_stable() returns the address of the percpu variable. Also added comment explaining the difference between percpu_read() and percpu_read_stable().
---
It was the missing magic 'P'. Patch titles have been updated as requested. The next two patches are the same except for the subject update. The updated patches are available in the following git tree.
git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git x86-percpu
Please note that the tree is rebased and needs to be forcibly pulled into x86/percpu. Thanks.
arch/x86/include/asm/current.h | 2 +- arch/x86/include/asm/percpu.h | 26 +++++++++++++++++++------- arch/x86/include/asm/thread_info.h | 2 +- 3 files changed, 21 insertions(+), 9 deletions(-)
arch/x86/include/asm/current.h +1 -1
@@ -11,7 +11,7 @@ DECLARE_PER_CPU(struct task_struct *, current_task); static __always_inline struct task_struct *get_current(void) { -return percpu_read (current_task); +return percpu_read_stable (current_task); }#define current get_current()
arch/x86/include/asm/percpu.h +19 -7
@@ -49,7 +49,7 @@#define __percpu_arg (x) "%%"__stringify(__percpu_seg)":%P" #x#define __my_cpu_offset percpu_read(this_cpu_off)#else -#define __percpu_arg (x) "%" #x +#define __percpu_arg (x) "%P" #x#endif /*
@@ -104,36 +104,48 @@ do { \ } \ } while (0) -#define percpu_from_op (op, var) \ +#define percpu_from_op (op, var, constraint) \ ({ \ typeof(var) ret__; \ switch (sizeof(var)) { \ case 1: \ asm(op "b "__percpu_arg(1)",%0" \ : "=q" (ret__) \ - : "m" (var)); \ + : constraint); \ break; \ case 2: \ asm(op "w "__percpu_arg(1)",%0" \ : "=r" (ret__) \ - : "m" (var)); \ + : constraint); \ break; \ case 4: \ asm(op "l "__percpu_arg(1)",%0" \ : "=r" (ret__) \ - : "m" (var)); \ + : constraint); \ break; \ case 8: \ asm(op "q "__percpu_arg(1)",%0" \ : "=r" (ret__) \ - : "m" (var)); \ + : constraint); \ break; \ default: __bad_percpu_size(); \ } \ ret__; \ }) -#define percpu_read (var) percpu_from_op("mov", per_cpu__##var) +/* +* percpu_read() makes gcc load the percpu variable every time it is +* accessed while percpu_read_stable() allows the value to be cached. +* percpu_read_stable() is more efficient and can be used if its value +* is guaranteed to be valid across cpus. The current users include +* get_current() and get_thread_info() both of which are actually +* per-thread variables implemented as per-cpu variables and thus +* stable for the duration of the respective task. +*/ +#define percpu_read (var) percpu_from_op("mov", per_cpu__##var, \ + "m" (per_cpu__##var)) +#define percpu_read_stable (var) percpu_from_op("mov", per_cpu__##var, \ + "p" (&per_cpu__##var))#define percpu_write (var, val) percpu_to_op("mov", per_cpu__##var, val)#define percpu_add (var, val) percpu_to_op("add", per_cpu__##var, val)#define percpu_sub (var, val) percpu_to_op("sub", per_cpu__##var, val)
arch/x86/include/asm/thread_info.h +1 -1
@@ -213,7 +213,7 @@ DECLARE_PER_CPU(unsigned long, kernel_stack);static inline struct thread_info *current_thread_info (void ) {struct thread_info *ti; - ti = (void *)(percpu_read (kernel_stack) + + ti = (void *)(percpu_read_stable (kernel_stack) +KERNEL_STACK_OFFSET -THREAD_SIZE );return ti; }
Signature · 1 line
1.6.0.2
Tejun Heo
maintainerPATCH 2/3 x86,percpu: fix DECLARE/DEFINE_PER_CPU_PAGE_ALIGNED()
In reply to Linus TorvaldsDECLARE/DEFINE_PER_CPU_PAGE_ALIGNED() put percpu variables in .page_aligned section without adding any alignment restrictions. Currently, this doesn't cause any problem because all users of the macros have explicit page alignment and page-sized but it's much safer to enforce page alignment from the macros. After all, it's what they claim to do.
Add __aligned(PAGE_SIZE) to DECLARE/DEFINE_PER_CPU_PAGE_ALIGNED() and drop explicit alignment from it users.
---
This doesn't cause any problem for the current tree. No need to push it hastily.
arch/x86/kernel/cpu/common.c | 3 +-- include/linux/percpu-defs.h | 8 +++++--- 2 files changed, 6 insertions(+), 5 deletions(-)
arch/x86/kernel/cpu/common.c +1 -2
@@ -1008,8 +1008,7 @@ static const unsigned int exception_stack_sizes[N_EXCEPTION_STACKS] = { }; static DEFINE_PER_CPU_PAGE_ALIGNED(char, exception_stacks - [(N_EXCEPTION_STACKS - 1) * EXCEPTION_STKSZ + DEBUG_STKSZ]) -__aligned(PAGE_SIZE) ; + [(N_EXCEPTION_STACKS - 1) * EXCEPTION_STKSZ + DEBUG_STKSZ]);/* May not be marked __init: used by software suspend */ void syscall_init (void )
include/linux/percpu-defs.h +5 -3
@@ -117,11 +117,13 @@/* * Declaration/definition used for per-CPU variables that must be page aligned. */ -#define DECLARE_PER_CPU_PAGE_ALIGNED (type, name) \ - DECLARE_PER_CPU_SECTION(type, name, ".page_aligned") +#define DECLARE_PER_CPU_PAGE_ALIGNED (type, name) \ + DECLARE_PER_CPU_SECTION(type, name, ".page_aligned") \ + __aligned(PAGE_SIZE)#define DEFINE_PER_CPU_PAGE_ALIGNED (type, name) \ - DEFINE_PER_CPU_SECTION(type, name, ".page_aligned") + DEFINE_PER_CPU_SECTION(type, name, ".page_aligned") \ + __aligned(PAGE_SIZE)/* * Intermodule exports for per-CPU variables.
Signature · 1 line
1.6.0.2
Tejun Heo
maintainerPATCH 3/3 x86: collect hot percpu variables into one cacheline
In reply to Linus TorvaldsOn x86_64, percpu variables current_task and kernel_stack are used for get_current() and current_thread_info() respectively and thus are often used close to each other. Move definition of current_task to kernel/cpu/common.c right above kernel_stack definition and align it to cacheline so that they always fall into the same cacheline. Two percpu variables defined there together - irq_stack_ptr and irq_count
- are also pretty hot and will benefit from sharing the cacheline.
For consistency, current_task definition for x86_32 is also moved to kernel/cpu/common.c.
Putting current_task and kernel_stack into the same cacheline was suggested by Linus Tolvards.
---
For now this should do but adding DEFINE_PER_CPU_HOT() definitely is a viable option.
arch/x86/kernel/cpu/common.c | 15 +++++++++++++-- arch/x86/kernel/process_32.c | 3 --- arch/x86/kernel/process_64.c | 3 --- 3 files changed, 13 insertions(+), 8 deletions(-)
arch/x86/kernel/cpu/common.c +13 -2
@@ -987,13 +987,21 @@ struct desc_ptr idt_descr = { 256 * 16 - 1, (unsigned long) idt_table }; DEFINE_PER_CPU_FIRST(union irq_stack_union, irq_stack_union)__aligned(PAGE_SIZE) ; -DEFINE_PER_CPU(char *, irq_stack_ptr) = -init_per_cpu_var (irq_stack_union.irq_stack) +IRQ_STACK_SIZE -64 ; +/* +* The following four percpu variables are hot. Align current_task to +* cacheline size such that all four fall in the same cacheline. +*/ +DEFINE_PER_CPU(struct task_struct *, current_task) ____cacheline_aligned = + &init_task; +EXPORT_PER_CPU_SYMBOL (current_task); DEFINE_PER_CPU(unsigned long, kernel_stack) = (unsigned long )&init_thread_union -KERNEL_STACK_OFFSET +THREAD_SIZE ;EXPORT_PER_CPU_SYMBOL (kernel_stack); +DEFINE_PER_CPU(char *, irq_stack_ptr) = +init_per_cpu_var (irq_stack_union.irq_stack) +IRQ_STACK_SIZE -64 ; + DEFINE_PER_CPU(unsigned int, irq_count) = -1;/*
@@ -1041,6 +1049,9 @@ DEFINE_PER_CPU(struct orig_ist, orig_ist);#else /* CONFIG_X86_64 */ +DEFINE_PER_CPU(struct task_struct *, current_task) = &init_task; +EXPORT_PER_CPU_SYMBOL (current_task); +#ifdef CONFIG_CC_STACKPROTECTOR DEFINE_PER_CPU(unsigned long, stack_canary);#endif
arch/x86/kernel/process_32.c +0 -3
@@ -61,9 +61,6 @@ asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); -DEFINE_PER_CPU(struct task_struct *, current_task) = &init_task; -EXPORT_PER_CPU_SYMBOL (current_task); -/* * Return saved PC of a blocked thread. */
arch/x86/kernel/process_64.c +0 -3
@@ -55,9 +55,6 @@ asmlinkage extern void ret_from_fork(void); -DEFINE_PER_CPU(struct task_struct *, current_task) = &init_task; -EXPORT_PER_CPU_SYMBOL (current_task); - DEFINE_PER_CPU(unsigned long, old_rsp); static DEFINE_PER_CPU(unsigned char, is_idle);
Signature · 1 line
1.6.0.2
Quoted 5 lines
Here's a suggested replacement - BUT NOTE THAT IT'S ENTIRELY UNTESTED!
Quoted 8 lines
(Ok, so the patch is bigger than it strictly needs to be - I hate repeating code, so I made that 'read PIT counter twice and compare MSB' be a new helper routine)
Hmm? What do you guys think?
Linus
Hi,
We are performing some test on the patch and will keep everyone posted with the progress soon.
Regards,
Wei Chong.
Quoted 7 lines · Tan, Wei Chong
Quoted 7 lines
Here's a suggested replacement - BUT NOTE THAT IT'S ENTIRELY UNTESTED!
(Ok, so the patch is bigger than it strictly needs to be - I hate repeating code, so I made that 'read PIT counter twice and compare MSB' be a new helper routine)
Quoted 6 lines
Quoted 1 line
Hmm? What do you guys think?
Hi,
We are performing some test on the patch and will keep everyone posted with the progress soon.
Thanks. I've zapped the original patch from x86/urgent. Linus's patch certainly looks feasible for .31 if it solves the problem and if we can merge it in the next few days.
Ingo
Quoted 10 lines
Quoted 4 lines
Hi,
We are performing some test on the patch and will keep everyone posted with the progress soon.
Thanks. I've zapped the original patch from x86/urgent. Linus's patch certainly looks feasible for .31 if it solves the problem and if we can merge it in the next few days.
Ingo
Hi,
Linus's patch looks good to go. I've tested it with 2 separate versions of BIOS, each 1000 cycles, without any wrong CPU frequency being reported. In contrast, the same CPU/platform without the patch will almost consistently report a wrong CPU frequency once every 20 cycles and once every 50 cycles respectively, for the 2 above mentioned BIOS.
Regards,
Tan Wei Chong.
Quoted 4 lines · Tan, Wei Chong
Quoted 3 lines
Thanks. I've zapped the original patch from x86/urgent. Linus's patch certainly looks feasible for .31 if it solves the problem and if we can merge it in the next few days.
Quoted 8 lines
Hi,
Linus's patch looks good to go. I've tested it with 2 separate versions of BIOS, each 1000 cycles, without any wrong CPU frequency being reported. In contrast, the same CPU/platform without the patch will almost consistently report a wrong CPU frequency once every 20 cycles and once every 50 cycles respectively, for the 2 above mentioned BIOS.
Ok, i've created a changelog out of your and Linus's mail and have committed the fix to x86/urgent - the -tip commit notification bot will send it in a few minutes.
Linus, can i have your SOB line please?
Ingo
Quoted 2 lines · Ingo Molnar
Linus, can i have your SOB line please?
Sure, with the testing, feel free to add
thanks,
Linus
[tip:x86/urgent] x86: Fix serialization in pit_expect_msb()
In reply to Tan, Wei ChongCommit-ID: 672f3c902d13ba6d4a8bc4bb92fb187ccd906908 Gitweb: http://git.kernel.org/tip/672f3c902d13ba6d4a8bc4bb92fb187ccd906908 Author: Linus Torvalds <[email protected]> AuthorDate: Fri, 31 Jul 2009 12:45:41 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Mon, 10 Aug 2009 11:03:51 +0200
x86: Fix serialization in pit_expect_msb()
Wei Chong Tan reported a fast-PIT-calibration corner-case:
| pit_expect_msb() is vulnerable to SMI disturbance corner case | in some platforms which causes /proc/cpuinfo to show wrong | CPU MHz value when quick_pit_calibrate() jumps to success | section.
I think that the real issue isn't even an SMI - but the fact that in the very last iteration of the loop, there's no serializing instruction _after_ the last 'rdtsc'. So even in the absense of SMI's, we do have a situation where the cycle counter was read without proper serialization.
The last check should be done outside the outer loop, since _inside_ the outer loop, we'll be testing that the PIT has the right MSB value has the right value in the next iteration.
So only the _last_ iteration is special, because that's the one that will not check the PIT MSB value any more, and because the final 'get_cycles()' isn't serialized.
In other words:
- I'd like to move the PIT MSB check to after the last iteration, rather than in every iteration
- I think we should comment on the fact that it's also a serializing instruction and so 'fences in' the TSC read.
Here's a suggested replacement.
LKML-Reference: <B28277FD4E0F9247A3D55704C440A140D5D683F3@pgsmsx504.gar.corp.intel.com>
--- arch/x86/kernel/tsc.c | 29 ++++++++++++++++++++++------- 1 files changed, 22 insertions(+), 7 deletions(-)
arch/x86/kernel/tsc.c +22 -7
@@ -275,15 +275,20 @@ static unsigned long pit_calibrate_tsc(u32 latch, unsigned long ms, int loopmin)* use the TSC value at the transitions to calculate a pretty * good value for the TSC frequencty. */ +static inline int pit_verify_msb (unsigned char val) +{ +/* Ignore LSB */ +inb (0x42 ); +return inb (0x42 ) == val; +} +static inline int pit_expect_msb (unsigned char val,u64 *tscp,unsigned long *deltap) {int count;u64 tsc =0 ;for (count =0 ; count <50000 ; count++) { -/* Ignore LSB */ -inb (0x42 ); -if (inb (0x42 ) != val) +if (!pit_verify_msb (val))break ; tsc =get_cycles (); }
@@ -336,8 +341,7 @@ static unsigned long quick_pit_calibrate(void)* to do that is to just read back the 16-bit counter * once from the PIT. */ -inb (0x42 ); -inb (0x42 ); +pit_verify_msb (0 );if (pit_expect_msb (0xff , &tsc, &d1)) {for (i =1 ; i <=MAX_QUICK_PIT_ITERATIONS ; i++) {
@@ -348,8 +352,19 @@ static unsigned long quick_pit_calibrate(void)* Iterate until the error is less than 500 ppm */ delta -= tsc; -if (d1+d2 < delta >>11 ) - goto success; +if (d1+d2 >= delta >>11 ) +continue ; + +/* +* Check the PIT one more time to verify that +* all TSC reads were stable wrt the PIT. +* +* This also guarantees serialization of the +* last cycle read ('d2') in pit_expect_msb. +*/ +if (!pit_verify_msb (0xfe - i)) +break ; + goto success; } }printk ("Fast TSC calibration failed\n" );
[tip:x86/urgent] x86: Fix serialization in pit_expect_msb()
In reply to Tan, Wei ChongCommit-ID: b6e61eef4f9f94714ac3ee4a5c96862d9bcd1836 Gitweb: http://git.kernel.org/tip/b6e61eef4f9f94714ac3ee4a5c96862d9bcd1836 Author: Linus Torvalds <[email protected]> AuthorDate: Fri, 31 Jul 2009 12:45:41 -0700 Committer: Ingo Molnar <[email protected]> CommitDate: Mon, 10 Aug 2009 19:56:57 +0200
x86: Fix serialization in pit_expect_msb()
Wei Chong Tan reported a fast-PIT-calibration corner-case:
| pit_expect_msb() is vulnerable to SMI disturbance corner case | in some platforms which causes /proc/cpuinfo to show wrong | CPU MHz value when quick_pit_calibrate() jumps to success | section.
I think that the real issue isn't even an SMI - but the fact that in the very last iteration of the loop, there's no serializing instruction _after_ the last 'rdtsc'. So even in the absense of SMI's, we do have a situation where the cycle counter was read without proper serialization.
The last check should be done outside the outer loop, since _inside_ the outer loop, we'll be testing that the PIT has the right MSB value has the right value in the next iteration.
So only the _last_ iteration is special, because that's the one that will not check the PIT MSB value any more, and because the final 'get_cycles()' isn't serialized.
In other words:
- I'd like to move the PIT MSB check to after the last iteration, rather than in every iteration
- I think we should comment on the fact that it's also a serializing instruction and so 'fences in' the TSC read.
Here's a suggested replacement.
LKML-Reference: <B28277FD4E0F9247A3D55704C440A140D5D683F3@pgsmsx504.gar.corp.intel.com>
--- arch/x86/kernel/tsc.c | 29 ++++++++++++++++++++++------- 1 files changed, 22 insertions(+), 7 deletions(-)
arch/x86/kernel/tsc.c +22 -7
@@ -275,15 +275,20 @@ static unsigned long pit_calibrate_tsc(u32 latch, unsigned long ms, int loopmin)* use the TSC value at the transitions to calculate a pretty * good value for the TSC frequencty. */ +static inline int pit_verify_msb (unsigned char val) +{ +/* Ignore LSB */ +inb (0x42 ); +return inb (0x42 ) == val; +} +static inline int pit_expect_msb (unsigned char val,u64 *tscp,unsigned long *deltap) {int count;u64 tsc =0 ;for (count =0 ; count <50000 ; count++) { -/* Ignore LSB */ -inb (0x42 ); -if (inb (0x42 ) != val) +if (!pit_verify_msb (val))break ; tsc =get_cycles (); }
@@ -336,8 +341,7 @@ static unsigned long quick_pit_calibrate(void)* to do that is to just read back the 16-bit counter * once from the PIT. */ -inb (0x42 ); -inb (0x42 ); +pit_verify_msb (0 );if (pit_expect_msb (0xff , &tsc, &d1)) {for (i =1 ; i <=MAX_QUICK_PIT_ITERATIONS ; i++) {
@@ -348,8 +352,19 @@ static unsigned long quick_pit_calibrate(void)* Iterate until the error is less than 500 ppm */ delta -= tsc; -if (d1+d2 < delta >>11 ) - goto success; +if (d1+d2 >= delta >>11 ) +continue ; + +/* +* Check the PIT one more time to verify that +* all TSC reads were stable wrt the PIT. +* +* This also guarantees serialization of the +* last cycle read ('d2') in pit_expect_msb. +*/ +if (!pit_verify_msb (0xfe - i)) +break ; + goto success; } }printk ("Fast TSC calibration failed\n" );
Quoted 9 lines
Sure, we might want the error term to be even smaller, but in no way does it actually invalidate any of the logic - the 'tsc' reading is just a guess anyway. Also, I think that the real issue isn't even an SMI - but the fact that in the very last iteration of the loop, there's no serializing instruction _after_ the last 'rdtsc'. So even in the absense of SMI's, we do have a situation where the cycle counter was read without proper serialization.
Hi,
I just recall something which I cannot understand. Earlier when we observed the wrong CPU frequency phenomenon (1666MHz being identified as 1800MHz), we use the same CPU and put them on 2 different boards. On one board, the failure rate is high (about 1 out of every 20). On the other, it almost never fails. We compare the 2 boards and they are quite close to each other with one very prominent difference. The failing board has no PS/2 port and so is using all USB keyboard/mouse while the good board uses PS/2 keyboard/mouse.
Thus, we plug in a USB keyboard on the good board and were then able produce the failure on the good board (despite at a lower failure rate, 1 out of every 100).
Does this not point to SMI?
Regards,
Wei Chong.