2.6.39-rc5-git2 boot crashs
Subsystems (5)
Also, with this configuration, sync dont work, the terminal waits endless. And if I type in 'reboot', then after the message it would go to reboot, nothing happens (it's possible that for reboot, sync is called). wl
---
Professional hosting for everyone - http://www.host.ru
Quoted 3 lines · werner
Also, with this configuration, sync dont work, the terminal waits endless. And if I type in 'reboot', then after the message it would go to reboot, nothing happens (it's possible that for reboot, sync is called).
Yes, sync is called for reboot.
However, that should be fairly easy to figure out. Well, perhaps not "figure out", but at least get more details of where it is hanging. A simple
echo w > /proc/sysrq-trigger
should give you a nice trace in the dmesg showing where 'sync' is hanging, and that would hopefully give us a lot more clues.
Linus
2011/5/3 werner <[email protected]>:
Quoted 8 lines
Pls watch the config enclosed.
IDE on ,
X86_EXTENDED_PLATFORMoff (alsoX_86elan)From the previous two suggestions, MTD on (appearently don't makes problems), but of MISC-FILESYSTEMS what appearently causes the error message during boot and perhaps also that sync don't work, I switched on the half and off the other half, to circle the problem.
Ok, can you try the attached patch, to see if the logfs oops goes away. Perhaps more importantly, does the sync problem also go away?
Quoted 2 lines
No problem with unzip / zip / moving big files etc, , so that this problem cames from
X86_EXTENDED_PLATTFORM.
Ok, that is very interesting.
Quoted 1 line
Tell me what to try out now
So at this point you have two problems, and I really would like to just doubly verify both of them. First off, the attached patch for the logfs oops and (hopefully) the sync hanging issue.
But secondly, I want you to double--check that whole CONFIG_X86_ELAN thing - I'd like you to test two kernels that are otherwise totally identical in their configurations, except one has CONFIG_X86_EXTENDED_PLATTFORM on and CONFIG_X86_ELAN, and the other does not. Just to make sure that with all the changes to the config file, that is really the _only_ difference, and that yes, that's the one that brings up the "crash at unzip" problem.
I'm adding Ingo Molnar, Thomas Gleixner Peter Anvin to the cc, because if this whole problem really is because of the x86 CPU configuration, they may have better ideas than I do.
Ingo/Thomas/Peter: see the whole long and confused thread on lkml. But it all boils down to Werner using a very full kernel config where not only is almost everything compiled in (which showed the logfs problem even though Werner didn't even have a logfs filesystem), but he also had a very generic x86 kernel. Too generic.
He had CONFIG_X86_EXTENDED_PLATTFORM and CONFIG_X86_ELAN on, and that has apparently worked for him (and a lot of other people - he does a distribution) up until 2.6.38. But as of 2.6.39-rc1 it causes some really odd problems under IO (his test-case is "unzip", but that's probably fairly random). The problem seems to show up as a bogus IO list for SATA, causing a big WARN_ON() or oops and then a dead machine due to IO problems.
I wonder what CONFIG_X86_ELAN has to do with anything, but from all the config testing werner has done, it really looks like that's the smoking gun here.
Why does M686 work, but X86_ELAN causes odd problems in 2.6.39-rc? Allocator issues? Maybe related to the lockless slub paths?
So I obviously agree that X86_ELAN is a crazy choice for a generic kernel, but it _used_ to work, and this is a regression.
Linus
fs/logfs/super.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
fs/logfs/super.c +4 -4
@@ -480,10 +480,6 @@ static int logfs_read_sb(struct super_block *sb, int read_only) !read_only)return -EIO ; -mutex_init (&super->s_dirop_mutex); -mutex_init (&super->s_object_alias_mutex); -INIT_LIST_HEAD (&super->s_freeing_list); - ret =logfs_init_rw (sb);if (ret)return ret;
@@ -601,6 +597,10 @@ static struct dentry *logfs_mount(struct file_system_type *type, int flags,if (!super)return ERR_PTR (-ENOMEM ); +mutex_init (&super->s_dirop_mutex); +mutex_init (&super->s_object_alias_mutex); +INIT_LIST_HEAD (&super->s_freeing_list); +if (!devname) err =logfs_get_sb_bdev (super, type, devname);else if (strncmp (devname,"mtd" ,3 ))
Quoted 4 lines · Linus Torvalds
Quoted 2 lines
No problem with unzip / zip / moving big files etc, , so that this problem cames from
X86_EXTENDED_PLATTFORM.Ok, that is very interesting.
I have no smart ideas straight away - just an observation: i keep testing CONFIG_X86_ELAN=y on real hardware, and it's enabled in about 4% of my configs:
sirius:~/linux/linux2/configs> grep -h MELAN * | sort | uniq -c
358 # CONFIG_MELAN is not set
15 CONFIG_MELAN=y
and i booted a few recently:
sirius:~/linux/linux2/configs> grep -l MELAN=y *
config-Mon_May__2_13_30_09_CEST_2011.good
config-Mon_May__2_15_02_43_CEST_2011.good
config-Mon_May__2_15_59_10_CEST_2011.good
config-Mon_May__2_16_19_49_CEST_2011.good
config-Mon_May__2_16_41_15_CEST_2011.good
config-Mon_May__2_18_10_56_CEST_2011.good
config-Mon_May__2_19_07_32_CEST_2011.good
config-Mon_May__2_19_28_56_CEST_2011.good
config-Mon_May__2_19_52_30_CEST_2011.good
config-Mon_May__2_21_40_44_CEST_2011.good
config-Mon_May__2_21_52_04_CEST_2011.good
config-Mon_May__2_23_43_29_CEST_2011.good
config-Sun_May__1_21_21_06_CEST_2011.good
config-Sun_May__1_22_15_02_CEST_2011.good
config-Tue_May__3_14_45_15_CEST_2011.good
(Note: CONFIG_X86_ELAN got renamed to CONFIG_MELAN recently.)
So whatever the breakage is, it's not just some 'nobody tests CONFIG_MELAN=y' easy breakage, but possibly something more configuration (or test) specific.
Thanks,
Ingo
Quoted 3 lines · Ingo Molnar
I have no smart ideas straight away - just an observation: i keep testing
CONFIG_X86_ELAN=yon real hardware, and it's enabled in about 4% of my configs:
So how often do you do more than just boot?
Because this problem doesn't happen at boot-time, the "bad IO" issue seems to happen only after some real filesystem work (ie the "unzip a 140MB file" etc). In one of the logs, the SATA driver issue ended up happening four hours after boot (but I think Werner could trigger it in minutes by doing heavy FS work).
That's why I'd suspect some subtle race or other and/or memory allocation re-use.
The subject line "boot crashs" is misleading, because that's the unrelated logfs thing that I have a tentative patch for.
That said, I don't really see why ELAN would be so special.
Werner: can you test without X86_EXTENDED_PLATFORM, but then picking the i486 config instead? That should approximate the ELAN configuration pretty closely, at least in things like compiler flags..
Linus
H. Peter Anvin
reviewerQuoted 3 lines · Linus Torvalds
That said, I don't really see why ELAN would be so special.
ELAN used to have a nonstandard A20 enabling sequence, until someone found out that changes to the mainline sequence had made ELAN work as a side effect.
At this point, it's just a CPU selection thing, so it makes very little sense.
-hpa
Quoted 11 lines · H. Peter Anvin
Quoted 3 lines · Linus Torvalds
That said, I don't really see why ELAN would be so special.
ELAN used to have a nonstandard A20 enabling sequence, until someone found out that changes to the mainline sequence had made ELAN work as a side effect.
At this point, it's just a CPU selection thing, so it makes very little sense.
the ELAN .config option influences the following details:
- sets X86_L1_CACHE_SHIFT to 4 (16 bytes) instead of the typical 6 (64 bytes)
- sets X86_ALIGNMENT_16
- sets the -march=i486 compiler flag
So in terms of the kernel image it seems to be mostly equivalent to selecting i486 from the CPU menu - except the X86_ALIGNMENT_16 detail (which does not seem to do anything substantive, AFAICS).
Thanks,
Ingo
Quoted 6 lines · Ingo Molnar
the ELAN .config option influences the following details:
- sets
X86_L1_CACHE_SHIFTto 4 (16 bytes) instead of the typical 6 (64 bytes)
- setsX86_ALIGNMENT_16
- sets the -march=i486 compiler flag
It also does this to the config diff:
306,307c328,332
< CONFIG_X86_ALIGNMENT_16=y
< CONFIG_X86_MINIMUM_CPU_FAMILY=4
---
Quoted 5 lines
CONFIG_X86_USE_PPRO_CHECKSUM=yCONFIG_X86_TSC=yCONFIG_X86_CMPXCHG64=yCONFIG_X86_CMOV=yCONFIG_X86_MINIMUM_CPU_FAMILY=5
because of all the indirect changes it causes.
Now, Werner is actually _running_ on an AMD Opteron (or whatever family 15 is), I think. And his kernel is SMP-enabled. And that whole thin looks really really iffy.
How/why do we even allow that combination of SMP and (for example) arch/x86/lib/atomic64_386_32.S to be picked?
I don't think he actually runs SMP, but the fact that we even allow that combination looks really odd/iffy. Am I missing something?
Linus
H. Peter Anvin
reviewerQuoted 26 lines · Linus Torvalds
Quoted 6 lines · Ingo Molnar
the ELAN .config option influences the following details:
- sets
X86_L1_CACHE_SHIFTto 4 (16 bytes) instead of the typical 6 (64 bytes)
- setsX86_ALIGNMENT_16
- sets the -march=i486 compiler flagIt also does this to the config diff:
306,307c328,332
<CONFIG_X86_ALIGNMENT_16=y
<CONFIG_X86_MINIMUM_CPU_FAMILY=4
---Quoted 5 lines
CONFIG_X86_USE_PPRO_CHECKSUM=yCONFIG_X86_TSC=yCONFIG_X86_CMPXCHG64=yCONFIG_X86_CMOV=yCONFIG_X86_MINIMUM_CPU_FAMILY=5because of all the indirect changes it causes.
Now, Werner is actually _running_ on an AMD Opteron (or whatever family 15 is), I think. And his kernel is SMP-enabled. And that whole thin looks really really iffy.
Quoted 6 lines
How/why do we even allow that combination of SMP and (for example)
arch/x86/lib/atomic64_386_32.Sto be picked?I don't think he actually runs SMP, but the fact that we even allow that combination looks really odd/iffy. Am I missing something?
We would end up in those paths before alternatives are run, but alternatives should be run before we start the second processor.
-hpa
Borislav Petkov
maintainerQuoted 2 lines · Linus Torvalds
Now, Werner is actually _running_ on an AMD Opteron (or whatever family 15 is), I think.
http://marc.info/?l=linux-kernel&m=130438580705332 says it's a AMD Athlon(tm) 64 X2 Dual Core Processor 4800+, i.e. a good old K8 desktop. The X86_ELAN Kconfig option, however, says:
config X86_ELAN
bool "AMD Elan"
depends on X86_32
depends on X86_EXTENDED_PLATFORM
---help---
Select this for an AMD Elan processor.
Do not use this option for K6/Athlon/Opteron processors!
If unsure, choose "PC-compatible" instead.
so if the sentence before last used to mean anything, this could be a problem. Quick search about it gives http://lkml.org/lkml/2004/1/12/239
which introduces that different compiler arch for ELAN: -march=i486, which could conflict with the generic selection?
Hmm.
Signature · 2 lines
Regards/Gruss,
Boris.Quoted 15 lines · Borislav Petkov
Quoted 2 lines · Linus Torvalds
Now, Werner is actually _running_ on an AMD Opteron (or whatever family 15 is), I think.
http://marc.info/?l=linux-kernel&m=130438580705332 says it's a AMD Athlon(tm) 64 X2 Dual Core Processor 4800+, i.e. a good old K8 desktop. The
X86_ELANKconfigoption, however, says:config
X86_ELAN
bool "AMD Elan"
depends onX86_32
depends onX86_EXTENDED_PLATFORM
---help---
Select this for an AMD Elan processor.
Quoted 8 lines
Do not use this option for K6/Athlon/Opteron processors!
If unsure, choose "PC-compatible" instead.
so if the sentence before last used to mean anything, this could be a problem. Quick search about it gives http://lkml.org/lkml/2004/1/12/239
which introduces that different compiler arch for ELAN: -march=i486, which could conflict with the generic selection?
Well, but CONFIG_X86_ELAN=y always worked/booted fine on generic hardware - including later AMD CPUs. I have booted it on an AMD Athlon64 CPU today:
config-Wed_May__4_09_26_50_CEST_2011.good:CONFIG_X86_32_SMP=y config-Wed_May__4_09_26_50_CEST_2011.good:CONFIG_MELAN=y config-Wed_May__4_09_26_50_CEST_2011.good:CONFIG_SMP=y
When it comes to regressions it's past behavior that counts, not the Kconfig help text.
Thanks,
Ingo
Borislav Petkov
maintainerQuoted 30 lines · Ingo Molnar
Quoted 15 lines · Borislav Petkov
Quoted 2 lines · Linus Torvalds
Now, Werner is actually _running_ on an AMD Opteron (or whatever family 15 is), I think.
http://marc.info/?l=linux-kernel&m=130438580705332 says it's a AMD Athlon(tm) 64 X2 Dual Core Processor 4800+, i.e. a good old K8 desktop. The
X86_ELANKconfigoption, however, says:config
X86_ELAN
bool "AMD Elan"
depends onX86_32
depends onX86_EXTENDED_PLATFORM
---help---
Select this for an AMD Elan processor.Quoted 8 lines
Do not use this option for K6/Athlon/Opteron processors!
If unsure, choose "PC-compatible" instead.
so if the sentence before last used to mean anything, this could be a problem. Quick search about it gives http://lkml.org/lkml/2004/1/12/239
which introduces that different compiler arch for ELAN: -march=i486, which could conflict with the generic selection?Well, but
CONFIG_X86_ELAN=yalways worked/booted fine on generic hardware - including later AMD CPUs. I have booted it on an AMD Athlon64 CPU today:
Quoted 6 lines
config-Wed_May__4_09_26_50_CEST_2011.good:CONFIG_X86_32_SMP=y config-Wed_May__4_09_26_50_CEST_2011.good:CONFIG_MELAN=y config-Wed_May__4_09_26_50_CEST_2011.good:CONFIG_SMP=y
When it comes to regressions it's past behavior that counts, not the
Kconfighelp text.
Right, I was referring to the odd problem Linus was talking about:
"He had CONFIG_X86_EXTENDED_PLATTFORM and CONFIG_X86_ELAN on, and that has apparently worked for him (and a lot of other people - he does a distribution) up until 2.6.38. But as of 2.6.39-rc1 it causes some really odd problems under IO (his test-case is "unzip", but that's probably fairly random). The problem seems to show up as a bogus IO list for SATA, causing a big WARN_ON() or oops and then a dead machine due to IO problems."
So booting might've not triggered it. But reportedly .38 was fine so yeah, the Kconfig help text might not even mean anything anymore.
Maybe I should run the same .config and test case on a K8 box here to see what happens.
@Werner: can you send me the exact .config and the testcase that triggers the issue?
Thanks.
Signature · 2 lines
Regards/Gruss,
Boris.Quoted 7 lines · Linus Torvalds
Quoted 4 lines · Ingo Molnar
I have no smart ideas straight away - just an observation: i keep testing
CONFIG_X86_ELAN=yon real hardware, and it's enabled in about 4% of my configs:So how often do you do more than just boot?
Not very often - but 'to boot' means a certain amount of filesystem work - and so does the 'prepare to boot the next kernel' step.
So i took Werner's .config.zipproblem and modified it to make it bootable:
removed CONFIG_ROOT_NFS=y and disabled CONFIG_IDE - both of which keep my box from booting. I've attached an updated .config.zipproblem2 file: Werner, can you confirm that this still fails for you?
So i booted v2.6.39-rc5-254-g5933f2a on an AMD box (which is SMP in fact, so should trigger races even faster):
Kernel 2.6.39-rc5-i486-1sys+ on an i686
and started a couple of such IO-intense loops:
FILE=bigfile.$RANDOM; while sync; do rm -f $FILE; dd if=/dev/urandom of=$FILE bs=1000 count=10000; done &
this creates patterns of high IO combined with periods waiting for IO to flush:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st 8 0 0 621140 8968 346500 0 0 29 874 1044 135 0 27 71 2 0 8 0 0 614692 8984 352904 0 0 0 0 2011 658 0 100 0 0 0 8 0 0 608492 8992 359104 0 0 0 0 2096 709 1 99 0 0 0 8 0 0 602016 8992 365332 0 0 0 0 2006 651 0 100 0 0 0 8 0 0 595692 8992 371760 0 0 0 0 2005 647 0 100 0 0 0 4 5 0 588128 9000 378080 0 0 0 31508 2031 610 0 100 0 0 0 6 2 0 583168 9068 383664 0 0 4 7532 2256 668 0 91 0 9 0 8 0 0 586888 9116 380212 0 0 0 456 2073 804 1 100 0 0 0 5 3 0 620484 9408 346904 0 0 0 14932 2768 1901 0 94 1 6 0 8 0 0 633656 9576 333392 0 0 0 6180 2369 1232 0 98 0 2 0 8 0 0 627208 9576 339720 0 0 0 0 2004 650 0 100 0 0 0 8 0 0 621008 9580 346032 0 0 0 0 2048 680 1 100 0 0 0 8 0 0 614436 9588 352296 0 0 0 0 2004 657 0 100 0 0 0 8 0 0 618652 9708 348296 0 0 0 25984 2283 816 0 92 0 7 0 8 0 0 612424 9708 354576 0 0 0 0 2005 651 0 100 0 0 0 8 0 0 605976 9716 360892 0 0 0 0 2004 652 0 100 0 0 0 8 0 0 599652 9716 367208 0 0 0 0 2006 654 0 100 0 0 0 8 0 0 593204 9720 373528 0 0 0 0 2004 652 0 100 0 0 0 7 2 0 585764 9728 379852 0 0 0 31612 2038 649 0 100 0 0 0 8 0 0 590104 9832 376180 0 0 4 7400 2274 920 0 98 0 2 0 2 6 0 597288 10008 368892 0 0 0 8636 2432 1373 0 95 0 5 0 8 0 0 627180 10208 339096 0 0 0 4324 2426 1429 0 97 0 2 0 8 0 0 630404 10284 335480 0 0 0 6408 2202 970 1 97 0 2 0
And indeed, after a couple of minutes testing i triggered this beauty:
BUG: unable to handle kernel NULL pointer dereference at 00000008 IP: [<c14e85c0>] generic_make_request+0x86/0x3f4 *pde = 00000000 Oops: 0000 [#1] SMP last sysfs file: /sys/devices/pci0000:00/0000:00:0a.0/net/eth0/address Modules linked in:
Pid: 2969, comm: flush-8:0 Not tainted 2.6.39-rc5-i486-1sys+ #122580 System manufacturer System Product Name/A8N-E
EIP: 0060:[<c14e85c0>] EFLAGS: 00010202 CPU: 1
EIP is at generic_make_request+0x86/0x3f4
EAX: 00000000 EBX: f569e280 ECX: f6a00000 EDX: f5528000
ESI: 00000008 EDI: 00000001 EBP: f5fd7c8c ESP: f5fd7c14
DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
Process flush-8:0 (pid: 2969, ti=f5fd6000 task=f64d0ab0 task.ti=f5fd6000)
Stack: f569e280 c10988af f5fd7c84 c1d74030 f6402400 f569e300 00081ddb f569e280 c10988af f5fd7c84 f64d0ab0 0000007b 0000007b 000000d8 00000008 ffffffc1 00000000 00000000 00000246 f6a06c80 055c08fe 00000000 c10988af 00000080 Call Trace: [<c10988af>] ? mempool_alloc_slab+0x13/0x15 [<c1d74030>] ? common_interrupt+0x30/0x40 [<c10988af>] ? mempool_alloc_slab+0x13/0x15 [<c10988af>] ? mempool_alloc_slab+0x13/0x15 [<c14e89f9>] submit_bio+0xcb/0xe4 [<c10a8048>] ? inc_zone_page_state+0xe/0x88 [<c10ed8b5>] ? bio_init+0x9/0x2e [<c10ee05b>] ? bio_alloc_bioset+0x3c/0x9c [<c10ea27a>] submit_bh+0xc6/0xe0 [<c10eb8f3>] __block_write_full_page+0x20a/0x2df [<c10ed9d9>] ? bio_put+0x8/0x2c [<c10ea9e5>] ? end_buffer_async_read+0xd5/0xd5 [<c10eba88>] block_write_full_page_endio+0xc0/0xc8 [<c10ea9e5>] ? end_buffer_async_read+0xd5/0xd5 [<c10ebaa7>] block_write_full_page+0x17/0x19 [<c10ea9e5>] ? end_buffer_async_read+0xd5/0xd5 [<c1156fd0>] ext3_ordered_writepage+0xc8/0x19c [<c11566ee>] ? bput_one+0x10/0x10 [<c109c9ce>] __writepage+0x10/0x28 [<c109cd96>] write_cache_pages+0x1c9/0x283 [<c109c9be>] ? bdi_set_max_ratio+0x52/0x52 [<c109ce86>] generic_writepages+0x36/0x49 [<c109d994>] do_writepages+0x28/0x2b [<c10e5642>] writeback_single_inode+0xa6/0x18d [<c10e58ef>] writeback_sb_inodes+0xa6/0x10b [<c10e6267>] writeback_inodes_wb+0xd9/0xee [<c10e642b>] wb_writeback+0x1af/0x26d [<c1045c12>] ? try_to_del_timer_sync+0x81/0x89 [<c103faca>] ? local_bh_disable+0x8/0x18 [<c10e655a>] wb_do_writeback+0x71/0x181 [<c1045dc0>] ? add_timer_on+0x95/0x95 [<c1045cb1>] ? del_timer+0xc/0x86 [<c10e66d8>] bdi_writeback_thread+0x6e/0x186 [<c10e666a>] ? wb_do_writeback+0x181/0x181 [<c1051f73>] kthread+0x67/0x6c [<c1051f0c>] ? kthread_worker_fn+0x114/0x114 [<c1d74046>] kernel_thread_helper+0x6/0x10 Code: 00 c7 45 c8 00 00 00 00 8d 55 c8 89 90 f4 02 00 00 89 45 b0 8b 53 20 c1 ea 09 89 55 c0 e8 e3 8c 88 00 83 7d c0 00 74 69 8b 43 0c <8b> 40 08 8b 90 84 00 00 00 f6 c2 01 74 04 f3 90 eb f1 8b 70 7c EIP: [<c14e85c0>] generic_make_request+0x86/0x3f4 SS:ESP 0068:f5fd7c14 CR2: 0000000000000008 ---[ end trace c45e837de578cd2f ]--- ------------[ cut here ]------------
( the full crashlog is attached as well - hardware details can be found there
although i doubt it matters. )
Seems to be a generic IO/BDI badness at first sight. It gives me the appearance of a race or boundary condition bug, not that of memory corruption.
Here's the crashing generic_make_request() function:
c14e853a <generic_make_request>:
c14e853a: 55 push %ebp c14e853b: 89 e5 mov %esp,%ebp c14e853d: 57 push %edi c14e853e: 56 push %esi c14e853f: 53 push %ebx c14e8540: 83 ec 6c sub $0x6c,%esp c14e8543: e8 08 bb 88 00 call c1d74050 <mcount> c14e8548: 89 c3 mov %eax,%ebx c14e854a: 65 a1 14 00 00 00 mov %gs:0x14,%eax c14e8550: 89 45 f0 mov %eax,-0x10(%ebp) c14e8553: 31 c0 xor %eax,%eax c14e8555: 64 a1 c4 c4 38 c2 mov %fs:0xc238c4c4,%eax c14e855b: 83 b8 f4 02 00 00 00 cmpl $0x0,0x2f4(%eax) c14e8562: 74 23 je c14e8587 <generic_make_request+0x4d> c14e8564: 8b 80 f4 02 00 00 mov 0x2f4(%eax),%eax c14e856a: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx) c14e8571: 8b 50 04 mov 0x4(%eax),%edx c14e8574: 85 d2 test %edx,%edx c14e8576: 74 05 je c14e857d <generic_make_request+0x43> c14e8578: 89 5a 08 mov %ebx,0x8(%edx) c14e857b: eb 02 jmp c14e857f <generic_make_request+0x45> c14e857d: 89 18 mov %ebx,(%eax) c14e857f: 89 58 04 mov %ebx,0x4(%eax) c14e8582: e9 8e 03 00 00 jmp c14e8915 <generic_make_request+0x3db> c14e8587: 83 7b 08 00 cmpl $0x0,0x8(%ebx) c14e858b: 74 02 je c14e858f <generic_make_request+0x55> c14e858d: 0f 0b ud2 c14e858f: c7 45 cc 00 00 00 00 movl $0x0,-0x34(%ebp) c14e8596: c7 45 c8 00 00 00 00 movl $0x0,-0x38(%ebp) c14e859d: 8d 55 c8 lea -0x38(%ebp),%edx c14e85a0: 89 90 f4 02 00 00 mov %edx,0x2f4(%eax) c14e85a6: 89 45 b0 mov %eax,-0x50(%ebp) c14e85a9: 8b 53 20 mov 0x20(%ebx),%edx c14e85ac: c1 ea 09 shr $0x9,%edx c14e85af: 89 55 c0 mov %edx,-0x40(%ebp) c14e85b2: e8 e3 8c 88 00 call c1d7129a <_cond_resched> c14e85b7: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) c14e85bb: 74 69 je c14e8626 <generic_make_request+0xec> c14e85bd: 8b 43 0c mov 0xc(%ebx),%eax c14e85c0: 8b 40 08 mov 0x8(%eax),%eax c14e85c3: 8b 90 84 00 00 00 mov 0x84(%eax),%edx c14e85c9: f6 c2 01 test $0x1,%dl c14e85cc: 74 04 je c14e85d2 <generic_make_request+0x98> c14e85ce: f3 90 pause c14e85d0: eb f1 jmp c14e85c3 <generic_make_request+0x89> c14e85d2: 8b 70 7c mov 0x7c(%eax),%esi c14e85d5: 8b b8 80 00 00 00 mov 0x80(%eax),%edi c14e85db: 39 90 84 00 00 00 cmp %edx,0x84(%eax) c14e85e1: 75 e0 jne c14e85c3 <generic_make_request+0x89> c14e85e3: 89 f0 mov %esi,%eax c14e85e5: 89 fa mov %edi,%edx c14e85e7: 0f ac d0 09 shrd $0x9,%edx,%eax c14e85eb: c1 fa 09 sar $0x9,%edx c14e85ee: 89 d1 mov %edx,%ecx c14e85f0: 09 c1 or %eax,%ecx c14e85f2: 74 32 je c14e8626 <generic_make_request+0xec> c14e85f4: 8b 0b mov (%ebx),%ecx c14e85f6: 89 4d c4 mov %ecx,-0x3c(%ebp) c14e85f9: 8b 4b 04 mov 0x4(%ebx),%ecx c14e85fc: 8b 75 c0 mov -0x40(%ebp),%esi c14e85ff: 31 ff xor %edi,%edi c14e8601: 83 fa 00 cmp $0x0,%edx c14e8604: 77 09 ja c14e860f <generic_make_request+0xd5> c14e8606: 3b 45 c0 cmp -0x40(%ebp),%eax c14e8609: 0f 82 21 02 00 00 jb c14e8830 <generic_make_request+0x2f6> c14e860f: 29 f0 sub %esi,%eax c14e8611: 19 fa sbb %edi,%edx c14e8613: 39 ca cmp %ecx,%edx c14e8615: 77 0f ja c14e8626 <generic_make_request+0xec> c14e8617: 0f 82 13 02 00 00 jb c14e8830 <generic_make_request+0x2f6> c14e861d: 3b 45 c4 cmp -0x3c(%ebp),%eax c14e8620: 0f 82 0a 02 00 00 jb c14e8830 <generic_make_request+0x2f6> c14e8626: c7 45 b4 00 00 00 00 movl $0x0,-0x4c(%ebp) c14e862d: c7 45 b8 ff ff ff ff movl $0xffffffff,-0x48(%ebp) c14e8634: c7 45 bc ff ff ff ff movl $0xffffffff,-0x44(%ebp) c14e863b: 8b 45 c0 mov -0x40(%ebp),%eax c14e863e: 89 45 9c mov %eax,-0x64(%ebp) c14e8641: c7 45 a0 00 00 00 00 movl $0x0,-0x60(%ebp) c14e8648: 8b 43 0c mov 0xc(%ebx),%eax c14e864b: 89 45 98 mov %eax,-0x68(%ebp) c14e864e: 89 c2 mov %eax,%edx c14e8650: 8b 40 58 mov 0x58(%eax),%eax c14e8653: 8b 80 c8 01 00 00 mov 0x1c8(%eax),%eax c14e8659: 89 45 c4 mov %eax,-0x3c(%ebp) c14e865c: 85 c0 test %eax,%eax c14e865e: 75 33 jne c14e8693 <generic_make_request+0x159> c14e8660: 89 d1 mov %edx,%ecx c14e8662: 8b 33 mov (%ebx),%esi c14e8664: 8b 7b 04 mov 0x4(%ebx),%edi c14e8667: 8d 55 d0 lea -0x30(%ebp),%edx c14e866a: 89 c8 mov %ecx,%eax c14e866c: e8 27 8c c2 ff call c1111298 <bdevname> c14e8671: 89 74 24 08 mov %esi,0x8(%esp) c14e8675: 89 7c 24 0c mov %edi,0xc(%esp) c14e8679: 89 44 24 04 mov %eax,0x4(%esp) c14e867d: c7 04 24 52 b5 01 c2 movl $0xc201b552,(%esp) c14e8684: e8 79 17 87 00 call c1d59e02 <printk> c14e8689: ba fb ff ff ff mov $0xfffffffb,%edx c14e868e: e9 43 02 00 00 jmp c14e88d6 <generic_make_request+0x39c> c14e8693: f6 43 14 40 testb $0x40,0x14(%ebx) c14e8697: 75 36 jne c14e86cf <generic_make_request+0x195> c14e8699: 8b 4d c4 mov -0x3c(%ebp),%ecx c14e869c: 8b b9 3c 02 00 00 mov 0x23c(%ecx),%edi c14e86a2: 39 7d c0 cmp %edi,-0x40(%ebp) c14e86a5: 76 28 jbe c14e86cf <generic_make_request+0x195> c14e86a7: 8b 4d 98 mov -0x68(%ebp),%ecx c14e86aa: 8b 73 20 mov 0x20(%ebx),%esi c14e86ad: c1 ee 09 shr $0x9,%esi c14e86b0: 8d 55 d0 lea -0x30(%ebp),%edx c14e86b3: 89 c8 mov %ecx,%eax c14e86b5: e8 de 8b c2 ff call c1111298 <bdevname> c14e86ba: 89 7c 24 0c mov %edi,0xc(%esp) c14e86be: 89 74 24 08 mov %esi,0x8(%esp) c14e86c2: 89 44 24 04 mov %eax,0x4(%esp) c14e86c6: c7 04 24 9f b5 01 c2 movl $0xc201b59f,(%esp) c14e86cd: eb b5 jmp c14e8684 <generic_make_request+0x14a> c14e86cf: 8b 55 c4 mov -0x3c(%ebp),%edx c14e86d2: 8b 82 a4 01 00 00 mov 0x1a4(%edx),%eax c14e86d8: a8 20 test $0x20,%al c14e86da: 75 ad jne c14e8689 <generic_make_request+0x14f> c14e86dc: 8b 43 20 mov 0x20(%ebx),%eax c14e86df: c1 e8 09 shr $0x9,%eax c14e86e2: 0f 84 80 00 00 00 je c14e8768 <generic_make_request+0x22e> c14e86e8: 8b 45 98 mov -0x68(%ebp),%eax c14e86eb: 3b 40 44 cmp 0x44(%eax),%eax c14e86ee: 74 78 je c14e8768 <generic_make_request+0x22e> c14e86f0: 8b 50 4c mov 0x4c(%eax),%edx c14e86f3: 89 55 a8 mov %edx,-0x58(%ebp) c14e86f6: 8b 32 mov (%edx),%esi c14e86f8: 8b 7a 04 mov 0x4(%edx),%edi c14e86fb: 03 33 add (%ebx),%esi c14e86fd: 13 7b 04 adc 0x4(%ebx),%edi c14e8700: 89 33 mov %esi,(%ebx) c14e8702: 89 7b 04 mov %edi,0x4(%ebx) c14e8705: 8b 40 44 mov 0x44(%eax),%eax c14e8708: 89 45 a4 mov %eax,-0x5c(%ebp) c14e870b: 89 43 0c mov %eax,0xc(%ebx) c14e870e: 89 f2 mov %esi,%edx c14e8710: 89 f9 mov %edi,%ecx c14e8712: 8b 45 a8 mov -0x58(%ebp),%eax c14e8715: 2b 10 sub (%eax),%edx c14e8717: 1b 48 04 sbb 0x4(%eax),%ecx c14e871a: 89 55 a8 mov %edx,-0x58(%ebp) c14e871d: 89 4d ac mov %ecx,-0x54(%ebp) c14e8720: 8b 45 98 mov -0x68(%ebp),%eax c14e8723: 8b 38 mov (%eax),%edi c14e8725: 8b 55 a4 mov -0x5c(%ebp),%edx c14e8728: 8b 42 58 mov 0x58(%edx),%eax c14e872b: 8b 80 c8 01 00 00 mov 0x1c8(%eax),%eax c14e8731: 89 45 a4 mov %eax,-0x5c(%ebp) c14e8734: e9 00 00 00 00 jmp c14e8739 <generic_make_request+0x1ff> c14e8739: eb 2d jmp c14e8768 <generic_make_request+0x22e> c14e873b: 8b 35 84 4e 2a c2 mov 0xc22a4e84,%esi c14e8741: 85 f6 test %esi,%esi c14e8743: 74 23 je c14e8768 <generic_make_request+0x22e> c14e8745: 8b 46 04 mov 0x4(%esi),%eax c14e8748: 8b 55 a8 mov -0x58(%ebp),%edx c14e874b: 8b 4d ac mov -0x54(%ebp),%ecx c14e874e: 89 54 24 04 mov %edx,0x4(%esp) c14e8752: 89 4c 24 08 mov %ecx,0x8(%esp) c14e8756: 89 3c 24 mov %edi,(%esp) c14e8759: 89 d9 mov %ebx,%ecx c14e875b: 8b 55 a4 mov -0x5c(%ebp),%edx c14e875e: ff 16 call *(%esi) c14e8760: 83 c6 08 add $0x8,%esi c14e8763: 83 3e 00 cmpl $0x0,(%esi) c14e8766: eb db jmp c14e8743 <generic_make_request+0x209> c14e8768: 89 d8 mov %ebx,%eax c14e876a: e8 a1 a2 c0 ff call c10f2a10 <bio_integrity_enabled> c14e876f: 85 c0 test %eax,%eax c14e8771: 74 0f je c14e8782 <generic_make_request+0x248> c14e8773: 89 d8 mov %ebx,%eax c14e8775: e8 06 a4 c0 ff call c10f2b80 <bio_integrity_prep> c14e877a: 85 c0 test %eax,%eax c14e877c: 0f 85 07 ff ff ff jne c14e8689 <generic_make_request+0x14f> c14e8782: 83 7d bc ff cmpl $0xffffffff,-0x44(%ebp) c14e8786: 75 06 jne c14e878e <generic_make_request+0x254> c14e8788: 83 7d b8 ff cmpl $0xffffffff,-0x48(%ebp) c14e878c: 74 37 je c14e87c5 <generic_make_request+0x28b> c14e878e: e9 00 00 00 00 jmp c14e8793 <generic_make_request+0x259> c14e8793: eb 30 jmp c14e87c5 <generic_make_request+0x28b> c14e8795: 8b 35 84 4e 2a c2 mov 0xc22a4e84,%esi c14e879b: 85 f6 test %esi,%esi c14e879d: 74 26 je c14e87c5 <generic_make_request+0x28b> c14e879f: 8b 46 04 mov 0x4(%esi),%eax c14e87a2: 8b 55 b8 mov -0x48(%ebp),%edx c14e87a5: 8b 4d bc mov -0x44(%ebp),%ecx c14e87a8: 89 54 24 04 mov %edx,0x4(%esp) c14e87ac: 89 4c 24 08 mov %ecx,0x8(%esp) c14e87b0: 8b 4d b4 mov -0x4c(%ebp),%ecx c14e87b3: 89 0c 24 mov %ecx,(%esp) c14e87b6: 89 d9 mov %ebx,%ecx c14e87b8: 8b 55 c4 mov -0x3c(%ebp),%edx c14e87bb: ff 16 call *(%esi) c14e87bd: 83 c6 08 add $0x8,%esi c14e87c0: 83 3e 00 cmpl $0x0,(%esi) c14e87c3: eb d8 jmp c14e879d <generic_make_request+0x263> c14e87c5: 8b 03 mov (%ebx),%eax c14e87c7: 8b 53 04 mov 0x4(%ebx),%edx c14e87ca: 89 45 b8 mov %eax,-0x48(%ebp) c14e87cd: 89 55 bc mov %edx,-0x44(%ebp) c14e87d0: 8b 43 0c mov 0xc(%ebx),%eax c14e87d3: 8b 10 mov (%eax),%edx c14e87d5: 89 55 b4 mov %edx,-0x4c(%ebp) c14e87d8: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) c14e87dc: 74 5e je c14e883c <generic_make_request+0x302> c14e87de: 8b 50 08 mov 0x8(%eax),%edx c14e87e1: 8b 82 84 00 00 00 mov 0x84(%edx),%eax c14e87e7: a8 01 test $0x1,%al c14e87e9: 74 04 je c14e87ef <generic_make_request+0x2b5> c14e87eb: f3 90 pause c14e87ed: eb f2 jmp c14e87e1 <generic_make_request+0x2a7> c14e87ef: 8b 72 7c mov 0x7c(%edx),%esi c14e87f2: 8b ba 80 00 00 00 mov 0x80(%edx),%edi c14e87f8: 39 82 84 00 00 00 cmp %eax,0x84(%edx) c14e87fe: 75 e1 jne c14e87e1 <generic_make_request+0x2a7> c14e8800: 89 f0 mov %esi,%eax c14e8802: 89 fa mov %edi,%edx c14e8804: 0f ac d0 09 shrd $0x9,%edx,%eax c14e8808: c1 fa 09 sar $0x9,%edx c14e880b: 89 d1 mov %edx,%ecx c14e880d: 09 c1 or %eax,%ecx c14e880f: 74 2b je c14e883c <generic_make_request+0x302> c14e8811: 8b 33 mov (%ebx),%esi c14e8813: 8b 4b 04 mov 0x4(%ebx),%ecx c14e8816: 83 fa 00 cmp $0x0,%edx c14e8819: 77 05 ja c14e8820 <generic_make_request+0x2e6> c14e881b: 3b 45 c0 cmp -0x40(%ebp),%eax c14e881e: 72 10 jb c14e8830 <generic_make_request+0x2f6> c14e8820: 2b 45 9c sub -0x64(%ebp),%eax c14e8823: 1b 55 a0 sbb -0x60(%ebp),%edx c14e8826: 39 ca cmp %ecx,%edx c14e8828: 77 12 ja c14e883c <generic_make_request+0x302> c14e882a: 72 04 jb c14e8830 <generic_make_request+0x2f6> c14e882c: 39 f0 cmp %esi,%eax c14e882e: 73 0c jae c14e883c <generic_make_request+0x302> c14e8830: 89 d8 mov %ebx,%eax c14e8832: e8 87 e7 ff ff call c14e6fbe <handle_bad_sector> c14e8837: e9 4d fe ff ff jmp c14e8689 <generic_make_request+0x14f> c14e883c: 8b 43 14 mov 0x14(%ebx),%eax c14e883f: a9 00 10 80 00 test $0x801000,%eax c14e8844: 74 1a je c14e8860 <generic_make_request+0x326> c14e8846: 8b 55 c4 mov -0x3c(%ebp),%edx c14e8849: 83 ba 7c 02 00 00 00 cmpl $0x0,0x27c(%edx) c14e8850: 75 0e jne c14e8860 <generic_make_request+0x326> c14e8852: 25 ff ef 7f ff and $0xff7fefff,%eax c14e8857: 89 43 14 mov %eax,0x14(%ebx) c14e885a: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) c14e885e: 74 6d je c14e88cd <generic_make_request+0x393> c14e8860: 8b 43 14 mov 0x14(%ebx),%eax c14e8863: a8 40 test $0x40,%al c14e8865: 74 2d je c14e8894 <generic_make_request+0x35a> c14e8867: 8b 4d c4 mov -0x3c(%ebp),%ecx c14e886a: 8b 91 a4 01 00 00 mov 0x1a4(%ecx),%edx c14e8870: 80 e6 40 and $0x40,%dh c14e8873: 74 5c je c14e88d1 <generic_make_request+0x397> c14e8875: a9 00 00 00 08 test $0x8000000,%eax c14e887a: 74 18 je c14e8894 <generic_make_request+0x35a> c14e887c: 8b 81 a4 01 00 00 mov 0x1a4(%ecx),%eax c14e8882: f6 c4 40 test $0x40,%ah c14e8885: 74 4a je c14e88d1 <generic_make_request+0x397> c14e8887: 8b 81 a4 01 00 00 mov 0x1a4(%ecx),%eax c14e888d: a9 00 00 02 00 test $0x20000,%eax c14e8892: 74 3d je c14e88d1 <generic_make_request+0x397> c14e8894: 85 db test %ebx,%ebx c14e8896: 74 45 je c14e88dd <generic_make_request+0x3a3> c14e8898: e9 00 00 00 00 jmp c14e889d <generic_make_request+0x363> c14e889d: eb 1c jmp c14e88bb <generic_make_request+0x381> c14e889f: 8b 35 fc 4e 2a c2 mov 0xc22a4efc,%esi c14e88a5: 85 f6 test %esi,%esi c14e88a7: 74 12 je c14e88bb <generic_make_request+0x381> c14e88a9: 8b 46 04 mov 0x4(%esi),%eax c14e88ac: 89 d9 mov %ebx,%ecx c14e88ae: 8b 55 c4 mov -0x3c(%ebp),%edx c14e88b1: ff 16 call *(%esi) c14e88b3: 83 c6 08 add $0x8,%esi c14e88b6: 83 3e 00 cmpl $0x0,(%esi) c14e88b9: eb ec jmp c14e88a7 <generic_make_request+0x36d> c14e88bb: 89 da mov %ebx,%edx c14e88bd: 8b 45 c4 mov -0x3c(%ebp),%eax c14e88c0: ff 50 44 call *0x44(%eax) c14e88c3: 85 c0 test %eax,%eax c14e88c5: 0f 85 7d fd ff ff jne c14e8648 <generic_make_request+0x10e> c14e88cb: eb 10 jmp c14e88dd <generic_make_request+0x3a3> c14e88cd: 31 d2 xor %edx,%edx c14e88cf: eb 05 jmp c14e88d6 <generic_make_request+0x39c> c14e88d1: ba a1 ff ff ff mov $0xffffffa1,%edx c14e88d6: 89 d8 mov %ebx,%eax c14e88d8: e8 b8 49 c0 ff call c10ed295 <bio_endio> c14e88dd: 8b 55 b0 mov -0x50(%ebp),%edx c14e88e0: 8b 82 f4 02 00 00 mov 0x2f4(%edx),%eax c14e88e6: 8b 18 mov (%eax),%ebx c14e88e8: 85 db test %ebx,%ebx c14e88ea: 74 1c je c14e8908 <generic_make_request+0x3ce> c14e88ec: 8b 53 08 mov 0x8(%ebx),%edx c14e88ef: 89 10 mov %edx,(%eax) c14e88f1: 85 d2 test %edx,%edx c14e88f3: 75 07 jne c14e88fc <generic_make_request+0x3c2> c14e88f5: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax) c14e88fc: c7 43 08 00 00 00 00 movl $0x0,0x8(%ebx) c14e8903: e9 a1 fc ff ff jmp c14e85a9 <generic_make_request+0x6f> c14e8908: 8b 4d b0 mov -0x50(%ebp),%ecx c14e890b: c7 81 f4 02 00 00 00 movl $0x0,0x2f4(%ecx) c14e8912: 00 00 00 c14e8915: 8b 45 f0 mov -0x10(%ebp),%eax c14e8918: 65 33 05 14 00 00 00 xor %gs:0x14,%eax c14e891f: 74 05 je c14e8926 <generic_make_request+0x3ec> c14e8921: e8 56 27 b5 ff call c103b07c <__stack_chk_fail> c14e8926: 83 c4 6c add $0x6c,%esp c14e8929: 5b pop %ebx c14e892a: 5e pop %esi c14e892b: 5f pop %edi c14e892c: 5d pop %ebp
c14e892d: c3 ret
The crash is at:
c14e85ac: c1 ea 09 shr $0x9,%edx c14e85af: 89 55 c0 mov %edx,-0x40(%ebp) c14e85b2: e8 e3 8c 88 00 call c1d7129a <_cond_resched> c14e85b7: 83 7d c0 00 cmpl $0x0,-0x40(%ebp) c14e85bb: 74 69 je c14e8626 <generic_make_request+0xec> c14e85bd: 8b 43 0c mov 0xc(%ebx),%eax * c14e85c0: 8b 40 08 mov 0x8(%eax),%eax <==== [ **CRASH** ] c14e85c3: 8b 90 84 00 00 00 mov 0x84(%eax),%edx c14e85c9: f6 c2 01 test $0x1,%dl
which corresponds to:
1414
1415 if (!nr_sectors)
1416 return 0;
1417
1418 /* Test device or partition size, when known. */
1419 maxsector = i_size_read(bio->bi_bdev->bd_inode) >> 9; <==== [ **CRASH** ]
1420 if (maxsector) {
1421 sector_t sector = bio->bi_sector;
1422
1423 if (maxsector < nr_sectors || maxsector - nr_sectors < sector) {
bio->bi_bdev has become NULL?
I do not think the _cond_resched() was called, judging from stack contents. But we just had an IRQ:
[<c1d74030>] ? common_interrupt+0x30/0x40
So we might have raced with block IO IRQ queue-completion/submission activites.
But maybe it was a reschedule after all, just the stack does not carry any traces of it anymore. IRQs do not clear ->bi_bdev, right? Unless the bio refcounts are wrong and an IRQ's completion actually frees the bio, right?
I've built a CONFIG_DEBUG_PAGEALLOC=y and CONFIG_SLUB_DEBUG=y kernel, maybe the crash triggers in a more revealing way.
Thanks,
Ingo
#
# Automatically generated make config: don't edit
# Linux/i386 2.6.39-rc5 Kernel Configuration
# Wed May 4 11:12:22 2011
#
# CONFIG_64BIT is not setCONFIG_X86_32=y
# CONFIG_X86_64 is not setCONFIG_X86=yCONFIG_INSTRUCTION_DECODER=y CONFIG_OUTPUT_FORMAT="elf32-i386" CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" CONFIG_GENERIC_CMOS_UPDATE=y CONFIG_CLOCKSOURCE_WATCHDOG=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_LOCKDEP_SUPPORT=yCONFIG_STACKTRACE_SUPPORT=y CONFIG_HAVE_LATENCYTOP_SUPPORT=yCONFIG_MMU=yCONFIG_ZONE_DMA=yCONFIG_NEED_DMA_MAP_STATE=y CONFIG_NEED_SG_DMA_LENGTH=yCONFIG_GENERIC_ISA_DMA=yCONFIG_GENERIC_IOMAP=yCONFIG_GENERIC_BUG=yCONFIG_GENERIC_HWEIGHT=yCONFIG_GENERIC_GPIO=yCONFIG_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_NEED_PER_CPU_EMBED_FIRST_CHUNK=y CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=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_HAVE_INTEL_TXT=yCONFIG_X86_32_SMP=yCONFIG_X86_HT=y CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" CONFIG_KTIME_SCALAR=y CONFIG_ARCH_CPU_PROBE_RELEASE=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_CONSTRUCTORS=yCONFIG_HAVE_IRQ_WORK=yCONFIG_IRQ_WORK=y
#
# General setup
#CONFIG_EXPERIMENTAL=yCONFIG_INIT_ENV_ARG_LIMIT=32CONFIG_CROSS_COMPILE=""CONFIG_LOCALVERSION="-i486-1sys"
# CONFIG_LOCALVERSION_AUTO is not setCONFIG_HAVE_KERNEL_GZIP=yCONFIG_HAVE_KERNEL_BZIP2=yCONFIG_HAVE_KERNEL_LZMA=yCONFIG_HAVE_KERNEL_XZ=yCONFIG_HAVE_KERNEL_LZO=yCONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not setCONFIG_SWAP=yCONFIG_SYSVIPC=yCONFIG_SYSVIPC_SYSCTL=yCONFIG_POSIX_MQUEUE=yCONFIG_POSIX_MQUEUE_SYSCTL=yCONFIG_BSD_PROCESS_ACCT=yCONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_FHANDLE is not set
# CONFIG_TASKSTATS is not setCONFIG_AUDIT=yCONFIG_AUDITSYSCALL=yCONFIG_AUDIT_WATCH=yCONFIG_AUDIT_TREE=yCONFIG_HAVE_GENERIC_HARDIRQS=y
#
# IRQ subsystem
#CONFIG_GENERIC_HARDIRQS=yCONFIG_HAVE_SPARSE_IRQ=yCONFIG_GENERIC_IRQ_PROBE=yCONFIG_GENERIC_IRQ_SHOW=yCONFIG_GENERIC_PENDING_IRQ=yCONFIG_IRQ_FORCED_THREADING=y
# CONFIG_SPARSE_IRQ is not set
#
# RCU Subsystem
#CONFIG_TREE_RCU=y
# CONFIG_PREEMPT_RCU is not set
# CONFIG_RCU_TRACE is not setCONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not set
# CONFIG_TREE_RCU_TRACE is not setCONFIG_IKCONFIG=yCONFIG_IKCONFIG_PROC=yCONFIG_LOG_BUF_SHIFT=21CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=yCONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
# CONFIG_CGROUP_NS is not set
# CONFIG_CGROUP_FREEZER is not set
# CONFIG_CGROUP_DEVICE is not set
# CONFIG_CPUSETS is not set
# CONFIG_CGROUP_CPUACCT is not set
# CONFIG_RESOURCE_COUNTERS is not set
# CONFIG_CGROUP_PERF is not setCONFIG_CGROUP_SCHED=yCONFIG_FAIR_GROUP_SCHED=y
# CONFIG_RT_GROUP_SCHED is not set
# CONFIG_BLK_CGROUP is not setCONFIG_NAMESPACES=yCONFIG_UTS_NS=yCONFIG_IPC_NS=yCONFIG_USER_NS=yCONFIG_PID_NS=yCONFIG_NET_NS=yCONFIG_SCHED_AUTOGROUP=yCONFIG_SYSFS_DEPRECATED=y
# CONFIG_SYSFS_DEPRECATED_V2 is not setCONFIG_RELAY=yCONFIG_BLK_DEV_INITRD=yCONFIG_INITRAMFS_SOURCE=""CONFIG_RD_GZIP=yCONFIG_RD_BZIP2=yCONFIG_RD_LZMA=yCONFIG_RD_XZ=yCONFIG_RD_LZO=yCONFIG_CC_OPTIMIZE_FOR_SIZE=yCONFIG_SYSCTL=yCONFIG_ANON_INODES=yCONFIG_EXPERT=yCONFIG_UID16=yCONFIG_SYSCTL_SYSCALL=yCONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_EXTRA_PASS is not setCONFIG_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=yCONFIG_EMBEDDED=yCONFIG_HAVE_PERF_EVENTS=y
#
# Kernel Performance Events And Counters
#CONFIG_PERF_EVENTS=y
# CONFIG_PERF_COUNTERS is not setCONFIG_VM_EVENT_COUNTERS=yCONFIG_PCI_QUIRKS=yCONFIG_SLUB_DEBUG=yCONFIG_COMPAT_BRK=y
# CONFIG_SLAB is not setCONFIG_SLUB=y
# CONFIG_SLOB is not setCONFIG_PROFILING=yCONFIG_TRACEPOINTS=yCONFIG_OPROFILE=yCONFIG_OPROFILE_EVENT_MULTIPLEX=yCONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not setCONFIG_JUMP_LABEL=yCONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=yCONFIG_USER_RETURN_NOTIFIER=yCONFIG_HAVE_IOREMAP_PROT=yCONFIG_HAVE_KPROBES=yCONFIG_HAVE_KRETPROBES=yCONFIG_HAVE_OPTPROBES=yCONFIG_HAVE_ARCH_TRACEHOOK=yCONFIG_HAVE_DMA_ATTRS=yCONFIG_USE_GENERIC_SMP_HELPERS=yCONFIG_HAVE_REGS_AND_STACK_ACCESS_API=yCONFIG_HAVE_DMA_API_DEBUG=yCONFIG_HAVE_HW_BREAKPOINT=yCONFIG_HAVE_MIXED_BREAKPOINTS_REGS=yCONFIG_HAVE_USER_RETURN_NOTIFIER=yCONFIG_HAVE_PERF_EVENTS_NMI=yCONFIG_HAVE_ARCH_JUMP_LABEL=y
#
# GCOV-based kernel profiling
#
# CONFIG_GCOV_KERNEL is not setCONFIG_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=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not setCONFIG_STOP_MACHINE=yCONFIG_BLOCK=yCONFIG_LBDAF=yCONFIG_BLK_DEV_BSG=yCONFIG_BLK_DEV_INTEGRITY=y
#
# IO Schedulers
#CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_DEADLINE=y CONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_DEADLINE is not set CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set CONFIG_DEFAULT_IOSCHED="cfq" CONFIG_PREEMPT_NOTIFIERS=yCONFIG_PADATA=y
# CONFIG_INLINE_SPIN_TRYLOCK is not set
# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set # CONFIG_INLINE_SPIN_LOCK is not set
# CONFIG_INLINE_SPIN_LOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set CONFIG_INLINE_SPIN_UNLOCK=y
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_READ_TRYLOCK is not set
# CONFIG_INLINE_READ_LOCK is not set
# CONFIG_INLINE_READ_LOCK_BH is not set
# CONFIG_INLINE_READ_LOCK_IRQ is not set
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set CONFIG_INLINE_READ_UNLOCK=y
# CONFIG_INLINE_READ_UNLOCK_BH is not set CONFIG_INLINE_READ_UNLOCK_IRQ=y
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set # CONFIG_INLINE_WRITE_TRYLOCK is not set
# CONFIG_INLINE_WRITE_LOCK is not set
# CONFIG_INLINE_WRITE_LOCK_BH is not set
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set CONFIG_INLINE_WRITE_UNLOCK=y
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y
#
# Processor type and features
#CONFIG_TICK_ONESHOT=y
# CONFIG_NO_HZ is not setCONFIG_HIGH_RES_TIMERS=yCONFIG_GENERIC_CLOCKEVENTS_BUILD=yCONFIG_SMP=yCONFIG_X86_MPPARSE=yCONFIG_X86_BIGSMP=yCONFIG_X86_EXTENDED_PLATFORM=yCONFIG_X86_ELAN=y
# CONFIG_X86_MRST is not setCONFIG_X86_RDC321X=y
# CONFIG_X86_32_NON_STANDARD is not setCONFIG_X86_SUPPORTS_MEMORY_FAILURE=yCONFIG_X86_32_IRIS=yCONFIG_SCHED_OMIT_FRAME_POINTER=yCONFIG_PARAVIRT_GUEST=y
# CONFIG_XEN_PRIVILEGED_GUEST is not setCONFIG_KVM_CLOCK=yCONFIG_KVM_GUEST=yCONFIG_LGUEST_GUEST=yCONFIG_PARAVIRT=y
# CONFIG_PARAVIRT_SPINLOCKS is not setCONFIG_PARAVIRT_CLOCK=yCONFIG_NO_BOOTMEM=yCONFIG_MEMTEST=yCONFIG_X86_INTERNODE_CACHE_SHIFT=4CONFIG_X86_CMPXCHG=yCONFIG_CMPXCHG_LOCAL=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_PROCESSOR_SELECT=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=yCONFIG_HPET_TIMER=yCONFIG_HPET_EMULATE_RTC=yCONFIG_DMI=y
# CONFIG_IOMMU_HELPER is not setCONFIG_IOMMU_API=yCONFIG_NR_CPUS=32CONFIG_SCHED_SMT=yCONFIG_SCHED_MC=y
# CONFIG_IRQ_TIME_ACCOUNTING is not set
# CONFIG_PREEMPT_NONE is not setCONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not setCONFIG_X86_LOCAL_APIC=yCONFIG_X86_IO_APIC=yCONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=yCONFIG_X86_MCE=yCONFIG_X86_MCE_INTEL=yCONFIG_X86_MCE_AMD=yCONFIG_X86_ANCIENT_MCE=yCONFIG_X86_MCE_THRESHOLD=yCONFIG_X86_MCE_INJECT=yCONFIG_X86_THERMAL_VECTOR=yCONFIG_VM86=y
# CONFIG_TOSHIBA is not setCONFIG_I8K=yCONFIG_X86_REBOOTFIXUPS=yCONFIG_MICROCODE=yCONFIG_MICROCODE_INTEL=yCONFIG_MICROCODE_AMD=yCONFIG_MICROCODE_OLD_INTERFACE=yCONFIG_X86_MSR=yCONFIG_X86_CPUID=y
# CONFIG_NOHIGHMEM is not setCONFIG_HIGHMEM4G=y
# CONFIG_HIGHMEM64G is not setCONFIG_VMSPLIT_3G=y
# CONFIG_VMSPLIT_3G_OPT is not set
# CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_2G_OPT is not set
# CONFIG_VMSPLIT_1G is not setCONFIG_PAGE_OFFSET=0xC0000000CONFIG_HIGHMEM=y
# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
# CONFIG_ARCH_DMA_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_SPARSEMEM_MANUAL is not setCONFIG_FLATMEM=yCONFIG_FLAT_NODE_MEM_MAP=yCONFIG_SPARSEMEM_STATIC=yCONFIG_HAVE_MEMBLOCK=yCONFIG_PAGEFLAGS_EXTENDED=yCONFIG_SPLIT_PTLOCK_CPUS=4CONFIG_COMPACTION=yCONFIG_MIGRATION=y
# CONFIG_PHYS_ADDR_T_64BIT is not setCONFIG_ZONE_DMA_FLAG=1CONFIG_BOUNCE=yCONFIG_VIRT_TO_BUS=yCONFIG_MMU_NOTIFIER=yCONFIG_KSM=yCONFIG_DEFAULT_MMAP_MIN_ADDR=65536CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=yCONFIG_MEMORY_FAILURE=yCONFIG_TRANSPARENT_HUGEPAGE=yCONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not setCONFIG_HIGHPTE=yCONFIG_X86_CHECK_BIOS_CORRUPTION=yCONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=yCONFIG_X86_RESERVE_LOW=64CONFIG_MATH_EMULATION=yCONFIG_MTRR=yCONFIG_MTRR_SANITIZER=yCONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1CONFIG_X86_PAT=yCONFIG_ARCH_USES_PG_UNCACHED=yCONFIG_EFI=yCONFIG_SECCOMP=yCONFIG_CC_STACKPROTECTOR=y
# 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=y
# CONFIG_KEXEC is not set
# CONFIG_CRASH_DUMP is not setCONFIG_PHYSICAL_START=0x1000000
# CONFIG_RELOCATABLE is not setCONFIG_PHYSICAL_ALIGN=0x100000CONFIG_HOTPLUG_CPU=yCONFIG_COMPAT_VDSO=y
# CONFIG_CMDLINE_BOOL is not setCONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
#
# Power management and ACPI options
#CONFIG_SUSPEND=yCONFIG_SUSPEND_FREEZER=yCONFIG_HIBERNATE_CALLBACKS=yCONFIG_HIBERNATION=yCONFIG_PM_STD_PARTITION="\"\""CONFIG_PM_SLEEP=yCONFIG_PM_SLEEP_SMP=yCONFIG_PM_RUNTIME=yCONFIG_PM=y
# CONFIG_PM_DEBUG is not setCONFIG_ACPI=yCONFIG_ACPI_SLEEP=yCONFIG_ACPI_PROCFS=yCONFIG_ACPI_PROCFS_POWER=yCONFIG_ACPI_POWER_METER=m
# CONFIG_ACPI_EC_DEBUGFS is not setCONFIG_ACPI_PROC_EVENT=yCONFIG_ACPI_AC=yCONFIG_ACPI_BATTERY=yCONFIG_ACPI_BUTTON=yCONFIG_ACPI_VIDEO=yCONFIG_ACPI_FAN=yCONFIG_ACPI_DOCK=yCONFIG_ACPI_PROCESSOR=yCONFIG_ACPI_IPMI=mCONFIG_ACPI_HOTPLUG_CPU=yCONFIG_ACPI_PROCESSOR_AGGREGATOR=yCONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_CUSTOM_DSDT is not setCONFIG_ACPI_BLACKLIST_YEAR=2001
# CONFIG_ACPI_DEBUG is not setCONFIG_ACPI_PCI_SLOT=yCONFIG_X86_PM_TIMER=yCONFIG_ACPI_CONTAINER=yCONFIG_ACPI_SBS=yCONFIG_ACPI_HED=yCONFIG_ACPI_APEI=yCONFIG_ACPI_APEI_GHES=m
# CONFIG_ACPI_APEI_PCIEAER is not set
# CONFIG_ACPI_APEI_EINJ is not set
# CONFIG_ACPI_APEI_ERST_DEBUG is not setCONFIG_SFI=yCONFIG_X86_APM_BOOT=yCONFIG_APM=y
# CONFIG_APM_IGNORE_USER_SUSPEND is not set
# CONFIG_APM_DO_ENABLE is not set
# CONFIG_APM_CPU_IDLE is not set
# CONFIG_APM_DISPLAY_BLANK is not set
# CONFIG_APM_ALLOW_INTS is not set
#
# CPU Frequency scaling
#CONFIG_CPU_FREQ=yCONFIG_CPU_FREQ_TABLE=y
# CONFIG_CPU_FREQ_DEBUG is not set CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_GOV_POWERSAVE=y CONFIG_CPU_FREQ_GOV_USERSPACE=y CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
#
# CPUFreq processor drivers
#CONFIG_X86_PCC_CPUFREQ=yCONFIG_X86_ACPI_CPUFREQ=yCONFIG_ELAN_CPUFREQ=yCONFIG_SC520_CPUFREQ=yCONFIG_X86_POWERNOW_K6=yCONFIG_X86_POWERNOW_K7=yCONFIG_X86_POWERNOW_K7_ACPI=yCONFIG_X86_POWERNOW_K8=yCONFIG_X86_GX_SUSPMOD=yCONFIG_X86_SPEEDSTEP_CENTRINO=yCONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=yCONFIG_X86_SPEEDSTEP_ICH=yCONFIG_X86_SPEEDSTEP_SMI=yCONFIG_X86_P4_CLOCKMOD=yCONFIG_X86_CPUFREQ_NFORCE2=yCONFIG_X86_LONGRUN=yCONFIG_X86_LONGHAUL=yCONFIG_X86_E_POWERSAVER=y
#
# shared options # CONFIG_X86_SPEEDSTEP_LIB=y CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y CONFIG_CPU_IDLE=y CONFIG_CPU_IDLE_GOV_LADDER=y CONFIG_INTEL_IDLE=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 set
# CONFIG_PCI_GOOLPC is not setCONFIG_PCI_GOANY=yCONFIG_PCI_BIOS=yCONFIG_PCI_DIRECT=yCONFIG_PCI_MMCONFIG=yCONFIG_PCI_OLPC=yCONFIG_PCI_DOMAINS=yCONFIG_PCI_CNB20LE_QUIRK=yCONFIG_DMAR=yCONFIG_DMAR_DEFAULT_ON=yCONFIG_DMAR_FLOPPY_WA=yCONFIG_PCIEPORTBUS=yCONFIG_HOTPLUG_PCI_PCIE=yCONFIG_PCIEAER=yCONFIG_PCIE_ECRC=yCONFIG_PCIEAER_INJECT=yCONFIG_PCIEASPM=yCONFIG_PCIEASPM_DEBUG=yCONFIG_PCIE_PME=yCONFIG_ARCH_SUPPORTS_MSI=yCONFIG_PCI_MSI=y
# CONFIG_PCI_STUB is not setCONFIG_HT_IRQ=yCONFIG_PCI_IOV=yCONFIG_PCI_IOAPIC=yCONFIG_PCI_LABEL=yCONFIG_ISA_DMA_API=yCONFIG_ISA=yCONFIG_EISA=yCONFIG_EISA_VLB_PRIMING=yCONFIG_EISA_PCI_EISA=yCONFIG_EISA_VIRTUAL_ROOT=yCONFIG_EISA_NAMES=yCONFIG_MCA=yCONFIG_MCA_LEGACY=yCONFIG_MCA_PROC_FS=y
CONFIG_SCx200=y
CONFIG_SCx200HR_TIMER=yCONFIG_OLPC=yCONFIG_OLPC_XO1=mCONFIG_AMD_NB=yCONFIG_PCCARD=yCONFIG_PCMCIA=yCONFIG_PCMCIA_LOAD_CIS=yCONFIG_CARDBUS=y
#
# PC-card bridges
#CONFIG_YENTA=yCONFIG_YENTA_O2=yCONFIG_YENTA_RICOH=yCONFIG_YENTA_TI=yCONFIG_YENTA_ENE_TUNE=yCONFIG_YENTA_TOSHIBA=yCONFIG_PD6729=yCONFIG_I82092=yCONFIG_I82365=yCONFIG_TCIC=yCONFIG_PCMCIA_PROBE=yCONFIG_PCCARD_NONSTATIC=yCONFIG_HOTPLUG_PCI=y
# CONFIG_HOTPLUG_PCI_FAKE is not setCONFIG_HOTPLUG_PCI_COMPAQ=y
# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not setCONFIG_HOTPLUG_PCI_IBM=yCONFIG_HOTPLUG_PCI_ACPI=yCONFIG_HOTPLUG_PCI_ACPI_IBM=yCONFIG_HOTPLUG_PCI_CPCI=yCONFIG_HOTPLUG_PCI_CPCI_ZT5550=yCONFIG_HOTPLUG_PCI_CPCI_GENERIC=yCONFIG_HOTPLUG_PCI_SHPC=yCONFIG_RAPIDIO=yCONFIG_RAPIDIO_DISC_TIMEOUT=30CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS=yCONFIG_RAPIDIO_TSI57X=yCONFIG_RAPIDIO_CPS_XX=yCONFIG_RAPIDIO_TSI568=yCONFIG_RAPIDIO_CPS_GEN2=yCONFIG_RAPIDIO_TSI500=yCONFIG_RAPIDIO_DEBUG=y
#
# Executable file formats / Emulations
#CONFIG_BINFMT_ELF=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not setCONFIG_HAVE_AOUT=yCONFIG_BINFMT_AOUT=yCONFIG_BINFMT_MISC=yCONFIG_HAVE_ATOMIC_IOMAP=yCONFIG_HAVE_TEXT_POKE_SMP=yCONFIG_NET=y
#
# Networking options
#CONFIG_PACKET=yCONFIG_UNIX=yCONFIG_XFRM=yCONFIG_XFRM_USER=yCONFIG_XFRM_SUB_POLICY=yCONFIG_XFRM_MIGRATE=yCONFIG_XFRM_STATISTICS=yCONFIG_XFRM_IPCOMP=mCONFIG_NET_KEY=mCONFIG_NET_KEY_MIGRATE=yCONFIG_INET=yCONFIG_IP_MULTICAST=yCONFIG_IP_ADVANCED_ROUTER=yCONFIG_IP_FIB_TRIE_STATS=yCONFIG_IP_MULTIPLE_TABLES=yCONFIG_IP_ROUTE_MULTIPATH=yCONFIG_IP_ROUTE_VERBOSE=yCONFIG_IP_ROUTE_CLASSID=yCONFIG_IP_PNP=yCONFIG_IP_PNP_DHCP=yCONFIG_IP_PNP_BOOTP=yCONFIG_IP_PNP_RARP=yCONFIG_NET_IPIP=yCONFIG_NET_IPGRE_DEMUX=mCONFIG_NET_IPGRE=mCONFIG_NET_IPGRE_BROADCAST=yCONFIG_IP_MROUTE=yCONFIG_IP_MROUTE_MULTIPLE_TABLES=yCONFIG_IP_PIMSM_V1=yCONFIG_IP_PIMSM_V2=yCONFIG_ARPD=yCONFIG_SYN_COOKIES=yCONFIG_INET_AH=mCONFIG_INET_ESP=mCONFIG_INET_IPCOMP=mCONFIG_INET_XFRM_TUNNEL=mCONFIG_INET_TUNNEL=yCONFIG_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=mCONFIG_TCP_CONG_CUBIC=yCONFIG_TCP_CONG_WESTWOOD=mCONFIG_TCP_CONG_HTCP=mCONFIG_TCP_CONG_HSTCP=mCONFIG_TCP_CONG_HYBLA=mCONFIG_TCP_CONG_VEGAS=mCONFIG_TCP_CONG_SCALABLE=mCONFIG_TCP_CONG_LP=mCONFIG_TCP_CONG_VENO=mCONFIG_TCP_CONG_YEAH=mCONFIG_TCP_CONG_ILLINOIS=mCONFIG_DEFAULT_CUBIC=y
# CONFIG_DEFAULT_RENO is not setCONFIG_DEFAULT_TCP_CONG="cubic"CONFIG_TCP_MD5SIG=yCONFIG_IPV6=yCONFIG_IPV6_PRIVACY=yCONFIG_IPV6_ROUTER_PREF=yCONFIG_IPV6_ROUTE_INFO=yCONFIG_IPV6_OPTIMISTIC_DAD=yCONFIG_INET6_AH=mCONFIG_INET6_ESP=mCONFIG_INET6_IPCOMP=mCONFIG_IPV6_MIP6=mCONFIG_INET6_XFRM_TUNNEL=mCONFIG_INET6_TUNNEL=mCONFIG_INET6_XFRM_MODE_TRANSPORT=mCONFIG_INET6_XFRM_MODE_TUNNEL=mCONFIG_INET6_XFRM_MODE_BEET=mCONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=mCONFIG_IPV6_SIT=mCONFIG_IPV6_SIT_6RD=yCONFIG_IPV6_NDISC_NODETYPE=yCONFIG_IPV6_TUNNEL=mCONFIG_IPV6_MULTIPLE_TABLES=yCONFIG_IPV6_SUBTREES=yCONFIG_IPV6_MROUTE=yCONFIG_IPV6_MROUTE_MULTIPLE_TABLES=yCONFIG_IPV6_PIMSM_V2=yCONFIG_NETLABEL=y
# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETWORK_PHY_TIMESTAMPING is not setCONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not setCONFIG_NETFILTER_ADVANCED=yCONFIG_BRIDGE_NETFILTER=y
#
# Core Netfilter Configuration
#CONFIG_NETFILTER_NETLINK=mCONFIG_NETFILTER_NETLINK_QUEUE=mCONFIG_NETFILTER_NETLINK_LOG=mCONFIG_NF_CONNTRACK=mCONFIG_NF_CONNTRACK_MARK=y
# CONFIG_NF_CONNTRACK_ZONES is not set
# CONFIG_NF_CONNTRACK_EVENTS is not set
# CONFIG_NF_CONNTRACK_TIMESTAMP is not setCONFIG_NF_CT_PROTO_DCCP=mCONFIG_NF_CT_PROTO_GRE=mCONFIG_NF_CT_PROTO_SCTP=mCONFIG_NF_CT_PROTO_UDPLITE=mCONFIG_NF_CONNTRACK_AMANDA=mCONFIG_NF_CONNTRACK_FTP=mCONFIG_NF_CONNTRACK_H323=mCONFIG_NF_CONNTRACK_IRC=mCONFIG_NF_CONNTRACK_BROADCAST=mCONFIG_NF_CONNTRACK_NETBIOS_NS=mCONFIG_NF_CONNTRACK_SNMP=mCONFIG_NF_CONNTRACK_PPTP=mCONFIG_NF_CONNTRACK_SANE=mCONFIG_NF_CONNTRACK_SIP=mCONFIG_NF_CONNTRACK_TFTP=mCONFIG_NF_CT_NETLINK=mCONFIG_NETFILTER_TPROXY=mCONFIG_NETFILTER_XTABLES=m
#
# Xtables combined modules
#CONFIG_NETFILTER_XT_MARK=mCONFIG_NETFILTER_XT_CONNMARK=m
# CONFIG_NETFILTER_XT_SET is not set
#
# Xtables targets
#CONFIG_NETFILTER_XT_TARGET_AUDIT=mCONFIG_NETFILTER_XT_TARGET_CHECKSUM=mCONFIG_NETFILTER_XT_TARGET_CLASSIFY=mCONFIG_NETFILTER_XT_TARGET_CONNMARK=mCONFIG_NETFILTER_XT_TARGET_CT=mCONFIG_NETFILTER_XT_TARGET_DSCP=mCONFIG_NETFILTER_XT_TARGET_HL=mCONFIG_NETFILTER_XT_TARGET_IDLETIMER=mCONFIG_NETFILTER_XT_TARGET_LED=mCONFIG_NETFILTER_XT_TARGET_MARK=mCONFIG_NETFILTER_XT_TARGET_NFLOG=mCONFIG_NETFILTER_XT_TARGET_NFQUEUE=mCONFIG_NETFILTER_XT_TARGET_NOTRACK=mCONFIG_NETFILTER_XT_TARGET_RATEEST=mCONFIG_NETFILTER_XT_TARGET_TEE=mCONFIG_NETFILTER_XT_TARGET_TPROXY=mCONFIG_NETFILTER_XT_TARGET_TRACE=mCONFIG_NETFILTER_XT_TARGET_TCPMSS=mCONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
#
# Xtables matches
#CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=mCONFIG_NETFILTER_XT_MATCH_CLUSTER=mCONFIG_NETFILTER_XT_MATCH_COMMENT=mCONFIG_NETFILTER_XT_MATCH_CONNBYTES=mCONFIG_NETFILTER_XT_MATCH_CONNLIMIT=mCONFIG_NETFILTER_XT_MATCH_CONNMARK=mCONFIG_NETFILTER_XT_MATCH_CONNTRACK=mCONFIG_NETFILTER_XT_MATCH_CPU=mCONFIG_NETFILTER_XT_MATCH_DCCP=mCONFIG_NETFILTER_XT_MATCH_DEVGROUP=mCONFIG_NETFILTER_XT_MATCH_DSCP=mCONFIG_NETFILTER_XT_MATCH_ESP=mCONFIG_NETFILTER_XT_MATCH_HASHLIMIT=mCONFIG_NETFILTER_XT_MATCH_HELPER=mCONFIG_NETFILTER_XT_MATCH_HL=mCONFIG_NETFILTER_XT_MATCH_IPRANGE=mCONFIG_NETFILTER_XT_MATCH_IPVS=mCONFIG_NETFILTER_XT_MATCH_LENGTH=mCONFIG_NETFILTER_XT_MATCH_LIMIT=mCONFIG_NETFILTER_XT_MATCH_MAC=mCONFIG_NETFILTER_XT_MATCH_MARK=mCONFIG_NETFILTER_XT_MATCH_MULTIPORT=mCONFIG_NETFILTER_XT_MATCH_OSF=mCONFIG_NETFILTER_XT_MATCH_OWNER=mCONFIG_NETFILTER_XT_MATCH_POLICY=mCONFIG_NETFILTER_XT_MATCH_PHYSDEV=mCONFIG_NETFILTER_XT_MATCH_PKTTYPE=mCONFIG_NETFILTER_XT_MATCH_QUOTA=mCONFIG_NETFILTER_XT_MATCH_RATEEST=mCONFIG_NETFILTER_XT_MATCH_REALM=mCONFIG_NETFILTER_XT_MATCH_RECENT=mCONFIG_NETFILTER_XT_MATCH_SCTP=mCONFIG_NETFILTER_XT_MATCH_SOCKET=mCONFIG_NETFILTER_XT_MATCH_STATE=mCONFIG_NETFILTER_XT_MATCH_STATISTIC=mCONFIG_NETFILTER_XT_MATCH_STRING=mCONFIG_NETFILTER_XT_MATCH_TCPMSS=mCONFIG_NETFILTER_XT_MATCH_TIME=mCONFIG_NETFILTER_XT_MATCH_U32=mCONFIG_IP_SET=mCONFIG_IP_SET_MAX=256CONFIG_IP_SET_BITMAP_IP=mCONFIG_IP_SET_BITMAP_IPMAC=mCONFIG_IP_SET_BITMAP_PORT=mCONFIG_IP_SET_HASH_IP=mCONFIG_IP_SET_HASH_IPPORT=mCONFIG_IP_SET_HASH_IPPORTIP=mCONFIG_IP_SET_HASH_IPPORTNET=mCONFIG_IP_SET_HASH_NET=mCONFIG_IP_SET_HASH_NETPORT=mCONFIG_IP_SET_LIST_SET=mCONFIG_IP_VS=mCONFIG_IP_VS_IPV6=y
# CONFIG_IP_VS_DEBUG is not setCONFIG_IP_VS_TAB_BITS=12
#
# IPVS transport protocol load balancing support
#CONFIG_IP_VS_PROTO_TCP=yCONFIG_IP_VS_PROTO_UDP=yCONFIG_IP_VS_PROTO_AH_ESP=yCONFIG_IP_VS_PROTO_ESP=yCONFIG_IP_VS_PROTO_AH=yCONFIG_IP_VS_PROTO_SCTP=y
#
# IPVS scheduler
#CONFIG_IP_VS_RR=mCONFIG_IP_VS_WRR=mCONFIG_IP_VS_LC=mCONFIG_IP_VS_WLC=mCONFIG_IP_VS_LBLC=mCONFIG_IP_VS_LBLCR=mCONFIG_IP_VS_DH=mCONFIG_IP_VS_SH=mCONFIG_IP_VS_SED=mCONFIG_IP_VS_NQ=m
#
# IPVS application helper
#CONFIG_IP_VS_FTP=mCONFIG_IP_VS_NFCT=yCONFIG_IP_VS_PE_SIP=m
#
# IP: Netfilter Configuration
#CONFIG_NF_DEFRAG_IPV4=mCONFIG_NF_CONNTRACK_IPV4=mCONFIG_NF_CONNTRACK_PROC_COMPAT=yCONFIG_IP_NF_QUEUE=mCONFIG_IP_NF_IPTABLES=mCONFIG_IP_NF_MATCH_AH=mCONFIG_IP_NF_MATCH_ECN=mCONFIG_IP_NF_MATCH_TTL=mCONFIG_IP_NF_FILTER=mCONFIG_IP_NF_TARGET_REJECT=mCONFIG_IP_NF_TARGET_LOG=mCONFIG_IP_NF_TARGET_ULOG=mCONFIG_NF_NAT=mCONFIG_NF_NAT_NEEDED=yCONFIG_IP_NF_TARGET_MASQUERADE=mCONFIG_IP_NF_TARGET_NETMAP=mCONFIG_IP_NF_TARGET_REDIRECT=mCONFIG_NF_NAT_SNMP_BASIC=mCONFIG_NF_NAT_PROTO_DCCP=mCONFIG_NF_NAT_PROTO_GRE=mCONFIG_NF_NAT_PROTO_UDPLITE=mCONFIG_NF_NAT_PROTO_SCTP=mCONFIG_NF_NAT_FTP=mCONFIG_NF_NAT_IRC=mCONFIG_NF_NAT_TFTP=mCONFIG_NF_NAT_AMANDA=mCONFIG_NF_NAT_PPTP=mCONFIG_NF_NAT_H323=mCONFIG_NF_NAT_SIP=mCONFIG_IP_NF_MANGLE=mCONFIG_IP_NF_TARGET_CLUSTERIP=mCONFIG_IP_NF_TARGET_ECN=mCONFIG_IP_NF_TARGET_TTL=mCONFIG_IP_NF_RAW=mCONFIG_IP_NF_SECURITY=mCONFIG_IP_NF_ARPTABLES=mCONFIG_IP_NF_ARPFILTER=mCONFIG_IP_NF_ARP_MANGLE=m
#
# IPv6: Netfilter Configuration
#CONFIG_NF_DEFRAG_IPV6=mCONFIG_NF_CONNTRACK_IPV6=mCONFIG_IP6_NF_QUEUE=mCONFIG_IP6_NF_IPTABLES=mCONFIG_IP6_NF_MATCH_AH=mCONFIG_IP6_NF_MATCH_EUI64=mCONFIG_IP6_NF_MATCH_FRAG=mCONFIG_IP6_NF_MATCH_OPTS=mCONFIG_IP6_NF_MATCH_HL=mCONFIG_IP6_NF_MATCH_IPV6HEADER=mCONFIG_IP6_NF_MATCH_MH=mCONFIG_IP6_NF_MATCH_RT=mCONFIG_IP6_NF_TARGET_HL=mCONFIG_IP6_NF_TARGET_LOG=mCONFIG_IP6_NF_FILTER=mCONFIG_IP6_NF_TARGET_REJECT=mCONFIG_IP6_NF_MANGLE=mCONFIG_IP6_NF_RAW=mCONFIG_IP6_NF_SECURITY=m
#
# DECnet: Netfilter Configuration
#CONFIG_DECNET_NF_GRABULATOR=mCONFIG_BRIDGE_NF_EBTABLES=mCONFIG_BRIDGE_EBT_BROUTE=mCONFIG_BRIDGE_EBT_T_FILTER=mCONFIG_BRIDGE_EBT_T_NAT=mCONFIG_BRIDGE_EBT_802_3=mCONFIG_BRIDGE_EBT_AMONG=mCONFIG_BRIDGE_EBT_ARP=mCONFIG_BRIDGE_EBT_IP=mCONFIG_BRIDGE_EBT_IP6=mCONFIG_BRIDGE_EBT_LIMIT=mCONFIG_BRIDGE_EBT_MARK=mCONFIG_BRIDGE_EBT_PKTTYPE=mCONFIG_BRIDGE_EBT_STP=mCONFIG_BRIDGE_EBT_VLAN=mCONFIG_BRIDGE_EBT_ARPREPLY=mCONFIG_BRIDGE_EBT_DNAT=mCONFIG_BRIDGE_EBT_MARK_T=mCONFIG_BRIDGE_EBT_REDIRECT=mCONFIG_BRIDGE_EBT_SNAT=mCONFIG_BRIDGE_EBT_LOG=mCONFIG_BRIDGE_EBT_ULOG=mCONFIG_BRIDGE_EBT_NFLOG=mCONFIG_IP_DCCP=mCONFIG_INET_DCCP_DIAG=m
#
# DCCP CCIDs Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP_CCID2_DEBUG is not setCONFIG_IP_DCCP_CCID3=y
# CONFIG_IP_DCCP_CCID3_DEBUG is not setCONFIG_IP_DCCP_TFRC_LIB=yCONFIG_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=yCONFIG_RDS=mCONFIG_RDS_RDMA=mCONFIG_RDS_TCP=m
# CONFIG_RDS_DEBUG is not setCONFIG_TIPC=mCONFIG_TIPC_ADVANCED=yCONFIG_TIPC_PORTS=8191CONFIG_TIPC_LOG=0
# CONFIG_TIPC_DEBUG is not setCONFIG_ATM=yCONFIG_ATM_CLIP=y
# CONFIG_ATM_CLIP_NO_ICMP is not setCONFIG_ATM_LANE=yCONFIG_ATM_MPOA=yCONFIG_ATM_BR2684=m
# CONFIG_ATM_BR2684_IPFILTER is not setCONFIG_L2TP=m
# CONFIG_L2TP_DEBUGFS is not setCONFIG_L2TP_V3=yCONFIG_L2TP_IP=mCONFIG_L2TP_ETH=mCONFIG_STP=mCONFIG_GARP=mCONFIG_BRIDGE=mCONFIG_BRIDGE_IGMP_SNOOPING=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=mCONFIG_DECNET_ROUTER=yCONFIG_LLC=yCONFIG_LLC2=mCONFIG_IPX=mCONFIG_IPX_INTERN=yCONFIG_ATALK=mCONFIG_DEV_APPLETALK=mCONFIG_LTPC=m
# CONFIG_COPS is not setCONFIG_IPDDP=mCONFIG_IPDDP_ENCAP=yCONFIG_IPDDP_DECAP=yCONFIG_X25=mCONFIG_LAPB=mCONFIG_ECONET=mCONFIG_ECONET_AUNUDP=yCONFIG_ECONET_NATIVE=yCONFIG_WAN_ROUTER=yCONFIG_PHONET=mCONFIG_IEEE802154=mCONFIG_NET_SCHED=y
#
# Queueing/Scheduling
#CONFIG_NET_SCH_CBQ=mCONFIG_NET_SCH_HTB=mCONFIG_NET_SCH_HFSC=mCONFIG_NET_SCH_ATM=mCONFIG_NET_SCH_PRIO=mCONFIG_NET_SCH_MULTIQ=mCONFIG_NET_SCH_RED=m
# CONFIG_NET_SCH_SFB is not setCONFIG_NET_SCH_SFQ=mCONFIG_NET_SCH_TEQL=mCONFIG_NET_SCH_TBF=mCONFIG_NET_SCH_GRED=mCONFIG_NET_SCH_DSMARK=mCONFIG_NET_SCH_NETEM=mCONFIG_NET_SCH_DRR=m
# CONFIG_NET_SCH_MQPRIO is not set
# CONFIG_NET_SCH_CHOKE is not setCONFIG_NET_SCH_INGRESS=m
#
# Classification
#CONFIG_NET_CLS=yCONFIG_NET_CLS_BASIC=mCONFIG_NET_CLS_TCINDEX=mCONFIG_NET_CLS_ROUTE4=mCONFIG_NET_CLS_FW=mCONFIG_NET_CLS_U32=mCONFIG_CLS_U32_PERF=yCONFIG_CLS_U32_MARK=yCONFIG_NET_CLS_RSVP=mCONFIG_NET_CLS_RSVP6=mCONFIG_NET_CLS_FLOW=m
# CONFIG_NET_CLS_CGROUP is not set
# CONFIG_NET_EMATCH is not setCONFIG_NET_CLS_ACT=yCONFIG_NET_ACT_POLICE=yCONFIG_NET_ACT_GACT=mCONFIG_GACT_PROB=yCONFIG_NET_ACT_MIRRED=mCONFIG_NET_ACT_IPT=mCONFIG_NET_ACT_NAT=mCONFIG_NET_ACT_PEDIT=mCONFIG_NET_ACT_SIMP=mCONFIG_NET_ACT_SKBEDIT=mCONFIG_NET_ACT_CSUM=mCONFIG_NET_CLS_IND=yCONFIG_NET_SCH_FIFO=yCONFIG_DCB=yCONFIG_DNS_RESOLVER=yCONFIG_BATMAN_ADV=m
# CONFIG_BATMAN_ADV_DEBUG is not setCONFIG_RPS=yCONFIG_RFS_ACCEL=yCONFIG_XPS=y
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NET_DROP_MONITOR is not setCONFIG_HAMRADIO=y
#
# Packet Radio protocols
#CONFIG_AX25=mCONFIG_AX25_DAMA_SLAVE=yCONFIG_NETROM=mCONFIG_ROSE=m
#
# AX.25 network device drivers
#CONFIG_MKISS=mCONFIG_6PACK=mCONFIG_BPQETHER=mCONFIG_SCC=mCONFIG_SCC_DELAY=yCONFIG_SCC_TRXECHO=yCONFIG_BAYCOM_SER_FDX=mCONFIG_BAYCOM_SER_HDX=mCONFIG_BAYCOM_PAR=mCONFIG_BAYCOM_EPP=mCONFIG_YAM=mCONFIG_CAN=mCONFIG_CAN_RAW=mCONFIG_CAN_BCM=m
#
# CAN Device Drivers
#CONFIG_CAN_VCAN=mCONFIG_CAN_SLCAN=mCONFIG_CAN_DEV=mCONFIG_CAN_CALC_BITTIMING=yCONFIG_CAN_MCP251X=mCONFIG_CAN_JANZ_ICAN3=mCONFIG_PCH_CAN=mCONFIG_CAN_SJA1000=mCONFIG_CAN_SJA1000_ISA=mCONFIG_CAN_SJA1000_PLATFORM=mCONFIG_CAN_EMS_PCI=mCONFIG_CAN_KVASER_PCI=mCONFIG_CAN_PLX_PCI=mCONFIG_CAN_TSCAN1=mCONFIG_CAN_C_CAN=mCONFIG_CAN_C_CAN_PLATFORM=m
#
# CAN USB interfaces
#CONFIG_CAN_EMS_USB=mCONFIG_CAN_ESD_USB2=mCONFIG_CAN_SOFTING=mCONFIG_CAN_SOFTING_CS=m
# CONFIG_CAN_DEBUG_DEVICES is not setCONFIG_IRDA=m
#
# IrDA protocols
#CONFIG_IRLAN=mCONFIG_IRNET=mCONFIG_IRCOMM=mCONFIG_IRDA_ULTRA=y
#
# IrDA options
#CONFIG_IRDA_CACHE_LAST_LSAP=yCONFIG_IRDA_FAST_RR=y
# CONFIG_IRDA_DEBUG is not set
#
# Infrared-port device drivers
#
#
# SIR device drivers
#CONFIG_IRTTY_SIR=m
#
# Dongle support
#CONFIG_DONGLE=yCONFIG_ESI_DONGLE=mCONFIG_ACTISYS_DONGLE=mCONFIG_TEKRAM_DONGLE=mCONFIG_TOIM3232_DONGLE=mCONFIG_LITELINK_DONGLE=mCONFIG_MA600_DONGLE=mCONFIG_GIRBIL_DONGLE=mCONFIG_MCP2120_DONGLE=mCONFIG_OLD_BELKIN_DONGLE=mCONFIG_ACT200L_DONGLE=mCONFIG_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=mCONFIG_VLSI_FIR=mCONFIG_VIA_FIR=mCONFIG_MCS_FIR=mCONFIG_BT=mCONFIG_BT_L2CAP=yCONFIG_BT_SCO=yCONFIG_BT_RFCOMM=mCONFIG_BT_RFCOMM_TTY=yCONFIG_BT_BNEP=mCONFIG_BT_BNEP_MC_FILTER=yCONFIG_BT_BNEP_PROTO_FILTER=yCONFIG_BT_CMTP=mCONFIG_BT_HIDP=m
#
# Bluetooth device drivers
#CONFIG_BT_HCIBTUSB=mCONFIG_BT_HCIBTSDIO=mCONFIG_BT_HCIUART=mCONFIG_BT_HCIUART_H4=yCONFIG_BT_HCIUART_BCSP=yCONFIG_BT_HCIUART_ATH3K=yCONFIG_BT_HCIUART_LL=yCONFIG_BT_HCIBCM203X=mCONFIG_BT_HCIBPA10X=mCONFIG_BT_HCIBFUSB=mCONFIG_BT_HCIDTL1=mCONFIG_BT_HCIBT3C=mCONFIG_BT_HCIBLUECARD=mCONFIG_BT_HCIBTUART=mCONFIG_BT_HCIVHCI=mCONFIG_BT_MRVL=mCONFIG_BT_MRVL_SDIO=mCONFIG_BT_ATH3K=mCONFIG_BT_WILINK=mCONFIG_AF_RXRPC=y
# CONFIG_AF_RXRPC_DEBUG is not setCONFIG_RXKAD=mCONFIG_FIB_RULES=yCONFIG_WIRELESS=yCONFIG_WIRELESS_EXT=yCONFIG_WEXT_CORE=yCONFIG_WEXT_PROC=yCONFIG_WEXT_SPY=yCONFIG_WEXT_PRIV=yCONFIG_CFG80211=m
# CONFIG_NL80211_TESTMODE is not set
# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
# CONFIG_CFG80211_REG_DEBUG is not setCONFIG_CFG80211_DEFAULT_PS=y
# CONFIG_CFG80211_DEBUGFS is not set
# CONFIG_CFG80211_INTERNAL_REGDB is not setCONFIG_CFG80211_WEXT=yCONFIG_WIRELESS_EXT_SYSFS=yCONFIG_LIB80211=yCONFIG_LIB80211_CRYPT_WEP=yCONFIG_LIB80211_CRYPT_CCMP=yCONFIG_LIB80211_CRYPT_TKIP=y
# CONFIG_LIB80211_DEBUG is not setCONFIG_MAC80211=mCONFIG_MAC80211_HAS_RC=yCONFIG_MAC80211_RC_PID=yCONFIG_MAC80211_RC_MINSTREL=yCONFIG_MAC80211_RC_MINSTREL_HT=y
# CONFIG_MAC80211_RC_DEFAULT_PID is not setCONFIG_MAC80211_RC_DEFAULT_MINSTREL=yCONFIG_MAC80211_RC_DEFAULT="minstrel_ht"CONFIG_MAC80211_MESH=yCONFIG_MAC80211_LEDS=y
# CONFIG_MAC80211_DEBUGFS is not set
# CONFIG_MAC80211_DEBUG_MENU is not setCONFIG_WIMAX=mCONFIG_WIMAX_DEBUG_LEVEL=8CONFIG_RFKILL=yCONFIG_RFKILL_LEDS=yCONFIG_RFKILL_INPUT=yCONFIG_NET_9P=mCONFIG_NET_9P_VIRTIO=mCONFIG_NET_9P_RDMA=m
# CONFIG_NET_9P_DEBUG is not setCONFIG_CAIF=m
# CONFIG_CAIF_DEBUG is not setCONFIG_CAIF_NETDEV=mCONFIG_CEPH_LIB=y
# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
#
# Device Drivers
#
#
# Generic Driver Options
#CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"CONFIG_DEVTMPFS=yCONFIG_DEVTMPFS_MOUNT=yCONFIG_STANDALONE=yCONFIG_PREVENT_FIRMWARE_BUILD=yCONFIG_FW_LOADER=y
# CONFIG_FIRMWARE_IN_KERNEL is not setCONFIG_EXTRA_FIRMWARE=""
# CONFIG_SYS_HYPERVISOR is not setCONFIG_ARCH_NO_SYSDEV_OPS=yCONFIG_CONNECTOR=yCONFIG_PROC_EVENTS=y
# CONFIG_MTD is not setCONFIG_OF=y
#
# Device Tree and Open Firmware support
#CONFIG_PROC_DEVICETREE=yCONFIG_OF_PROMTREE=yCONFIG_OF_ADDRESS=yCONFIG_OF_IRQ=yCONFIG_OF_DEVICE=yCONFIG_OF_GPIO=yCONFIG_OF_I2C=yCONFIG_OF_NET=yCONFIG_OF_SPI=yCONFIG_OF_MDIO=yCONFIG_OF_PCI=yCONFIG_PARPORT=yCONFIG_PARPORT_PC=yCONFIG_PARPORT_SERIAL=yCONFIG_PARPORT_PC_FIFO=yCONFIG_PARPORT_PC_SUPERIO=yCONFIG_PARPORT_PC_PCMCIA=y
# CONFIG_PARPORT_GSC is not setCONFIG_PARPORT_AX88796=yCONFIG_PARPORT_1284=yCONFIG_PARPORT_NOT_PC=yCONFIG_PNP=yCONFIG_PNP_DEBUG_MESSAGES=y
#
# Protocols
#CONFIG_ISAPNP=yCONFIG_PNPBIOS=yCONFIG_PNPBIOS_PROC_FS=yCONFIG_PNPACPI=yCONFIG_BLK_DEV=yCONFIG_BLK_DEV_FD=yCONFIG_BLK_DEV_XD=y
# CONFIG_PARIDE is not setCONFIG_BLK_CPQ_DA=yCONFIG_BLK_CPQ_CISS_DA=yCONFIG_CISS_SCSI_TAPE=yCONFIG_BLK_DEV_DAC960=yCONFIG_BLK_DEV_UMEM=y
# CONFIG_BLK_DEV_COW_COMMON is not setCONFIG_BLK_DEV_LOOP=yCONFIG_BLK_DEV_CRYPTOLOOP=yCONFIG_BLK_DEV_DRBD=y
# CONFIG_DRBD_FAULT_INJECTION is not setCONFIG_BLK_DEV_NBD=yCONFIG_BLK_DEV_OSD=yCONFIG_BLK_DEV_SX8=yCONFIG_BLK_DEV_UB=yCONFIG_BLK_DEV_RAM=yCONFIG_BLK_DEV_RAM_COUNT=16CONFIG_BLK_DEV_RAM_SIZE=16384CONFIG_BLK_DEV_XIP=yCONFIG_CDROM_PKTCDVD=yCONFIG_CDROM_PKTCDVD_BUFFERS=8CONFIG_CDROM_PKTCDVD_WCACHE=yCONFIG_ATA_OVER_ETH=yCONFIG_VIRTIO_BLK=yCONFIG_BLK_DEV_HD=yCONFIG_BLK_DEV_RBD=yCONFIG_SENSORS_LIS3LV02D=yCONFIG_MISC_DEVICES=yCONFIG_AD525X_DPOT=mCONFIG_AD525X_DPOT_I2C=mCONFIG_AD525X_DPOT_SPI=mCONFIG_IBM_ASM=yCONFIG_PHANTOM=yCONFIG_SGI_IOC4=yCONFIG_TIFM_CORE=yCONFIG_TIFM_7XX1=yCONFIG_ICS932S401=yCONFIG_ENCLOSURE_SERVICES=yCONFIG_CS5535_MFGPT=mCONFIG_CS5535_MFGPT_DEFAULT_IRQ=7CONFIG_CS5535_CLOCK_EVENT_SRC=mCONFIG_HP_ILO=yCONFIG_APDS9802ALS=mCONFIG_ISL29003=yCONFIG_ISL29020=yCONFIG_SENSORS_TSL2550=mCONFIG_SENSORS_BH1780=mCONFIG_SENSORS_BH1770=mCONFIG_SENSORS_APDS990X=mCONFIG_HMC6352=mCONFIG_DS1682=mCONFIG_TI_DAC7512=mCONFIG_VMWARE_BALLOON=mCONFIG_BMP085=mCONFIG_PCH_PHUB=mCONFIG_C2PORT=yCONFIG_C2PORT_DURAMAR_2150=y
#
# EEPROM support
#CONFIG_EEPROM_AT24=yCONFIG_EEPROM_AT25=yCONFIG_EEPROM_LEGACY=yCONFIG_EEPROM_MAX6875=yCONFIG_EEPROM_93CX6=yCONFIG_CB710_CORE=y
# CONFIG_CB710_DEBUG is not setCONFIG_CB710_DEBUG_ASSUMPTIONS=yCONFIG_IWMC3200TOP=m
# CONFIG_IWMC3200TOP_DEBUG is not set
# CONFIG_IWMC3200TOP_DEBUGFS is not set
#
# Texas Instruments shared transport line discipline #CONFIG_TI_ST=mCONFIG_SENSORS_LIS3_I2C=mCONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
#
# SCSI device support
#CONFIG_SCSI_MOD=yCONFIG_RAID_ATTRS=yCONFIG_SCSI=yCONFIG_SCSI_DMA=yCONFIG_SCSI_TGT=yCONFIG_SCSI_NETLINK=yCONFIG_SCSI_PROC_FS=y
#
# SCSI support type (disk, tape, CD-ROM)
#CONFIG_BLK_DEV_SD=yCONFIG_CHR_DEV_ST=yCONFIG_CHR_DEV_OSST=yCONFIG_BLK_DEV_SR=yCONFIG_BLK_DEV_SR_VENDOR=yCONFIG_CHR_DEV_SG=yCONFIG_CHR_DEV_SCH=yCONFIG_SCSI_ENCLOSURE=yCONFIG_SCSI_MULTI_LUN=yCONFIG_SCSI_CONSTANTS=yCONFIG_SCSI_LOGGING=yCONFIG_SCSI_SCAN_ASYNC=yCONFIG_SCSI_WAIT_SCAN=m
#
# SCSI Transports
#CONFIG_SCSI_SPI_ATTRS=yCONFIG_SCSI_FC_ATTRS=yCONFIG_SCSI_FC_TGT_ATTRS=yCONFIG_SCSI_ISCSI_ATTRS=yCONFIG_SCSI_SAS_ATTRS=yCONFIG_SCSI_SAS_LIBSAS=yCONFIG_SCSI_SAS_ATA=yCONFIG_SCSI_SAS_HOST_SMP=yCONFIG_SCSI_SRP_ATTRS=mCONFIG_SCSI_SRP_TGT_ATTRS=yCONFIG_SCSI_LOWLEVEL=yCONFIG_ISCSI_TCP=yCONFIG_ISCSI_BOOT_SYSFS=yCONFIG_SCSI_CXGB3_ISCSI=yCONFIG_SCSI_CXGB4_ISCSI=yCONFIG_SCSI_BNX2_ISCSI=yCONFIG_SCSI_BNX2X_FCOE=yCONFIG_BE2ISCSI=yCONFIG_BLK_DEV_3W_XXXX_RAID=yCONFIG_SCSI_HPSA=yCONFIG_SCSI_3W_9XXX=yCONFIG_SCSI_3W_SAS=yCONFIG_SCSI_7000FASST=yCONFIG_SCSI_ACARD=yCONFIG_SCSI_AHA152X=yCONFIG_SCSI_AHA1542=yCONFIG_SCSI_AHA1740=yCONFIG_SCSI_AACRAID=yCONFIG_SCSI_AIC7XXX=yCONFIG_AIC7XXX_CMDS_PER_DEVICE=4CONFIG_AIC7XXX_RESET_DELAY_MS=15000
# CONFIG_AIC7XXX_DEBUG_ENABLE is not setCONFIG_AIC7XXX_DEBUG_MASK=0
# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not setCONFIG_SCSI_AIC7XXX_OLD=yCONFIG_SCSI_AIC79XX=yCONFIG_AIC79XX_CMDS_PER_DEVICE=4CONFIG_AIC79XX_RESET_DELAY_MS=15000
# CONFIG_AIC79XX_DEBUG_ENABLE is not setCONFIG_AIC79XX_DEBUG_MASK=0
# CONFIG_AIC79XX_REG_PRETTY_PRINT is not setCONFIG_SCSI_AIC94XX=y
# CONFIG_AIC94XX_DEBUG is not setCONFIG_SCSI_MVSAS=yCONFIG_SCSI_MVSAS_DEBUG=yCONFIG_SCSI_DPT_I2O=yCONFIG_SCSI_ADVANSYS=yCONFIG_SCSI_IN2000=yCONFIG_SCSI_ARCMSR=yCONFIG_SCSI_ARCMSR_AER=yCONFIG_MEGARAID_NEWGEN=yCONFIG_MEGARAID_MM=yCONFIG_MEGARAID_MAILBOX=yCONFIG_MEGARAID_LEGACY=yCONFIG_MEGARAID_SAS=yCONFIG_SCSI_MPT2SAS=yCONFIG_SCSI_MPT2SAS_MAX_SGE=128CONFIG_SCSI_MPT2SAS_LOGGING=yCONFIG_SCSI_HPTIOP=yCONFIG_SCSI_BUSLOGIC=yCONFIG_SCSI_FLASHPOINT=yCONFIG_VMWARE_PVSCSI=yCONFIG_LIBFC=yCONFIG_LIBFCOE=yCONFIG_FCOE=yCONFIG_FCOE_FNIC=yCONFIG_SCSI_DMX3191D=yCONFIG_SCSI_DTC3280=yCONFIG_SCSI_EATA=yCONFIG_SCSI_EATA_TAGGED_QUEUE=yCONFIG_SCSI_EATA_LINKED_COMMANDS=yCONFIG_SCSI_EATA_MAX_TAGS=16CONFIG_SCSI_FUTURE_DOMAIN=yCONFIG_SCSI_FD_MCS=yCONFIG_SCSI_GDTH=yCONFIG_SCSI_GENERIC_NCR5380=yCONFIG_SCSI_GENERIC_NCR5380_MMIO=yCONFIG_SCSI_GENERIC_NCR53C400=yCONFIG_SCSI_IBMMCA=yCONFIG_IBMMCA_SCSI_ORDER_STANDARD=yCONFIG_IBMMCA_SCSI_DEV_RESET=yCONFIG_SCSI_IPS=yCONFIG_SCSI_INITIO=yCONFIG_SCSI_INIA100=yCONFIG_SCSI_PPA=yCONFIG_SCSI_IMM=yCONFIG_SCSI_IZIP_EPP16=y
# CONFIG_SCSI_IZIP_SLOW_CTR is not setCONFIG_SCSI_NCR53C406A=yCONFIG_SCSI_NCR_D700=yCONFIG_SCSI_STEX=yCONFIG_SCSI_SYM53C8XX_2=yCONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64CONFIG_SCSI_SYM53C8XX_MMIO=yCONFIG_SCSI_IPR=yCONFIG_SCSI_IPR_TRACE=yCONFIG_SCSI_IPR_DUMP=yCONFIG_SCSI_NCR_Q720=yCONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32CONFIG_SCSI_NCR53C8XX_SYNC=20CONFIG_SCSI_PAS16=yCONFIG_SCSI_QLOGIC_FAS=yCONFIG_SCSI_QLOGIC_1280=yCONFIG_SCSI_QLA_FC=yCONFIG_SCSI_QLA_ISCSI=yCONFIG_SCSI_LPFC=yCONFIG_SCSI_LPFC_DEBUG_FS=yCONFIG_SCSI_SIM710=yCONFIG_SCSI_SYM53C416=y
CONFIG_SCSI_DC395x=yCONFIG_SCSI_DC390T=yCONFIG_SCSI_T128=yCONFIG_SCSI_U14_34F=yCONFIG_SCSI_U14_34F_TAGGED_QUEUE=yCONFIG_SCSI_U14_34F_LINKED_COMMANDS=yCONFIG_SCSI_U14_34F_MAX_TAGS=8CONFIG_SCSI_ULTRASTOR=yCONFIG_SCSI_NSP32=y
# CONFIG_SCSI_DEBUG is not setCONFIG_SCSI_PMCRAID=yCONFIG_SCSI_PM8001=yCONFIG_SCSI_SRP=yCONFIG_SCSI_BFA_FC=yCONFIG_SCSI_LOWLEVEL_PCMCIA=yCONFIG_PCMCIA_AHA152X=mCONFIG_PCMCIA_FDOMAIN=mCONFIG_PCMCIA_NINJA_SCSI=mCONFIG_PCMCIA_QLOGIC=mCONFIG_PCMCIA_SYM53C500=mCONFIG_SCSI_DH=yCONFIG_SCSI_DH_RDAC=yCONFIG_SCSI_DH_HP_SW=yCONFIG_SCSI_DH_EMC=yCONFIG_SCSI_DH_ALUA=yCONFIG_SCSI_OSD_INITIATOR=yCONFIG_SCSI_OSD_ULD=yCONFIG_SCSI_OSD_DPRINT_SENSE=1
# CONFIG_SCSI_OSD_DEBUG is not setCONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not setCONFIG_ATA_VERBOSE_ERROR=yCONFIG_ATA_ACPI=yCONFIG_SATA_PMP=y
#
# Controllers with non-SFF native interface
#CONFIG_SATA_AHCI=yCONFIG_SATA_AHCI_PLATFORM=yCONFIG_SATA_INIC162X=yCONFIG_SATA_ACARD_AHCI=yCONFIG_SATA_SIL24=yCONFIG_ATA_SFF=y
#
# SFF controllers with custom DMA interface
#CONFIG_PDC_ADMA=yCONFIG_SATA_QSTOR=yCONFIG_SATA_SX4=yCONFIG_ATA_BMDMA=y
#
# SATA SFF controllers with BMDMA
#CONFIG_ATA_PIIX=yCONFIG_SATA_MV=yCONFIG_SATA_NV=yCONFIG_SATA_PROMISE=yCONFIG_SATA_SIL=yCONFIG_SATA_SIS=yCONFIG_SATA_SVW=yCONFIG_SATA_ULI=yCONFIG_SATA_VIA=yCONFIG_SATA_VITESSE=y
#
# PATA SFF controllers with BMDMA
#CONFIG_PATA_ALI=yCONFIG_PATA_AMD=yCONFIG_PATA_ARASAN_CF=yCONFIG_PATA_ARTOP=yCONFIG_PATA_ATIIXP=yCONFIG_PATA_ATP867X=yCONFIG_PATA_CMD64X=yCONFIG_PATA_CS5520=yCONFIG_PATA_CS5530=yCONFIG_PATA_CS5535=yCONFIG_PATA_CS5536=yCONFIG_PATA_CYPRESS=yCONFIG_PATA_EFAR=yCONFIG_PATA_HPT366=yCONFIG_PATA_HPT37X=yCONFIG_PATA_HPT3X2N=yCONFIG_PATA_HPT3X3=yCONFIG_PATA_HPT3X3_DMA=yCONFIG_PATA_IT8213=yCONFIG_PATA_IT821X=yCONFIG_PATA_JMICRON=yCONFIG_PATA_MARVELL=yCONFIG_PATA_NETCELL=yCONFIG_PATA_NINJA32=yCONFIG_PATA_NS87415=yCONFIG_PATA_OLDPIIX=yCONFIG_PATA_OPTIDMA=yCONFIG_PATA_PDC2027X=yCONFIG_PATA_PDC_OLD=yCONFIG_PATA_RADISYS=yCONFIG_PATA_RDC=yCONFIG_PATA_SC1200=yCONFIG_PATA_SCH=yCONFIG_PATA_SERVERWORKS=yCONFIG_PATA_SIL680=yCONFIG_PATA_SIS=yCONFIG_PATA_TOSHIBA=yCONFIG_PATA_TRIFLEX=yCONFIG_PATA_VIA=yCONFIG_PATA_WINBOND=y
#
# PIO-only SFF controllers
#CONFIG_PATA_CMD640_PCI=yCONFIG_PATA_ISAPNP=yCONFIG_PATA_MPIIX=yCONFIG_PATA_NS87410=yCONFIG_PATA_OPTI=yCONFIG_PATA_PCMCIA=yCONFIG_PATA_PLATFORM=yCONFIG_PATA_QDI=yCONFIG_PATA_RZ1000=yCONFIG_PATA_WINBOND_VLB=y
#
# Generic fallback / legacy drivers
#CONFIG_PATA_ACPI=yCONFIG_ATA_GENERIC=yCONFIG_PATA_LEGACY=yCONFIG_MD=yCONFIG_BLK_DEV_MD=yCONFIG_MD_AUTODETECT=yCONFIG_MD_LINEAR=yCONFIG_MD_RAID0=yCONFIG_MD_RAID1=yCONFIG_MD_RAID10=yCONFIG_MD_RAID456=yCONFIG_MULTICORE_RAID456=yCONFIG_MD_MULTIPATH=yCONFIG_MD_FAULTY=yCONFIG_BLK_DEV_DM=y
# CONFIG_DM_DEBUG is not setCONFIG_DM_CRYPT=yCONFIG_DM_SNAPSHOT=yCONFIG_DM_MIRROR=yCONFIG_DM_RAID=m
# CONFIG_DM_LOG_USERSPACE is not setCONFIG_DM_ZERO=yCONFIG_DM_MULTIPATH=y
# CONFIG_DM_MULTIPATH_QL is not set
# CONFIG_DM_MULTIPATH_ST is not set
# CONFIG_DM_DELAY is not setCONFIG_DM_UEVENT=yCONFIG_DM_FLAKEY=yCONFIG_TARGET_CORE=mCONFIG_TCM_IBLOCK=mCONFIG_TCM_FILEIO=mCONFIG_TCM_PSCSI=mCONFIG_LOOPBACK_TARGET=m
# CONFIG_LOOPBACK_TARGET_CDB_DEBUG is not setCONFIG_FUSION=yCONFIG_FUSION_SPI=yCONFIG_FUSION_FC=yCONFIG_FUSION_SAS=yCONFIG_FUSION_MAX_SGE=128CONFIG_FUSION_CTL=yCONFIG_FUSION_LAN=yCONFIG_FUSION_LOGGING=y
#
# IEEE 1394 (FireWire) support
#CONFIG_FIREWIRE=yCONFIG_FIREWIRE_OHCI=yCONFIG_FIREWIRE_OHCI_DEBUG=yCONFIG_FIREWIRE_SBP2=yCONFIG_FIREWIRE_NET=yCONFIG_FIREWIRE_NOSY=yCONFIG_I2O=yCONFIG_I2O_LCT_NOTIFY_ON_CHANGES=yCONFIG_I2O_EXT_ADAPTEC=yCONFIG_I2O_CONFIG=yCONFIG_I2O_CONFIG_OLD_IOCTL=yCONFIG_I2O_BUS=yCONFIG_I2O_BLOCK=yCONFIG_I2O_SCSI=yCONFIG_I2O_PROC=yCONFIG_MACINTOSH_DRIVERS=yCONFIG_MAC_EMUMOUSEBTN=yCONFIG_NETDEVICES=yCONFIG_IFB=mCONFIG_DUMMY=mCONFIG_BONDING=mCONFIG_MACVLAN=mCONFIG_MACVTAP=mCONFIG_EQUALIZER=mCONFIG_TUN=mCONFIG_VETH=mCONFIG_NET_SB1000=mCONFIG_ARCNET=mCONFIG_ARCNET_1201=mCONFIG_ARCNET_1051=mCONFIG_ARCNET_RAW=mCONFIG_ARCNET_CAP=m
CONFIG_ARCNET_COM90xx=m
CONFIG_ARCNET_COM90xxIO=mCONFIG_ARCNET_RIM_I=mCONFIG_ARCNET_COM20020=mCONFIG_ARCNET_COM20020_ISA=mCONFIG_ARCNET_COM20020_PCI=mCONFIG_MII=yCONFIG_PHYLIB=y
#
# MII PHY device drivers
#CONFIG_MARVELL_PHY=mCONFIG_DAVICOM_PHY=mCONFIG_QSEMI_PHY=mCONFIG_LXT_PHY=mCONFIG_CICADA_PHY=mCONFIG_VITESSE_PHY=mCONFIG_SMSC_PHY=mCONFIG_BROADCOM_PHY=mCONFIG_BCM63XX_PHY=mCONFIG_ICPLUS_PHY=mCONFIG_REALTEK_PHY=mCONFIG_NATIONAL_PHY=mCONFIG_STE10XP=mCONFIG_LSI_ET1011C_PHY=m CONFIG_MICREL_PHY=mCONFIG_FIXED_PHY=yCONFIG_MDIO_BITBANG=mCONFIG_MDIO_GPIO=mCONFIG_NET_ETHERNET=yCONFIG_HAPPYMEAL=mCONFIG_SUNGEM=mCONFIG_CASSINI=mCONFIG_NET_VENDOR_3COM=yCONFIG_EL1=mCONFIG_EL2=mCONFIG_ELPLUS=mCONFIG_EL16=mCONFIG_EL3=mCONFIG_3C515=mCONFIG_ELMC=mCONFIG_ELMC_II=mCONFIG_VORTEX=yCONFIG_TYPHOON=mCONFIG_LANCE=mCONFIG_NET_VENDOR_SMC=y
CONFIG_WD80x3=mCONFIG_ULTRAMCA=mCONFIG_ULTRA=mCONFIG_ULTRA32=mCONFIG_SMC9194=mCONFIG_ENC28J60=m
# CONFIG_ENC28J60_WRITEVERIFY is not set CONFIG_ETHOC=mCONFIG_NET_VENDOR_RACAL=yCONFIG_NI52=mCONFIG_NI65=mCONFIG_DNET=mCONFIG_NET_TULIP=yCONFIG_DE2104X=mCONFIG_DE2104X_DSL=0CONFIG_TULIP=mCONFIG_TULIP_MWI=yCONFIG_TULIP_MMIO=yCONFIG_TULIP_NAPI=y CONFIG_TULIP_NAPI_HW_MITIGATION=y CONFIG_DE4X5=mCONFIG_WINBOND_840=mCONFIG_DM9102=mCONFIG_ULI526X=mCONFIG_PCMCIA_XIRCOM=mCONFIG_AT1700=mCONFIG_DEPCA=mCONFIG_HP100=mCONFIG_NET_ISA=yCONFIG_E2100=mCONFIG_EWRK3=mCONFIG_EEXPRESS=mCONFIG_EEXPRESS_PRO=mCONFIG_HPLAN_PLUS=mCONFIG_HPLAN=mCONFIG_LP486E=mCONFIG_ETH16I=mCONFIG_NE2000=mCONFIG_ZNET=mCONFIG_SEEQ8005=mCONFIG_NE2_MCA=mCONFIG_IBMLANA=m
# CONFIG_IBM_NEW_EMAC_ZMII is not set
# CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set CONFIG_NET_PCI=yCONFIG_PCNET32=mCONFIG_AMD8111_ETH=m CONFIG_ADAPTEC_STARFIRE=mCONFIG_AC3200=mCONFIG_KSZ884X_PCI=mCONFIG_APRICOT=mCONFIG_B44=mCONFIG_B44_PCI_AUTOSELECT=y CONFIG_B44_PCICORE_AUTOSELECT=y CONFIG_B44_PCI=yCONFIG_FORCEDETH=y
CONFIG_CS89x0=mCONFIG_E100=yCONFIG_LNE390=mCONFIG_FEALNX=mCONFIG_NATSEMI=mCONFIG_NE2K_PCI=mCONFIG_NE3210=mCONFIG_ES3210=mCONFIG_8139CP=mCONFIG_8139TOO=yCONFIG_8139TOO_PIO=y CONFIG_8139TOO_TUNE_TWISTER=y CONFIG_8139TOO_8129=y
# CONFIG_8139_OLD_RX_RESET is not set CONFIG_R6040=mCONFIG_SIS900=mCONFIG_EPIC100=mCONFIG_SMSC9420=mCONFIG_SUNDANCE=m
# CONFIG_SUNDANCE_MMIO is not set CONFIG_TLAN=mCONFIG_KS8842=mCONFIG_KS8851=mCONFIG_KS8851_MLL=mCONFIG_VIA_RHINE=yCONFIG_VIA_RHINE_MMIO=yCONFIG_SC92031=mCONFIG_NET_POCKET=yCONFIG_ATP=yCONFIG_DE600=yCONFIG_DE620=yCONFIG_ATL2=yCONFIG_NETDEV_1000=yCONFIG_ACENIC=m
# CONFIG_ACENIC_OMIT_TIGON_I is not set CONFIG_DL2K=mCONFIG_E1000=mCONFIG_E1000E=yCONFIG_IP1000=mCONFIG_IGB=mCONFIG_IGB_DCA=yCONFIG_IGBVF=mCONFIG_NS83820=mCONFIG_HAMACHI=mCONFIG_YELLOWFIN=mCONFIG_R8169=yCONFIG_SIS190=mCONFIG_SKGE=y
# CONFIG_SKGE_DEBUG is not set CONFIG_SKY2=m
# CONFIG_SKY2_DEBUG is not set CONFIG_VIA_VELOCITY=mCONFIG_TIGON3=yCONFIG_BNX2=yCONFIG_CNIC=yCONFIG_QLA3XXX=mCONFIG_ATL1=mCONFIG_ATL1E=mCONFIG_ATL1C=mCONFIG_JME=mCONFIG_STMMAC_ETH=mCONFIG_STMMAC_DA=y CONFIG_STMMAC_DUAL_MAC=yCONFIG_PCH_GBE=mCONFIG_NETDEV_10000=yCONFIG_MDIO=yCONFIG_CHELSIO_T1=mCONFIG_CHELSIO_T1_1G=yCONFIG_CHELSIO_T3=yCONFIG_CHELSIO_T4=yCONFIG_CHELSIO_T4VF=mCONFIG_ENIC=mCONFIG_IXGBE=mCONFIG_IXGBE_DCA=yCONFIG_IXGBE_DCB=yCONFIG_IXGBEVF=mCONFIG_IXGB=mCONFIG_S2IO=mCONFIG_VXGE=m
# CONFIG_VXGE_DEBUG_TRACE_ALL is not set CONFIG_MYRI10GE=mCONFIG_MYRI10GE_DCA=yCONFIG_NETXEN_NIC=mCONFIG_NIU=mCONFIG_MLX4_EN=mCONFIG_MLX4_CORE=mCONFIG_MLX4_DEBUG=yCONFIG_TEHUTI=mCONFIG_BNX2X=mCONFIG_QLCNIC=mCONFIG_QLGE=mCONFIG_BNA=mCONFIG_SFC=mCONFIG_BE2NET=mCONFIG_TR=yCONFIG_IBMTR=mCONFIG_IBMOL=mCONFIG_IBMLS=mCONFIG_3C359=mCONFIG_TMS380TR=mCONFIG_TMSPCI=mCONFIG_SKISA=mCONFIG_PROTEON=mCONFIG_ABYSS=mCONFIG_MADGEMC=mCONFIG_SMCTR=mCONFIG_WLAN=yCONFIG_PCMCIA_RAYCS=m CONFIG_LIBERTAS_THINFIRM=m
# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set CONFIG_LIBERTAS_THINFIRM_USB=m CONFIG_AIRO=mCONFIG_ATMEL=mCONFIG_PCI_ATMEL=mCONFIG_PCMCIA_ATMEL=m CONFIG_AT76C50X_USB=mCONFIG_AIRO_CS=mCONFIG_PCMCIA_WL3501=mCONFIG_PRISM54=mCONFIG_USB_ZD1201=m CONFIG_USB_NET_RNDIS_WLAN=m CONFIG_RTL8180=mCONFIG_RTL8187=mCONFIG_RTL8187_LEDS=yCONFIG_ADM8211=mCONFIG_MAC80211_HWSIM=mCONFIG_MWL8K=mCONFIG_ATH_COMMON=m
# CONFIG_ATH_DEBUG is not set CONFIG_ATH5K=m
# CONFIG_ATH5K_DEBUG is not set
# CONFIG_ATH5K_TRACER is not set CONFIG_ATH5K_PCI=yCONFIG_ATH9K_HW=mCONFIG_ATH9K_COMMON=mCONFIG_ATH9K=m
# CONFIG_ATH9K_DEBUGFS is not set CONFIG_ATH9K_RATE_CONTROL=y CONFIG_ATH9K_HTC=m
# CONFIG_ATH9K_HTC_DEBUGFS is not set CONFIG_AR9170_USB=mCONFIG_AR9170_LEDS=y
# CONFIG_CARL9170 is not setCONFIG_B43=mCONFIG_B43_PCI_AUTOSELECT=y CONFIG_B43_PCICORE_AUTOSELECT=y CONFIG_B43_PCMCIA=yCONFIG_B43_SDIO=yCONFIG_B43_PIO=yCONFIG_B43_PHY_N=yCONFIG_B43_PHY_LP=yCONFIG_B43_LEDS=yCONFIG_B43_HWRNG=y
# CONFIG_B43_DEBUG is not set CONFIG_B43LEGACY=m CONFIG_B43LEGACY_PCI_AUTOSELECT=y CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y CONFIG_B43LEGACY_LEDS=y CONFIG_B43LEGACY_HWRNG=y
# CONFIG_B43LEGACY_DEBUG is not set CONFIG_B43LEGACY_DMA=y CONFIG_B43LEGACY_PIO=y CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
# CONFIG_B43LEGACY_DMA_MODE is not set
# CONFIG_B43LEGACY_PIO_MODE is not set CONFIG_HOSTAP=yCONFIG_HOSTAP_FIRMWARE=y CONFIG_HOSTAP_FIRMWARE_NVRAM=y CONFIG_HOSTAP_PLX=mCONFIG_HOSTAP_PCI=mCONFIG_HOSTAP_CS=mCONFIG_IPW2100=mCONFIG_IPW2100_MONITOR=y
# CONFIG_IPW2100_DEBUG is not set CONFIG_IPW2200=mCONFIG_IPW2200_MONITOR=y CONFIG_IPW2200_RADIOTAP=y CONFIG_IPW2200_PROMISCUOUS=y CONFIG_IPW2200_QOS=y
# CONFIG_IPW2200_DEBUG is not set CONFIG_LIBIPW=m
# CONFIG_LIBIPW_DEBUG is not set CONFIG_IWLAGN=m
#
# Debugging Options
#
# CONFIG_IWLWIFI_DEBUG is not setCONFIG_IWLWIFI_DEVICE_TRACING=yCONFIG_IWL_P2P=yCONFIG_IWLWIFI_LEGACY=m
#
# Debugging Options
#
# CONFIG_IWLWIFI_LEGACY_DEBUG is not set
# CONFIG_IWLWIFI_LEGACY_DEVICE_TRACING is not setCONFIG_IWL4965=mCONFIG_IWL3945=mCONFIG_IWM=m
# CONFIG_IWM_DEBUG is not setCONFIG_IWM_TRACING=yCONFIG_LIBERTAS=mCONFIG_LIBERTAS_USB=mCONFIG_LIBERTAS_CS=mCONFIG_LIBERTAS_SDIO=mCONFIG_LIBERTAS_SPI=m
# CONFIG_LIBERTAS_DEBUG is not setCONFIG_LIBERTAS_MESH=yCONFIG_HERMES=mCONFIG_HERMES_PRISM=yCONFIG_HERMES_CACHE_FW_ON_INIT=yCONFIG_PLX_HERMES=mCONFIG_TMD_HERMES=mCONFIG_NORTEL_HERMES=mCONFIG_PCI_HERMES=mCONFIG_PCMCIA_HERMES=mCONFIG_PCMCIA_SPECTRUM=mCONFIG_ORINOCO_USB=mCONFIG_P54_COMMON=mCONFIG_P54_USB=mCONFIG_P54_PCI=mCONFIG_P54_SPI=mCONFIG_P54_SPI_DEFAULT_EEPROM=yCONFIG_P54_LEDS=yCONFIG_RT2X00=mCONFIG_RT2400PCI=mCONFIG_RT2500PCI=mCONFIG_RT61PCI=mCONFIG_RT2800PCI=mCONFIG_RT2800PCI_RT33XX=yCONFIG_RT2800PCI_RT35XX=yCONFIG_RT2800PCI_RT53XX=yCONFIG_RT2500USB=mCONFIG_RT73USB=mCONFIG_RT2800USB=mCONFIG_RT2800USB_RT33XX=yCONFIG_RT2800USB_RT35XX=yCONFIG_RT2800USB_UNKNOWN=yCONFIG_RT2800_LIB=mCONFIG_RT2X00_LIB_PCI=mCONFIG_RT2X00_LIB_USB=mCONFIG_RT2X00_LIB=mCONFIG_RT2X00_LIB_HT=yCONFIG_RT2X00_LIB_FIRMWARE=yCONFIG_RT2X00_LIB_CRYPTO=yCONFIG_RT2X00_LIB_LEDS=y
# CONFIG_RT2X00_DEBUG is not setCONFIG_RTL8192CE=mCONFIG_RTL8192CU=mCONFIG_RTLWIFI=mCONFIG_RTL8192C_COMMON=mCONFIG_WL1251=mCONFIG_WL1251_SPI=mCONFIG_WL1251_SDIO=mCONFIG_WL12XX_MENU=mCONFIG_WL12XX=mCONFIG_WL12XX_HT=yCONFIG_WL12XX_SPI=mCONFIG_WL12XX_SDIO=mCONFIG_WL12XX_SDIO_TEST=mCONFIG_WL12XX_PLATFORM_DATA=yCONFIG_ZD1211RW=m
# CONFIG_ZD1211RW_DEBUG is not set
#
# WiMAX Wireless Broadband devices
#CONFIG_WIMAX_I2400M=mCONFIG_WIMAX_I2400M_USB=mCONFIG_WIMAX_I2400M_SDIO=mCONFIG_WIMAX_IWMC3200_SDIO=yCONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
#
# USB Network Adapters
#CONFIG_USB_CATC=mCONFIG_USB_KAWETH=mCONFIG_USB_PEGASUS=mCONFIG_USB_RTL8150=mCONFIG_USB_USBNET=mCONFIG_USB_NET_AX8817X=mCONFIG_USB_NET_CDCETHER=mCONFIG_USB_NET_CDC_EEM=mCONFIG_USB_NET_CDC_NCM=mCONFIG_USB_NET_DM9601=mCONFIG_USB_NET_SMSC75XX=mCONFIG_USB_NET_SMSC95XX=mCONFIG_USB_NET_GL620A=mCONFIG_USB_NET_NET1080=mCONFIG_USB_NET_PLUSB=mCONFIG_USB_NET_MCS7830=mCONFIG_USB_NET_RNDIS_HOST=mCONFIG_USB_NET_CDC_SUBSET=mCONFIG_USB_ALI_M5632=yCONFIG_USB_AN2720=yCONFIG_USB_BELKIN=yCONFIG_USB_ARMLINUX=yCONFIG_USB_EPSON2888=yCONFIG_USB_KC2190=yCONFIG_USB_NET_ZAURUS=mCONFIG_USB_NET_CX82310_ETH=mCONFIG_USB_HSO=mCONFIG_USB_NET_INT51X1=mCONFIG_USB_CDC_PHONET=mCONFIG_USB_IPHETH=mCONFIG_USB_SIERRA_NET=mCONFIG_USB_VL600=mCONFIG_NET_PCMCIA=yCONFIG_PCMCIA_3C589=mCONFIG_PCMCIA_3C574=mCONFIG_PCMCIA_FMVJ18X=mCONFIG_PCMCIA_PCNET=mCONFIG_PCMCIA_NMCLAN=mCONFIG_PCMCIA_SMC91C92=mCONFIG_PCMCIA_XIRC2PS=mCONFIG_PCMCIA_AXNET=mCONFIG_ARCNET_COM20020_CS=mCONFIG_PCMCIA_IBMTR=mCONFIG_WAN=yCONFIG_HOSTESS_SV11=mCONFIG_COSA=mCONFIG_LANMEDIA=mCONFIG_SEALEVEL_4021=mCONFIG_HDLC=mCONFIG_HDLC_RAW=mCONFIG_HDLC_RAW_ETH=mCONFIG_HDLC_CISCO=mCONFIG_HDLC_FR=mCONFIG_HDLC_PPP=mCONFIG_HDLC_X25=mCONFIG_PCI200SYN=mCONFIG_WANXL=mCONFIG_PC300TOO=mCONFIG_N2=mCONFIG_C101=mCONFIG_FARSYNC=mCONFIG_DSCC4=mCONFIG_DSCC4_PCISYNC=yCONFIG_DSCC4_PCI_RST=yCONFIG_DLCI=mCONFIG_DLCI_MAX=8CONFIG_SDLA=mCONFIG_WAN_ROUTER_DRIVERS=mCONFIG_CYCLADES_SYNC=mCONFIG_CYCLOMX_X25=yCONFIG_LAPBETHER=mCONFIG_X25_ASY=mCONFIG_SBNI=mCONFIG_SBNI_MULTILINE=yCONFIG_ATM_DRIVERS=y
# CONFIG_ATM_DUMMY is not setCONFIG_ATM_TCP=mCONFIG_ATM_LANAI=mCONFIG_ATM_ENI=m
# CONFIG_ATM_ENI_DEBUG is not set
# CONFIG_ATM_ENI_TUNE_BURST is not setCONFIG_ATM_FIRESTREAM=mCONFIG_ATM_ZATM=m
# CONFIG_ATM_ZATM_DEBUG is not setCONFIG_ATM_NICSTAR=m
# CONFIG_ATM_NICSTAR_USE_SUNI is not setCONFIG_ATM_NICSTAR_USE_IDT77105=yCONFIG_ATM_IDT77252=m
# CONFIG_ATM_IDT77252_DEBUG is not set
# CONFIG_ATM_IDT77252_RCV_ALL is not setCONFIG_ATM_IDT77252_USE_SUNI=yCONFIG_ATM_AMBASSADOR=m
# CONFIG_ATM_AMBASSADOR_DEBUG is not setCONFIG_ATM_HORIZON=m
# CONFIG_ATM_HORIZON_DEBUG is not setCONFIG_ATM_IA=m
# CONFIG_ATM_IA_DEBUG is not setCONFIG_ATM_FORE200E=mCONFIG_ATM_FORE200E_USE_TASKLET=yCONFIG_ATM_FORE200E_TX_RETRY=16CONFIG_ATM_FORE200E_DEBUG=0CONFIG_ATM_HE=m
# CONFIG_ATM_HE_USE_SUNI is not setCONFIG_ATM_SOLOS=mCONFIG_IEEE802154_DRIVERS=mCONFIG_IEEE802154_FAKEHARD=m
#
# CAIF transport drivers
#CONFIG_CAIF_TTY=mCONFIG_CAIF_SPI_SLAVE=mCONFIG_CAIF_SPI_SYNC=yCONFIG_RIONET=mCONFIG_RIONET_TX_SIZE=128CONFIG_RIONET_RX_SIZE=128CONFIG_FDDI=yCONFIG_DEFXX=m
# CONFIG_DEFXX_MMIO is not setCONFIG_SKFP=mCONFIG_HIPPI=yCONFIG_ROADRUNNER=m
# CONFIG_ROADRUNNER_LARGE_RINGS is not setCONFIG_PLIP=yCONFIG_PPP=yCONFIG_PPP_MULTILINK=yCONFIG_PPP_FILTER=yCONFIG_PPP_ASYNC=yCONFIG_PPP_SYNC_TTY=yCONFIG_PPP_DEFLATE=yCONFIG_PPP_BSDCOMP=yCONFIG_PPP_MPPE=yCONFIG_PPPOE=yCONFIG_PPTP=mCONFIG_PPPOATM=yCONFIG_PPPOL2TP=mCONFIG_SLIP=yCONFIG_SLIP_COMPRESSED=yCONFIG_SLHC=yCONFIG_SLIP_SMART=yCONFIG_SLIP_MODE_SLIP6=yCONFIG_NET_FC=yCONFIG_NETCONSOLE=yCONFIG_NETCONSOLE_DYNAMIC=yCONFIG_NETPOLL=yCONFIG_NETPOLL_TRAP=yCONFIG_NET_POLL_CONTROLLER=yCONFIG_VIRTIO_NET=mCONFIG_VMXNET3=mCONFIG_ISDN=yCONFIG_ISDN_I4L=mCONFIG_ISDN_PPP=yCONFIG_ISDN_PPP_VJ=yCONFIG_ISDN_MPP=yCONFIG_IPPP_FILTER=yCONFIG_ISDN_PPP_BSDCOMP=mCONFIG_ISDN_AUDIO=yCONFIG_ISDN_TTY_FAX=yCONFIG_ISDN_X25=y
#
# ISDN feature submodules
#CONFIG_ISDN_DIVERSION=m
#
# ISDN4Linux hardware drivers
#
#
# Passive cards
#CONFIG_ISDN_DRV_HISAX=m
#
# D-channel protocol features
#CONFIG_HISAX_EURO=yCONFIG_DE_AOC=yCONFIG_HISAX_NO_SENDCOMPLETE=yCONFIG_HISAX_NO_LLC=yCONFIG_HISAX_NO_KEYPAD=yCONFIG_HISAX_1TR6=yCONFIG_HISAX_NI1=yCONFIG_HISAX_MAX_CARDS=8
#
# HiSax supported cards
#CONFIG_HISAX_16_0=yCONFIG_HISAX_16_3=yCONFIG_HISAX_TELESPCI=yCONFIG_HISAX_S0BOX=yCONFIG_HISAX_AVM_A1=yCONFIG_HISAX_FRITZPCI=yCONFIG_HISAX_AVM_A1_PCMCIA=yCONFIG_HISAX_ELSA=yCONFIG_HISAX_IX1MICROR2=yCONFIG_HISAX_DIEHLDIVA=yCONFIG_HISAX_ASUSCOM=yCONFIG_HISAX_TELEINT=yCONFIG_HISAX_HFCS=yCONFIG_HISAX_SEDLBAUER=yCONFIG_HISAX_SPORTSTER=yCONFIG_HISAX_MIC=yCONFIG_HISAX_NETJET=yCONFIG_HISAX_NETJET_U=yCONFIG_HISAX_NICCY=yCONFIG_HISAX_ISURF=yCONFIG_HISAX_HSTSAPHIR=yCONFIG_HISAX_BKM_A4T=yCONFIG_HISAX_SCT_QUADRO=yCONFIG_HISAX_GAZEL=yCONFIG_HISAX_HFC_PCI=yCONFIG_HISAX_W6692=yCONFIG_HISAX_HFC_SX=yCONFIG_HISAX_ENTERNOW_PCI=y
# CONFIG_HISAX_DEBUG is not set
#
# HiSax PCMCIA card service modules
#CONFIG_HISAX_SEDLBAUER_CS=mCONFIG_HISAX_ELSA_CS=mCONFIG_HISAX_AVM_A1_CS=mCONFIG_HISAX_TELES_CS=m
#
# HiSax sub driver modules
#CONFIG_HISAX_ST5481=mCONFIG_HISAX_HFCUSB=mCONFIG_HISAX_HFC4S8S=mCONFIG_HISAX_FRITZ_PCIPNP=m
#
# Active cards
#
# CONFIG_ISDN_DRV_ICN is not setCONFIG_ISDN_DRV_PCBIT=mCONFIG_ISDN_DRV_SC=mCONFIG_ISDN_DRV_ACT2000=mCONFIG_ISDN_CAPI=mCONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=yCONFIG_CAPI_TRACE=yCONFIG_ISDN_CAPI_MIDDLEWARE=yCONFIG_ISDN_CAPI_CAPI20=mCONFIG_ISDN_CAPI_CAPIFS_BOOL=yCONFIG_ISDN_CAPI_CAPIFS=mCONFIG_ISDN_CAPI_CAPIDRV=m
#
# CAPI hardware drivers
#CONFIG_CAPI_AVM=yCONFIG_ISDN_DRV_AVMB1_B1ISA=mCONFIG_ISDN_DRV_AVMB1_B1PCI=mCONFIG_ISDN_DRV_AVMB1_B1PCIV4=yCONFIG_ISDN_DRV_AVMB1_T1ISA=mCONFIG_ISDN_DRV_AVMB1_B1PCMCIA=mCONFIG_ISDN_DRV_AVMB1_AVM_CS=mCONFIG_ISDN_DRV_AVMB1_T1PCI=mCONFIG_ISDN_DRV_AVMB1_C4=mCONFIG_CAPI_EICON=yCONFIG_ISDN_DIVAS=mCONFIG_ISDN_DIVAS_BRIPCI=yCONFIG_ISDN_DIVAS_PRIPCI=yCONFIG_ISDN_DIVAS_DIVACAPI=mCONFIG_ISDN_DIVAS_USERIDI=mCONFIG_ISDN_DIVAS_MAINT=mCONFIG_ISDN_DRV_GIGASET=mCONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_I4L is not set
# CONFIG_GIGASET_DUMMYLL is not setCONFIG_GIGASET_BASE=mCONFIG_GIGASET_M105=mCONFIG_GIGASET_M101=m
# CONFIG_GIGASET_DEBUG is not setCONFIG_HYSDN=mCONFIG_HYSDN_CAPI=yCONFIG_MISDN=mCONFIG_MISDN_DSP=mCONFIG_MISDN_L1OIP=m
#
# mISDN hardware drivers
#CONFIG_MISDN_HFCPCI=mCONFIG_MISDN_HFCMULTI=mCONFIG_MISDN_HFCUSB=mCONFIG_MISDN_AVMFRITZ=mCONFIG_MISDN_SPEEDFAX=mCONFIG_MISDN_INFINEON=mCONFIG_MISDN_W6692=mCONFIG_MISDN_NETJET=mCONFIG_MISDN_IPAC=mCONFIG_MISDN_ISAR=mCONFIG_ISDN_HDLC=mCONFIG_PHONE=mCONFIG_PHONE_IXJ=mCONFIG_PHONE_IXJ_PCMCIA=m
#
# Input device support
#CONFIG_INPUT=yCONFIG_INPUT_FF_MEMLESS=yCONFIG_INPUT_POLLDEV=yCONFIG_INPUT_SPARSEKMAP=y
#
# Userland interfaces
#CONFIG_INPUT_MOUSEDEV=yCONFIG_INPUT_MOUSEDEV_PSAUX=yCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768CONFIG_INPUT_JOYDEV=yCONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
#
# Input Device Drivers
#CONFIG_INPUT_KEYBOARD=yCONFIG_KEYBOARD_ADP5520=yCONFIG_KEYBOARD_ADP5588=yCONFIG_KEYBOARD_ATKBD=yCONFIG_KEYBOARD_QT1070=yCONFIG_KEYBOARD_QT2160=yCONFIG_KEYBOARD_LKKBD=yCONFIG_KEYBOARD_GPIO=yCONFIG_KEYBOARD_GPIO_POLLED=yCONFIG_KEYBOARD_TCA6416=yCONFIG_KEYBOARD_MATRIX=yCONFIG_KEYBOARD_LM8323=yCONFIG_KEYBOARD_MAX7359=yCONFIG_KEYBOARD_MCS=yCONFIG_KEYBOARD_NEWTON=yCONFIG_KEYBOARD_OPENCORES=yCONFIG_KEYBOARD_STOWAWAY=yCONFIG_KEYBOARD_SUNKBD=yCONFIG_KEYBOARD_STMPE=yCONFIG_KEYBOARD_TC3589X=yCONFIG_KEYBOARD_TWL4030=yCONFIG_KEYBOARD_XTKBD=yCONFIG_INPUT_MOUSE=yCONFIG_MOUSE_PS2=yCONFIG_MOUSE_PS2_ALPS=yCONFIG_MOUSE_PS2_LOGIPS2PP=yCONFIG_MOUSE_PS2_SYNAPTICS=yCONFIG_MOUSE_PS2_LIFEBOOK=yCONFIG_MOUSE_PS2_TRACKPOINT=yCONFIG_MOUSE_PS2_ELANTECH=yCONFIG_MOUSE_PS2_SENTELIC=yCONFIG_MOUSE_PS2_TOUCHKIT=yCONFIG_MOUSE_PS2_OLPC=yCONFIG_MOUSE_SERIAL=yCONFIG_MOUSE_APPLETOUCH=yCONFIG_MOUSE_BCM5974=yCONFIG_MOUSE_INPORT=yCONFIG_MOUSE_ATIXL=yCONFIG_MOUSE_LOGIBM=yCONFIG_MOUSE_PC110PAD=yCONFIG_MOUSE_VSXXXAA=yCONFIG_MOUSE_GPIO=yCONFIG_MOUSE_SYNAPTICS_I2C=yCONFIG_INPUT_JOYSTICK=yCONFIG_JOYSTICK_ANALOG=yCONFIG_JOYSTICK_A3D=mCONFIG_JOYSTICK_ADI=mCONFIG_JOYSTICK_COBRA=mCONFIG_JOYSTICK_GF2K=mCONFIG_JOYSTICK_GRIP=mCONFIG_JOYSTICK_GRIP_MP=mCONFIG_JOYSTICK_GUILLEMOT=mCONFIG_JOYSTICK_INTERACT=mCONFIG_JOYSTICK_SIDEWINDER=mCONFIG_JOYSTICK_TMDC=mCONFIG_JOYSTICK_IFORCE=mCONFIG_JOYSTICK_IFORCE_USB=yCONFIG_JOYSTICK_IFORCE_232=yCONFIG_JOYSTICK_WARRIOR=mCONFIG_JOYSTICK_MAGELLAN=mCONFIG_JOYSTICK_SPACEORB=mCONFIG_JOYSTICK_SPACEBALL=mCONFIG_JOYSTICK_STINGER=mCONFIG_JOYSTICK_TWIDJOY=mCONFIG_JOYSTICK_ZHENHUA=mCONFIG_JOYSTICK_DB9=mCONFIG_JOYSTICK_GAMECON=mCONFIG_JOYSTICK_TURBOGRAFX=mCONFIG_JOYSTICK_AS5011=mCONFIG_JOYSTICK_JOYDUMP=mCONFIG_JOYSTICK_XPAD=mCONFIG_JOYSTICK_XPAD_FF=yCONFIG_JOYSTICK_XPAD_LEDS=yCONFIG_JOYSTICK_WALKERA0701=mCONFIG_INPUT_TABLET=yCONFIG_TABLET_USB_ACECAD=yCONFIG_TABLET_USB_AIPTEK=yCONFIG_TABLET_USB_GTCO=yCONFIG_TABLET_USB_HANWANG=yCONFIG_TABLET_USB_KBTAB=yCONFIG_TABLET_USB_WACOM=yCONFIG_INPUT_TOUCHSCREEN=yCONFIG_TOUCHSCREEN_88PM860X=yCONFIG_TOUCHSCREEN_ADS7846=yCONFIG_TOUCHSCREEN_AD7877=yCONFIG_TOUCHSCREEN_AD7879=yCONFIG_TOUCHSCREEN_AD7879_I2C=yCONFIG_TOUCHSCREEN_AD7879_SPI=yCONFIG_TOUCHSCREEN_ATMEL_MXT=yCONFIG_TOUCHSCREEN_BU21013=yCONFIG_TOUCHSCREEN_CY8CTMG110=yCONFIG_TOUCHSCREEN_DA9034=yCONFIG_TOUCHSCREEN_DYNAPRO=yCONFIG_TOUCHSCREEN_HAMPSHIRE=yCONFIG_TOUCHSCREEN_EETI=yCONFIG_TOUCHSCREEN_FUJITSU=yCONFIG_TOUCHSCREEN_GUNZE=yCONFIG_TOUCHSCREEN_ELO=yCONFIG_TOUCHSCREEN_WACOM_W8001=yCONFIG_TOUCHSCREEN_MCS5000=yCONFIG_TOUCHSCREEN_MTOUCH=yCONFIG_TOUCHSCREEN_INEXIO=yCONFIG_TOUCHSCREEN_MK712=yCONFIG_TOUCHSCREEN_HTCPEN=yCONFIG_TOUCHSCREEN_PENMOUNT=yCONFIG_TOUCHSCREEN_TOUCHRIGHT=yCONFIG_TOUCHSCREEN_TOUCHWIN=yCONFIG_TOUCHSCREEN_UCB1400=mCONFIG_TOUCHSCREEN_WM831X=yCONFIG_TOUCHSCREEN_WM97XX=mCONFIG_TOUCHSCREEN_WM9705=yCONFIG_TOUCHSCREEN_WM9712=yCONFIG_TOUCHSCREEN_WM9713=yCONFIG_TOUCHSCREEN_USB_COMPOSITE=yCONFIG_TOUCHSCREEN_MC13783=mCONFIG_TOUCHSCREEN_USB_EGALAX=yCONFIG_TOUCHSCREEN_USB_PANJIT=yCONFIG_TOUCHSCREEN_USB_3M=yCONFIG_TOUCHSCREEN_USB_ITM=yCONFIG_TOUCHSCREEN_USB_ETURBO=yCONFIG_TOUCHSCREEN_USB_GUNZE=yCONFIG_TOUCHSCREEN_USB_DMC_TSC10=yCONFIG_TOUCHSCREEN_USB_IRTOUCH=yCONFIG_TOUCHSCREEN_USB_IDEALTEK=yCONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=yCONFIG_TOUCHSCREEN_USB_GOTOP=yCONFIG_TOUCHSCREEN_USB_JASTEC=yCONFIG_TOUCHSCREEN_USB_E2I=yCONFIG_TOUCHSCREEN_USB_ZYTRONIC=yCONFIG_TOUCHSCREEN_USB_ETT_TC45USB=yCONFIG_TOUCHSCREEN_USB_NEXIO=yCONFIG_TOUCHSCREEN_TOUCHIT213=yCONFIG_TOUCHSCREEN_TSC2005=yCONFIG_TOUCHSCREEN_TSC2007=yCONFIG_TOUCHSCREEN_PCAP=yCONFIG_TOUCHSCREEN_ST1232=yCONFIG_TOUCHSCREEN_STMPE=yCONFIG_TOUCHSCREEN_TPS6507X=yCONFIG_INPUT_MISC=yCONFIG_INPUT_88PM860X_ONKEY=yCONFIG_INPUT_AB8500_PONKEY=yCONFIG_INPUT_AD714X=yCONFIG_INPUT_AD714X_I2C=yCONFIG_INPUT_AD714X_SPI=yCONFIG_INPUT_PCSPKR=yCONFIG_INPUT_MAX8925_ONKEY=yCONFIG_INPUT_APANEL=yCONFIG_INPUT_WISTRON_BTNS=yCONFIG_INPUT_ATLAS_BTNS=yCONFIG_INPUT_ATI_REMOTE=yCONFIG_INPUT_ATI_REMOTE2=yCONFIG_INPUT_KEYSPAN_REMOTE=yCONFIG_INPUT_POWERMATE=yCONFIG_INPUT_YEALINK=yCONFIG_INPUT_CM109=yCONFIG_INPUT_TWL4030_PWRBUTTON=yCONFIG_INPUT_TWL4030_VIBRA=yCONFIG_INPUT_UINPUT=yCONFIG_INPUT_PCF50633_PMU=mCONFIG_INPUT_PCF8574=yCONFIG_INPUT_GPIO_ROTARY_ENCODER=yCONFIG_INPUT_WM831X_ON=yCONFIG_INPUT_PCAP=yCONFIG_INPUT_ADXL34X=yCONFIG_INPUT_ADXL34X_I2C=yCONFIG_INPUT_ADXL34X_SPI=yCONFIG_INPUT_CMA3000=yCONFIG_INPUT_CMA3000_I2C=y
#
# Hardware I/O ports
#CONFIG_SERIO=yCONFIG_SERIO_I8042=yCONFIG_SERIO_SERPORT=yCONFIG_SERIO_CT82C710=yCONFIG_SERIO_PARKBD=yCONFIG_SERIO_PCIPS2=yCONFIG_SERIO_LIBPS2=yCONFIG_SERIO_RAW=yCONFIG_SERIO_ALTERA_PS2=yCONFIG_SERIO_PS2MULT=yCONFIG_GAMEPORT=yCONFIG_GAMEPORT_NS558=yCONFIG_GAMEPORT_L4=yCONFIG_GAMEPORT_EMU10K1=yCONFIG_GAMEPORT_FM801=y
#
# Character devices
#CONFIG_VT=yCONFIG_CONSOLE_TRANSLATIONS=yCONFIG_VT_CONSOLE=yCONFIG_HW_CONSOLE=yCONFIG_VT_HW_CONSOLE_BINDING=yCONFIG_UNIX98_PTYS=yCONFIG_DEVPTS_MULTIPLE_INSTANCES=yCONFIG_LEGACY_PTYS=yCONFIG_LEGACY_PTY_COUNT=256CONFIG_SERIAL_NONSTANDARD=yCONFIG_ROCKETPORT=mCONFIG_CYCLADES=mCONFIG_CYZ_INTR=yCONFIG_MOXA_INTELLIO=mCONFIG_MOXA_SMARTIO=mCONFIG_SYNCLINK=mCONFIG_SYNCLINKMP=mCONFIG_SYNCLINK_GT=mCONFIG_NOZOMI=mCONFIG_ISI=mCONFIG_N_HDLC=mCONFIG_N_GSM=mCONFIG_DEVKMEM=yCONFIG_STALDRV=y
#
# Serial drivers
#CONFIG_SERIAL_8250=yCONFIG_SERIAL_8250_CONSOLE=yCONFIG_FIX_EARLYCON_MEM=yCONFIG_SERIAL_8250_PCI=yCONFIG_SERIAL_8250_PNP=yCONFIG_SERIAL_8250_CS=mCONFIG_SERIAL_8250_NR_UARTS=4CONFIG_SERIAL_8250_RUNTIME_UARTS=4CONFIG_SERIAL_8250_EXTENDED=yCONFIG_SERIAL_8250_MANY_PORTS=yCONFIG_SERIAL_8250_FOURPORT=mCONFIG_SERIAL_8250_ACCENT=mCONFIG_SERIAL_8250_BOCA=mCONFIG_SERIAL_8250_EXAR_ST16C554=mCONFIG_SERIAL_8250_HUB6=mCONFIG_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=mCONFIG_SERIAL_MAX3107=mCONFIG_SERIAL_MRST_MAX3110=mCONFIG_SERIAL_MFD_HSU=mCONFIG_SERIAL_UARTLITE=mCONFIG_SERIAL_CORE=yCONFIG_SERIAL_CORE_CONSOLE=yCONFIG_SERIAL_JSM=mCONFIG_SERIAL_OF_PLATFORM=mCONFIG_SERIAL_TIMBERDALE=mCONFIG_SERIAL_ALTERA_JTAGUART=mCONFIG_SERIAL_ALTERA_UART=mCONFIG_SERIAL_ALTERA_UART_MAXPORTS=4CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200CONFIG_SERIAL_IFX6X60=mCONFIG_SERIAL_PCH_UART=mCONFIG_TTY_PRINTK=yCONFIG_PRINTER=yCONFIG_LP_CONSOLE=yCONFIG_PPDEV=mCONFIG_HVC_DRIVER=yCONFIG_VIRTIO_CONSOLE=yCONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not setCONFIG_IPMI_DEVICE_INTERFACE=mCONFIG_IPMI_SI=mCONFIG_IPMI_WATCHDOG=mCONFIG_IPMI_POWEROFF=mCONFIG_HW_RANDOM=yCONFIG_HW_RANDOM_TIMERIOMEM=mCONFIG_HW_RANDOM_INTEL=mCONFIG_HW_RANDOM_AMD=mCONFIG_HW_RANDOM_GEODE=mCONFIG_HW_RANDOM_VIA=mCONFIG_HW_RANDOM_VIRTIO=mCONFIG_NVRAM=yCONFIG_DTLK=mCONFIG_R3964=mCONFIG_APPLICOM=mCONFIG_SONYPI=m
#
# PCMCIA character devices
#CONFIG_SYNCLINK_CS=mCONFIG_CARDMAN_4000=mCONFIG_CARDMAN_4040=mCONFIG_IPWIRELESS=mCONFIG_MWAVE=m
CONFIG_SCx200_GPIO=m
CONFIG_PC8736x_GPIO=mCONFIG_NSC_GPIO=mCONFIG_RAW_DRIVER=mCONFIG_MAX_RAW_DEVS=256CONFIG_HPET=yCONFIG_HPET_MMAP=yCONFIG_HANGCHECK_TIMER=mCONFIG_TCG_TPM=mCONFIG_TCG_TIS=mCONFIG_TCG_NSC=mCONFIG_TCG_ATMEL=mCONFIG_TCG_INFINEON=mCONFIG_TELCLOCK=mCONFIG_DEVPORT=yCONFIG_RAMOOPS=mCONFIG_I2C=yCONFIG_I2C_BOARDINFO=yCONFIG_I2C_COMPAT=yCONFIG_I2C_CHARDEV=yCONFIG_I2C_MUX=m
#
# Multiplexer I2C Chip support
#CONFIG_I2C_MUX_GPIO=mCONFIG_I2C_MUX_PCA9541=m
CONFIG_I2C_MUX_PCA954x=mCONFIG_I2C_HELPER_AUTO=yCONFIG_I2C_SMBUS=mCONFIG_I2C_ALGOBIT=yCONFIG_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_AMD756_S4882=mCONFIG_I2C_AMD8111=mCONFIG_I2C_I801=mCONFIG_I2C_ISCH=mCONFIG_I2C_PIIX4=mCONFIG_I2C_NFORCE2=mCONFIG_I2C_NFORCE2_S4985=mCONFIG_I2C_SIS5595=mCONFIG_I2C_SIS630=mCONFIG_I2C_SIS96X=mCONFIG_I2C_VIA=mCONFIG_I2C_VIAPRO=m
#
# ACPI drivers
#CONFIG_I2C_SCMI=m
#
# I2C system bus drivers (mostly embedded / system-on-chip) #CONFIG_I2C_GPIO=m
# CONFIG_I2C_INTEL_MID is not set CONFIG_I2C_OCORES=mCONFIG_I2C_PCA_PLATFORM=mCONFIG_I2C_PXA=mCONFIG_I2C_PXA_PCI=yCONFIG_I2C_SIMTEC=mCONFIG_I2C_XILINX=mCONFIG_I2C_EG20T=m
#
# External I2C/SMBus adapter drivers
#CONFIG_I2C_DIOLAN_U2C=mCONFIG_I2C_PARPORT=mCONFIG_I2C_PARPORT_LIGHT=mCONFIG_I2C_TAOS_EVM=mCONFIG_I2C_TINY_USB=m
#
# Other I2C/SMBus bus drivers
#
# CONFIG_I2C_PCA_ISA is not setCONFIG_I2C_STUB=m
CONFIG_SCx200_I2C=m
CONFIG_SCx200_I2C_SCL=12
CONFIG_SCx200_I2C_SDA=13
CONFIG_SCx200_ACB=m
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not setCONFIG_SPI=yCONFIG_SPI_MASTER=y
#
# SPI Master Controller Drivers
#CONFIG_SPI_ALTERA=mCONFIG_SPI_BITBANG=mCONFIG_SPI_BUTTERFLY=mCONFIG_SPI_GPIO=mCONFIG_SPI_LM70_LLP=mCONFIG_SPI_OC_TINY=mCONFIG_SPI_PXA2XX=mCONFIG_SPI_PXA2XX_PCI=yCONFIG_SPI_TOPCLIFF_PCH=mCONFIG_SPI_XILINX=mCONFIG_SPI_DESIGNWARE=yCONFIG_SPI_DW_PCI=m
# CONFIG_SPI_DW_MID_DMA is not set
#
# SPI Protocol Masters
#CONFIG_SPI_SPIDEV=mCONFIG_SPI_TLE62X0=m
#
# PPS support
#CONFIG_PPS=m
# CONFIG_PPS_DEBUG is not set
# CONFIG_NTP_PPS is not set
#
# PPS clients support
#CONFIG_PPS_CLIENT_KTIMER=mCONFIG_PPS_CLIENT_LDISC=mCONFIG_PPS_CLIENT_PARPORT=m
#
# PPS generators support
#CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=yCONFIG_GPIOLIB=yCONFIG_GPIO_SYSFS=yCONFIG_GPIO_MAX730X=m
#
# Memory mapped GPIO expanders:
#CONFIG_GPIO_BASIC_MMIO=mCONFIG_GPIO_IT8761E=mCONFIG_GPIO_SCH=mCONFIG_GPIO_VX855=m
#
# I2C GPIO expanders:
#CONFIG_GPIO_MAX7300=mCONFIG_GPIO_MAX732X=mCONFIG_GPIO_PCA953X=mCONFIG_GPIO_PCF857X=mCONFIG_GPIO_SX150X=yCONFIG_GPIO_STMPE=yCONFIG_GPIO_TC3589X=yCONFIG_GPIO_TWL4030=mCONFIG_GPIO_WM831X=mCONFIG_GPIO_WM8350=mCONFIG_GPIO_WM8994=mCONFIG_GPIO_ADP5520=mCONFIG_GPIO_ADP5588=m
#
# PCI GPIO expanders:
#CONFIG_GPIO_CS5535=mCONFIG_GPIO_LANGWELL=yCONFIG_GPIO_PCH=mCONFIG_GPIO_ML_IOH=mCONFIG_GPIO_TIMBERDALE=yCONFIG_GPIO_RDC321X=m
#
# SPI GPIO expanders:
#CONFIG_GPIO_MAX7301=mCONFIG_GPIO_MCP23S08=mCONFIG_GPIO_MC33880=mCONFIG_GPIO_74X164=m
#
# AC97 GPIO expanders:
#CONFIG_GPIO_UCB1400=y
#
# MODULbus GPIO expanders:
#CONFIG_GPIO_JANZ_TTL=mCONFIG_W1=mCONFIG_W1_CON=y
#
# 1-wire Bus Masters
#CONFIG_W1_MASTER_MATROX=mCONFIG_W1_MASTER_DS2490=mCONFIG_W1_MASTER_DS2482=mCONFIG_W1_MASTER_GPIO=m
#
# 1-wire Slaves
#CONFIG_W1_SLAVE_THERM=mCONFIG_W1_SLAVE_SMEM=mCONFIG_W1_SLAVE_DS2423=mCONFIG_W1_SLAVE_DS2431=mCONFIG_W1_SLAVE_DS2433=mCONFIG_W1_SLAVE_DS2433_CRC=yCONFIG_W1_SLAVE_DS2760=mCONFIG_W1_SLAVE_BQ27000=mCONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not setCONFIG_PDA_POWER=mCONFIG_MAX8925_POWER=mCONFIG_WM831X_BACKUP=mCONFIG_WM831X_POWER=mCONFIG_WM8350_POWER=m
# CONFIG_TEST_POWER is not setCONFIG_BATTERY_DS2760=mCONFIG_BATTERY_DS2782=mCONFIG_BATTERY_OLPC=mCONFIG_BATTERY_BQ20Z75=m
CONFIG_BATTERY_BQ27x00=mCONFIG_BATTERY_BQ27X00_I2C=yCONFIG_BATTERY_BQ27X00_PLATFORM=yCONFIG_BATTERY_DA9030=mCONFIG_BATTERY_MAX17040=mCONFIG_BATTERY_MAX17042=mCONFIG_CHARGER_PCF50633=mCONFIG_CHARGER_ISP1704=mCONFIG_CHARGER_TWL4030=mCONFIG_CHARGER_GPIO=mCONFIG_HWMON=yCONFIG_HWMON_VID=m
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Native drivers
#CONFIG_SENSORS_ABITUGURU=mCONFIG_SENSORS_ABITUGURU3=mCONFIG_SENSORS_AD7414=mCONFIG_SENSORS_AD7418=mCONFIG_SENSORS_ADCXX=mCONFIG_SENSORS_ADM1021=mCONFIG_SENSORS_ADM1025=mCONFIG_SENSORS_ADM1026=mCONFIG_SENSORS_ADM1029=mCONFIG_SENSORS_ADM1031=mCONFIG_SENSORS_ADM9240=mCONFIG_SENSORS_ADT7411=mCONFIG_SENSORS_ADT7462=mCONFIG_SENSORS_ADT7470=mCONFIG_SENSORS_ADT7475=mCONFIG_SENSORS_ASC7621=mCONFIG_SENSORS_K8TEMP=mCONFIG_SENSORS_K10TEMP=mCONFIG_SENSORS_ASB100=mCONFIG_SENSORS_ATXP1=mCONFIG_SENSORS_DS620=mCONFIG_SENSORS_DS1621=mCONFIG_SENSORS_I5K_AMB=mCONFIG_SENSORS_F71805F=mCONFIG_SENSORS_F71882FG=mCONFIG_SENSORS_F75375S=mCONFIG_SENSORS_FSCHMD=mCONFIG_SENSORS_G760A=mCONFIG_SENSORS_GL518SM=mCONFIG_SENSORS_GL520SM=mCONFIG_SENSORS_GPIO_FAN=mCONFIG_SENSORS_CORETEMP=mCONFIG_SENSORS_PKGTEMP=mCONFIG_SENSORS_IBMAEM=mCONFIG_SENSORS_IBMPEX=mCONFIG_SENSORS_IT87=mCONFIG_SENSORS_JC42=mCONFIG_SENSORS_LINEAGE=mCONFIG_SENSORS_LM63=mCONFIG_SENSORS_LM70=mCONFIG_SENSORS_LM73=mCONFIG_SENSORS_LM75=mCONFIG_SENSORS_LM77=mCONFIG_SENSORS_LM78=mCONFIG_SENSORS_LM80=mCONFIG_SENSORS_LM83=mCONFIG_SENSORS_LM85=mCONFIG_SENSORS_LM87=mCONFIG_SENSORS_LM90=mCONFIG_SENSORS_LM92=mCONFIG_SENSORS_LM93=mCONFIG_SENSORS_LTC4151=mCONFIG_SENSORS_LTC4215=mCONFIG_SENSORS_LTC4245=mCONFIG_SENSORS_LTC4261=mCONFIG_SENSORS_LM95241=mCONFIG_SENSORS_MAX1111=mCONFIG_SENSORS_MAX1619=mCONFIG_SENSORS_MAX6639=mCONFIG_SENSORS_MAX6650=mCONFIG_SENSORS_PC87360=mCONFIG_SENSORS_PC87427=mCONFIG_SENSORS_PCF8591=mCONFIG_PMBUS=mCONFIG_SENSORS_PMBUS=mCONFIG_SENSORS_MAX16064=mCONFIG_SENSORS_MAX34440=mCONFIG_SENSORS_MAX8688=mCONFIG_SENSORS_SHT15=mCONFIG_SENSORS_SHT21=mCONFIG_SENSORS_SIS5595=mCONFIG_SENSORS_SMM665=mCONFIG_SENSORS_DME1737=mCONFIG_SENSORS_EMC1403=mCONFIG_SENSORS_EMC2103=mCONFIG_SENSORS_SMSC47M1=mCONFIG_SENSORS_SMSC47M192=mCONFIG_SENSORS_SMSC47B397=mCONFIG_SENSORS_SCH5627=mCONFIG_SENSORS_ADS1015=mCONFIG_SENSORS_ADS7828=mCONFIG_SENSORS_ADS7871=mCONFIG_SENSORS_AMC6821=mCONFIG_SENSORS_THMC50=mCONFIG_SENSORS_TMP102=mCONFIG_SENSORS_TMP401=mCONFIG_SENSORS_TMP421=m
# CONFIG_SENSORS_TWL4030_MADC is not setCONFIG_SENSORS_VIA_CPUTEMP=mCONFIG_SENSORS_VIA686A=mCONFIG_SENSORS_VT1211=mCONFIG_SENSORS_VT8231=mCONFIG_SENSORS_W83781D=mCONFIG_SENSORS_W83791D=mCONFIG_SENSORS_W83792D=mCONFIG_SENSORS_W83793=mCONFIG_SENSORS_W83795=m
# CONFIG_SENSORS_W83795_FANCTRL is not setCONFIG_SENSORS_W83L785TS=mCONFIG_SENSORS_W83L786NG=mCONFIG_SENSORS_W83627HF=mCONFIG_SENSORS_W83627EHF=mCONFIG_SENSORS_WM831X=mCONFIG_SENSORS_WM8350=mCONFIG_SENSORS_APPLESMC=mCONFIG_SENSORS_MC13783_ADC=m
#
# ACPI drivers
#CONFIG_SENSORS_ATK0110=mCONFIG_THERMAL=yCONFIG_THERMAL_HWMON=yCONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set
#
# Watchdog Device Drivers
#CONFIG_SOFT_WATCHDOG=mCONFIG_WM831X_WATCHDOG=mCONFIG_WM8350_WATCHDOG=mCONFIG_TWL4030_WATCHDOG=mCONFIG_ACQUIRE_WDT=mCONFIG_ADVANTECH_WDT=mCONFIG_ALIM1535_WDT=mCONFIG_ALIM7101_WDT=mCONFIG_F71808E_WDT=mCONFIG_SP5100_TCO=mCONFIG_GEODE_WDT=mCONFIG_SC520_WDT=mCONFIG_SBC_FITPC2_WATCHDOG=m
# CONFIG_EUROTECH_WDT is not setCONFIG_IB700_WDT=mCONFIG_IBMASR=mCONFIG_WAFER_WDT=mCONFIG_I6300ESB_WDT=mCONFIG_ITCO_WDT=mCONFIG_ITCO_VENDOR_SUPPORT=yCONFIG_IT8712F_WDT=mCONFIG_IT87_WDT=mCONFIG_HP_WATCHDOG=mCONFIG_HPWDT_NMI_DECODING=yCONFIG_SC1200_WDT=m
CONFIG_SCx200_WDT=mCONFIG_PC87413_WDT=mCONFIG_NV_TCO=mCONFIG_RDC321X_WDT=mCONFIG_60XX_WDT=mCONFIG_SBC8360_WDT=mCONFIG_SBC7240_WDT=mCONFIG_CPU5_WDT=mCONFIG_SMSC_SCH311X_WDT=mCONFIG_SMSC37B787_WDT=mCONFIG_W83627HF_WDT=mCONFIG_W83697HF_WDT=mCONFIG_W83697UG_WDT=mCONFIG_W83877F_WDT=mCONFIG_W83977F_WDT=mCONFIG_MACHZ_WDT=mCONFIG_SBC_EPX_C3_WATCHDOG=m
#
# ISA-based Watchdog Cards
#CONFIG_PCWATCHDOG=mCONFIG_MIXCOMWD=m
# CONFIG_WDT is not set
#
# PCI-based Watchdog Cards
#CONFIG_PCIPCWATCHDOG=mCONFIG_WDTPCI=m
#
# USB-based Watchdog Cards
#CONFIG_USBPCWATCHDOG=mCONFIG_SSB_POSSIBLE=y
#
# Sonics Silicon Backplane
#CONFIG_SSB=mCONFIG_SSB_SPROM=yCONFIG_SSB_BLOCKIO=yCONFIG_SSB_PCIHOST_POSSIBLE=yCONFIG_SSB_PCIHOST=yCONFIG_SSB_B43_PCI_BRIDGE=yCONFIG_SSB_PCMCIAHOST_POSSIBLE=yCONFIG_SSB_PCMCIAHOST=yCONFIG_SSB_SDIOHOST_POSSIBLE=yCONFIG_SSB_SDIOHOST=y
# CONFIG_SSB_SILENT is not set
# CONFIG_SSB_DEBUG is not setCONFIG_SSB_DRIVER_PCICORE_POSSIBLE=yCONFIG_SSB_DRIVER_PCICORE=yCONFIG_MFD_SUPPORT=yCONFIG_MFD_CORE=yCONFIG_MFD_88PM860X=yCONFIG_MFD_SM501=mCONFIG_MFD_SM501_GPIO=yCONFIG_HTC_PASIC3=mCONFIG_HTC_I2CPLD=yCONFIG_UCB1400_CORE=mCONFIG_TPS6105X=mCONFIG_TPS65010=mCONFIG_TPS6507X=mCONFIG_TWL4030_CORE=yCONFIG_TWL4030_MADC=mCONFIG_TWL4030_CODEC=yCONFIG_TWL6030_PWM=mCONFIG_MFD_STMPE=yCONFIG_MFD_TC3589X=y
# CONFIG_MFD_TMIO is not setCONFIG_PMIC_DA903X=yCONFIG_PMIC_ADP5520=yCONFIG_MFD_MAX8925=yCONFIG_MFD_MAX8997=yCONFIG_MFD_MAX8998=yCONFIG_MFD_WM8400=mCONFIG_MFD_WM831X=yCONFIG_MFD_WM831X_I2C=yCONFIG_MFD_WM831X_SPI=yCONFIG_MFD_WM8350=yCONFIG_MFD_WM8350_I2C=yCONFIG_MFD_WM8994=yCONFIG_MFD_PCF50633=mCONFIG_MFD_MC13783=mCONFIG_MFD_MC13XXX=mCONFIG_PCF50633_ADC=mCONFIG_PCF50633_GPIO=mCONFIG_ABX500_CORE=yCONFIG_AB3100_CORE=yCONFIG_AB3100_OTP=mCONFIG_EZX_PCAP=yCONFIG_AB8500_CORE=yCONFIG_AB8500_DEBUG=yCONFIG_AB8500_GPADC=yCONFIG_AB3550_CORE=yCONFIG_MFD_CS5535=mCONFIG_MFD_TIMBERDALE=yCONFIG_LPC_SCH=mCONFIG_MFD_RDC321X=mCONFIG_MFD_JANZ_CMODIO=mCONFIG_MFD_TPS6586X=yCONFIG_MFD_VX855=mCONFIG_MFD_WL1273_CORE=mCONFIG_REGULATOR=y
# CONFIG_REGULATOR_DEBUG is not setCONFIG_REGULATOR_DUMMY=yCONFIG_REGULATOR_FIXED_VOLTAGE=mCONFIG_REGULATOR_VIRTUAL_CONSUMER=mCONFIG_REGULATOR_USERSPACE_CONSUMER=mCONFIG_REGULATOR_BQ24022=mCONFIG_REGULATOR_MAX1586=mCONFIG_REGULATOR_MAX8649=mCONFIG_REGULATOR_MAX8660=mCONFIG_REGULATOR_MAX8925=mCONFIG_REGULATOR_MAX8952=mCONFIG_REGULATOR_MAX8997=mCONFIG_REGULATOR_MAX8998=mCONFIG_REGULATOR_TWL4030=yCONFIG_REGULATOR_WM831X=mCONFIG_REGULATOR_WM8350=mCONFIG_REGULATOR_WM8400=mCONFIG_REGULATOR_WM8994=mCONFIG_REGULATOR_DA903X=mCONFIG_REGULATOR_PCF50633=mCONFIG_REGULATOR_LP3971=mCONFIG_REGULATOR_LP3972=mCONFIG_REGULATOR_PCAP=mCONFIG_REGULATOR_MC13XXX_CORE=mCONFIG_REGULATOR_MC13783=mCONFIG_REGULATOR_MC13892=mCONFIG_REGULATOR_AB3100=mCONFIG_REGULATOR_TPS6105X=mCONFIG_REGULATOR_TPS65023=mCONFIG_REGULATOR_TPS6507X=mCONFIG_REGULATOR_88PM8607=yCONFIG_REGULATOR_ISL6271A=mCONFIG_REGULATOR_AD5398=mCONFIG_REGULATOR_AB8500=yCONFIG_REGULATOR_TPS6586X=mCONFIG_REGULATOR_TPS6524X=mCONFIG_MEDIA_SUPPORT=y
#
# Multimedia core support
#CONFIG_MEDIA_CONTROLLER=yCONFIG_VIDEO_DEV=yCONFIG_VIDEO_V4L2_COMMON=yCONFIG_VIDEO_V4L2_SUBDEV_API=yCONFIG_DVB_CORE=yCONFIG_VIDEO_MEDIA=y
#
# Multimedia drivers
#CONFIG_VIDEO_SAA7146=mCONFIG_VIDEO_SAA7146_VV=mCONFIG_RC_CORE=yCONFIG_LIRC=yCONFIG_RC_MAP=yCONFIG_IR_NEC_DECODER=yCONFIG_IR_RC5_DECODER=yCONFIG_IR_RC6_DECODER=yCONFIG_IR_JVC_DECODER=yCONFIG_IR_SONY_DECODER=yCONFIG_IR_RC5_SZ_DECODER=yCONFIG_IR_LIRC_CODEC=yCONFIG_IR_ENE=mCONFIG_IR_IMON=mCONFIG_IR_MCEUSB=mCONFIG_IR_ITE_CIR=mCONFIG_IR_NUVOTON=mCONFIG_IR_STREAMZAP=mCONFIG_IR_WINBOND_CIR=m
# CONFIG_RC_LOOPBACK is not setCONFIG_MEDIA_ATTACH=yCONFIG_MEDIA_TUNER=yCONFIG_MEDIA_TUNER_CUSTOMISE=y
#
# Customize TV tuners
#CONFIG_MEDIA_TUNER_SIMPLE=mCONFIG_MEDIA_TUNER_TDA8290=mCONFIG_MEDIA_TUNER_TDA827X=mCONFIG_MEDIA_TUNER_TDA18271=mCONFIG_MEDIA_TUNER_TDA9887=mCONFIG_MEDIA_TUNER_TEA5761=mCONFIG_MEDIA_TUNER_TEA5767=mCONFIG_MEDIA_TUNER_MT20XX=mCONFIG_MEDIA_TUNER_MT2060=mCONFIG_MEDIA_TUNER_MT2266=mCONFIG_MEDIA_TUNER_MT2131=mCONFIG_MEDIA_TUNER_QT1010=mCONFIG_MEDIA_TUNER_XC2028=mCONFIG_MEDIA_TUNER_XC5000=mCONFIG_MEDIA_TUNER_MXL5005S=mCONFIG_MEDIA_TUNER_MXL5007T=mCONFIG_MEDIA_TUNER_MC44S803=mCONFIG_MEDIA_TUNER_MAX2165=mCONFIG_MEDIA_TUNER_TDA18218=mCONFIG_VIDEO_V4L2=yCONFIG_VIDEOBUF_GEN=mCONFIG_VIDEOBUF_DMA_SG=mCONFIG_VIDEOBUF_VMALLOC=mCONFIG_VIDEOBUF_DMA_CONTIG=mCONFIG_VIDEOBUF_DVB=mCONFIG_VIDEO_BTCX=mCONFIG_VIDEO_TVEEPROM=mCONFIG_VIDEO_TUNER=mCONFIG_VIDEOBUF2_CORE=mCONFIG_VIDEO_CAPTURE_DRIVERS=y
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not setCONFIG_VIDEO_HELPER_CHIPS_AUTO=yCONFIG_VIDEO_IR_I2C=y
#
# Audio decoders
#CONFIG_VIDEO_TVAUDIO=mCONFIG_VIDEO_TDA7432=mCONFIG_VIDEO_TDA9840=mCONFIG_VIDEO_TEA6415C=mCONFIG_VIDEO_TEA6420=mCONFIG_VIDEO_MSP3400=mCONFIG_VIDEO_CS5345=mCONFIG_VIDEO_CS53L32A=mCONFIG_VIDEO_M52790=mCONFIG_VIDEO_WM8775=mCONFIG_VIDEO_WM8739=mCONFIG_VIDEO_VP27SMPX=m
#
# RDS decoders
#CONFIG_VIDEO_SAA6588=m
#
# Video decoders
#CONFIG_VIDEO_ADV7180=mCONFIG_VIDEO_BT819=mCONFIG_VIDEO_BT856=mCONFIG_VIDEO_BT866=mCONFIG_VIDEO_KS0127=mCONFIG_VIDEO_OV7670=mCONFIG_VIDEO_MT9V011=mCONFIG_VIDEO_SAA7110=mCONFIG_VIDEO_SAA711X=mCONFIG_VIDEO_SAA717X=mCONFIG_VIDEO_TVP5150=mCONFIG_VIDEO_VPX3220=m
#
# Video and audio decoders
#CONFIG_VIDEO_CX25840=m
#
# MPEG video encoders
#CONFIG_VIDEO_CX2341X=m
#
# Video encoders
#CONFIG_VIDEO_SAA7127=mCONFIG_VIDEO_SAA7185=mCONFIG_VIDEO_ADV7170=mCONFIG_VIDEO_ADV7175=m
#
# Video improvement chips
#CONFIG_VIDEO_UPD64031A=mCONFIG_VIDEO_UPD64083=mCONFIG_VIDEO_BT848=mCONFIG_VIDEO_BT848_DVB=yCONFIG_VIDEO_PMS=mCONFIG_VIDEO_BWQCAM=mCONFIG_VIDEO_CQCAM=mCONFIG_VIDEO_W9966=mCONFIG_VIDEO_CPIA2=mCONFIG_VIDEO_ZORAN=mCONFIG_VIDEO_ZORAN_DC30=mCONFIG_VIDEO_ZORAN_ZR36060=mCONFIG_VIDEO_ZORAN_BUZ=mCONFIG_VIDEO_ZORAN_DC10=mCONFIG_VIDEO_ZORAN_LML33=mCONFIG_VIDEO_ZORAN_LML33R10=mCONFIG_VIDEO_ZORAN_AVS6EYES=mCONFIG_VIDEO_MEYE=mCONFIG_VIDEO_SAA7134=mCONFIG_VIDEO_SAA7134_ALSA=mCONFIG_VIDEO_SAA7134_RC=yCONFIG_VIDEO_SAA7134_DVB=mCONFIG_VIDEO_MXB=mCONFIG_VIDEO_HEXIUM_ORION=mCONFIG_VIDEO_HEXIUM_GEMINI=mCONFIG_VIDEO_TIMBERDALE=mCONFIG_VIDEO_CX88=mCONFIG_VIDEO_CX88_ALSA=mCONFIG_VIDEO_CX88_BLACKBIRD=mCONFIG_VIDEO_CX88_DVB=mCONFIG_VIDEO_CX88_MPEG=mCONFIG_VIDEO_CX88_VP3054=mCONFIG_VIDEO_CX23885=mCONFIG_MEDIA_ALTERA_CI=mCONFIG_VIDEO_AU0828=mCONFIG_VIDEO_IVTV=mCONFIG_VIDEO_FB_IVTV=mCONFIG_VIDEO_CX18=mCONFIG_VIDEO_CX18_ALSA=mCONFIG_VIDEO_SAA7164=mCONFIG_VIDEO_CAFE_CCIC=mCONFIG_VIDEO_SR030PC30=mCONFIG_VIDEO_VIA_CAMERA=mCONFIG_VIDEO_NOON010PC30=mCONFIG_SOC_CAMERA=mCONFIG_SOC_CAMERA_IMX074=mCONFIG_SOC_CAMERA_MT9M001=mCONFIG_SOC_CAMERA_MT9M111=mCONFIG_SOC_CAMERA_MT9T031=mCONFIG_SOC_CAMERA_MT9T112=mCONFIG_SOC_CAMERA_MT9V022=mCONFIG_SOC_CAMERA_RJ54N1=mCONFIG_SOC_CAMERA_TW9910=mCONFIG_SOC_CAMERA_PLATFORM=mCONFIG_SOC_CAMERA_OV2640=mCONFIG_SOC_CAMERA_OV6650=mCONFIG_SOC_CAMERA_OV772X=mCONFIG_SOC_CAMERA_OV9640=mCONFIG_SOC_CAMERA_OV9740=mCONFIG_V4L_USB_DRIVERS=yCONFIG_USB_VIDEO_CLASS=mCONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=yCONFIG_USB_GSPCA=mCONFIG_USB_M5602=mCONFIG_USB_STV06XX=mCONFIG_USB_GL860=mCONFIG_USB_GSPCA_BENQ=mCONFIG_USB_GSPCA_CONEX=mCONFIG_USB_GSPCA_CPIA1=mCONFIG_USB_GSPCA_ETOMS=mCONFIG_USB_GSPCA_FINEPIX=mCONFIG_USB_GSPCA_JEILINJ=mCONFIG_USB_GSPCA_KONICA=mCONFIG_USB_GSPCA_MARS=mCONFIG_USB_GSPCA_MR97310A=mCONFIG_USB_GSPCA_NW80X=mCONFIG_USB_GSPCA_OV519=mCONFIG_USB_GSPCA_OV534=mCONFIG_USB_GSPCA_OV534_9=mCONFIG_USB_GSPCA_PAC207=mCONFIG_USB_GSPCA_PAC7302=mCONFIG_USB_GSPCA_PAC7311=mCONFIG_USB_GSPCA_SN9C2028=mCONFIG_USB_GSPCA_SN9C20X=mCONFIG_USB_GSPCA_SONIXB=mCONFIG_USB_GSPCA_SONIXJ=mCONFIG_USB_GSPCA_SPCA500=mCONFIG_USB_GSPCA_SPCA501=mCONFIG_USB_GSPCA_SPCA505=mCONFIG_USB_GSPCA_SPCA506=mCONFIG_USB_GSPCA_SPCA508=mCONFIG_USB_GSPCA_SPCA561=mCONFIG_USB_GSPCA_SPCA1528=mCONFIG_USB_GSPCA_SQ905=mCONFIG_USB_GSPCA_SQ905C=mCONFIG_USB_GSPCA_SQ930X=mCONFIG_USB_GSPCA_STK014=mCONFIG_USB_GSPCA_STV0680=mCONFIG_USB_GSPCA_SUNPLUS=mCONFIG_USB_GSPCA_T613=mCONFIG_USB_GSPCA_TV8532=mCONFIG_USB_GSPCA_VC032X=mCONFIG_USB_GSPCA_VICAM=mCONFIG_USB_GSPCA_XIRLINK_CIT=mCONFIG_USB_GSPCA_ZC3XX=mCONFIG_VIDEO_PVRUSB2=mCONFIG_VIDEO_PVRUSB2_SYSFS=yCONFIG_VIDEO_PVRUSB2_DVB=y
# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not setCONFIG_VIDEO_HDPVR=mCONFIG_VIDEO_EM28XX=mCONFIG_VIDEO_EM28XX_ALSA=mCONFIG_VIDEO_EM28XX_DVB=mCONFIG_VIDEO_TLG2300=mCONFIG_VIDEO_CX231XX=mCONFIG_VIDEO_CX231XX_RC=yCONFIG_VIDEO_CX231XX_ALSA=mCONFIG_VIDEO_CX231XX_DVB=mCONFIG_VIDEO_USBVISION=mCONFIG_USB_ET61X251=mCONFIG_USB_SN9C102=mCONFIG_USB_PWC=m
# CONFIG_USB_PWC_DEBUG is not setCONFIG_USB_PWC_INPUT_EVDEV=yCONFIG_USB_ZR364XX=mCONFIG_USB_STKWEBCAM=mCONFIG_USB_S2255=mCONFIG_V4L_MEM2MEM_DRIVERS=y
# CONFIG_VIDEO_MEM2MEM_TESTDEV is not setCONFIG_RADIO_ADAPTERS=yCONFIG_RADIO_CADET=mCONFIG_RADIO_RTRACK=mCONFIG_RADIO_RTRACK2=mCONFIG_RADIO_AZTECH=mCONFIG_RADIO_GEMTEK=mCONFIG_RADIO_MAXIRADIO=mCONFIG_RADIO_MAESTRO=mCONFIG_RADIO_MIROPCM20=mCONFIG_RADIO_SF16FMI=mCONFIG_RADIO_SF16FMR2=mCONFIG_RADIO_TERRATEC=mCONFIG_RADIO_TRUST=mCONFIG_RADIO_TYPHOON=mCONFIG_RADIO_ZOLTRIX=mCONFIG_I2C_SI4713=mCONFIG_RADIO_SI4713=mCONFIG_USB_DSBR=mCONFIG_RADIO_SI470X=yCONFIG_USB_SI470X=mCONFIG_I2C_SI470X=mCONFIG_USB_MR800=mCONFIG_RADIO_TEA5764=mCONFIG_RADIO_SAA7706H=mCONFIG_RADIO_TEF6862=mCONFIG_RADIO_TIMBERDALE=mCONFIG_RADIO_WL1273=m
#
# Texas Instruments WL128x FM driver (ST based)
#CONFIG_RADIO_WL128X=mCONFIG_DVB_MAX_ADAPTERS=8CONFIG_DVB_DYNAMIC_MINORS=yCONFIG_DVB_CAPTURE_DRIVERS=y
#
# Supported SAA7146 based PCI Adapters
#CONFIG_TTPCI_EEPROM=mCONFIG_DVB_AV7110=mCONFIG_DVB_AV7110_OSD=yCONFIG_DVB_BUDGET_CORE=mCONFIG_DVB_BUDGET=mCONFIG_DVB_BUDGET_CI=mCONFIG_DVB_BUDGET_AV=mCONFIG_DVB_BUDGET_PATCH=m
#
# Supported USB Adapters
#CONFIG_DVB_USB=m
# CONFIG_DVB_USB_DEBUG is not setCONFIG_DVB_USB_A800=mCONFIG_DVB_USB_DIBUSB_MB=mCONFIG_DVB_USB_DIBUSB_MB_FAULTY=yCONFIG_DVB_USB_DIBUSB_MC=mCONFIG_DVB_USB_DIB0700=mCONFIG_DVB_USB_UMT_010=mCONFIG_DVB_USB_CXUSB=mCONFIG_DVB_USB_M920X=mCONFIG_DVB_USB_GL861=mCONFIG_DVB_USB_AU6610=mCONFIG_DVB_USB_DIGITV=mCONFIG_DVB_USB_VP7045=mCONFIG_DVB_USB_VP702X=mCONFIG_DVB_USB_GP8PSK=mCONFIG_DVB_USB_NOVA_T_USB2=mCONFIG_DVB_USB_TTUSB2=mCONFIG_DVB_USB_DTT200U=mCONFIG_DVB_USB_OPERA1=mCONFIG_DVB_USB_AF9005=mCONFIG_DVB_USB_AF9005_REMOTE=mCONFIG_DVB_USB_DW2102=mCONFIG_DVB_USB_CINERGY_T2=mCONFIG_DVB_USB_ANYSEE=mCONFIG_DVB_USB_DTV5100=mCONFIG_DVB_USB_AF9015=mCONFIG_DVB_USB_CE6230=mCONFIG_DVB_USB_FRIIO=mCONFIG_DVB_USB_EC168=mCONFIG_DVB_USB_AZ6027=mCONFIG_DVB_USB_LME2510=mCONFIG_DVB_USB_TECHNISAT_USB2=mCONFIG_DVB_TTUSB_BUDGET=mCONFIG_DVB_TTUSB_DEC=mCONFIG_SMS_SIANO_MDTV=m
#
# Siano module components
#CONFIG_SMS_USB_DRV=mCONFIG_SMS_SDIO_DRV=m
#
# Supported FlexCopII (B2C2) Adapters
#CONFIG_DVB_B2C2_FLEXCOP=mCONFIG_DVB_B2C2_FLEXCOP_PCI=mCONFIG_DVB_B2C2_FLEXCOP_USB=m
# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
#
# Supported BT878 Adapters
#CONFIG_DVB_BT8XX=m
#
# Supported Pluto2 Adapters
#CONFIG_DVB_PLUTO2=m
#
# Supported SDMC DM1105 Adapters
#CONFIG_DVB_DM1105=m
#
# Supported FireWire (IEEE 1394) Adapters
#CONFIG_DVB_FIREDTV=mCONFIG_DVB_FIREDTV_INPUT=y
#
# Supported Earthsoft PT1 Adapters
#CONFIG_DVB_PT1=m
#
# Supported Mantis Adapters
#CONFIG_MANTIS_CORE=mCONFIG_DVB_MANTIS=mCONFIG_DVB_HOPPER=m
#
# Supported nGene Adapters
#CONFIG_DVB_NGENE=m
#
# Supported DVB Frontends
#CONFIG_DVB_FE_CUSTOMISE=y
#
# Customise DVB Frontends
#
#
# Multistandard (satellite) frontends
#CONFIG_DVB_STB0899=mCONFIG_DVB_STB6100=m
CONFIG_DVB_STV090x=m
CONFIG_DVB_STV6110x=m
#
# DVB-S (satellite) frontends
#CONFIG_DVB_CX24110=mCONFIG_DVB_CX24123=mCONFIG_DVB_MT312=mCONFIG_DVB_ZL10036=mCONFIG_DVB_ZL10039=mCONFIG_DVB_S5H1420=mCONFIG_DVB_STV0288=mCONFIG_DVB_STB6000=mCONFIG_DVB_STV0299=mCONFIG_DVB_STV6110=mCONFIG_DVB_STV0900=mCONFIG_DVB_TDA8083=mCONFIG_DVB_TDA10086=mCONFIG_DVB_TDA8261=mCONFIG_DVB_VES1X93=mCONFIG_DVB_TUNER_ITD1000=mCONFIG_DVB_TUNER_CX24113=mCONFIG_DVB_TDA826X=mCONFIG_DVB_TUA6100=mCONFIG_DVB_CX24116=mCONFIG_DVB_SI21XX=mCONFIG_DVB_DS3000=mCONFIG_DVB_MB86A16=m
#
# DVB-T (terrestrial) frontends
#CONFIG_DVB_SP8870=mCONFIG_DVB_SP887X=mCONFIG_DVB_CX22700=mCONFIG_DVB_CX22702=mCONFIG_DVB_S5H1432=mCONFIG_DVB_DRX397XD=mCONFIG_DVB_L64781=mCONFIG_DVB_TDA1004X=mCONFIG_DVB_NXT6000=mCONFIG_DVB_MT352=mCONFIG_DVB_ZL10353=mCONFIG_DVB_DIB3000MB=mCONFIG_DVB_DIB3000MC=mCONFIG_DVB_DIB7000M=mCONFIG_DVB_DIB7000P=mCONFIG_DVB_DIB9000=mCONFIG_DVB_TDA10048=mCONFIG_DVB_AF9013=mCONFIG_DVB_EC100=mCONFIG_DVB_STV0367=m
#
# DVB-C (cable) frontends
#CONFIG_DVB_VES1820=mCONFIG_DVB_TDA10021=mCONFIG_DVB_TDA10023=mCONFIG_DVB_STV0297=m
#
# ATSC (North American/Korean Terrestrial/Cable DTV) frontends #CONFIG_DVB_NXT200X=mCONFIG_DVB_OR51211=mCONFIG_DVB_OR51132=mCONFIG_DVB_BCM3510=mCONFIG_DVB_LGDT330X=mCONFIG_DVB_LGDT3305=mCONFIG_DVB_S5H1409=mCONFIG_DVB_AU8522=mCONFIG_DVB_S5H1411=m
#
# ISDB-T (terrestrial) frontends
#CONFIG_DVB_S921=mCONFIG_DVB_DIB8000=mCONFIG_DVB_MB86A20S=m
#
# Digital terrestrial only tuners/PLL
#CONFIG_DVB_PLL=mCONFIG_DVB_TUNER_DIB0070=mCONFIG_DVB_TUNER_DIB0090=m
#
# SEC control devices for DVB-S
#CONFIG_DVB_LNBP21=mCONFIG_DVB_ISL6405=mCONFIG_DVB_ISL6421=mCONFIG_DVB_ISL6423=mCONFIG_DVB_LGS8GL5=mCONFIG_DVB_LGS8GXX=mCONFIG_DVB_ATBM8830=m
CONFIG_DVB_TDA665x=mCONFIG_DVB_IX2505V=m
#
# Tools to develop new frontends
#
# CONFIG_DVB_DUMMY_FE is not set
#
# Graphics support
#CONFIG_AGP=yCONFIG_AGP_ALI=yCONFIG_AGP_ATI=yCONFIG_AGP_AMD=yCONFIG_AGP_AMD64=yCONFIG_AGP_INTEL=yCONFIG_AGP_NVIDIA=yCONFIG_AGP_SIS=yCONFIG_AGP_SWORKS=yCONFIG_AGP_VIA=yCONFIG_AGP_EFFICEON=yCONFIG_VGA_ARB=yCONFIG_VGA_ARB_MAX_GPUS=16CONFIG_VGA_SWITCHEROO=yCONFIG_DRM=yCONFIG_DRM_KMS_HELPER=yCONFIG_DRM_TTM=yCONFIG_DRM_TDFX=yCONFIG_DRM_R128=yCONFIG_DRM_RADEON=y
# CONFIG_DRM_RADEON_KMS is not setCONFIG_DRM_I810=yCONFIG_DRM_I915=mCONFIG_DRM_I915_KMS=yCONFIG_DRM_MGA=yCONFIG_DRM_SIS=mCONFIG_DRM_VIA=yCONFIG_DRM_SAVAGE=yCONFIG_STUB_POULSBO=mCONFIG_VGASTATE=yCONFIG_VIDEO_OUTPUT_CONTROL=yCONFIG_FB=yCONFIG_FIRMWARE_EDID=yCONFIG_FB_DDC=yCONFIG_FB_BOOT_VESA_SUPPORT=yCONFIG_FB_CFB_FILLRECT=yCONFIG_FB_CFB_COPYAREA=yCONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not setCONFIG_FB_SYS_FILLRECT=yCONFIG_FB_SYS_COPYAREA=yCONFIG_FB_SYS_IMAGEBLIT=yCONFIG_FB_FOREIGN_ENDIAN=yCONFIG_FB_BOTH_ENDIAN=y
# CONFIG_FB_BIG_ENDIAN is not set
# CONFIG_FB_LITTLE_ENDIAN is not setCONFIG_FB_SYS_FOPS=y
# CONFIG_FB_WMT_GE_ROPS is not setCONFIG_FB_DEFERRED_IO=yCONFIG_FB_HECUBA=yCONFIG_FB_SVGALIB=y
# CONFIG_FB_MACMODES is not setCONFIG_FB_BACKLIGHT=yCONFIG_FB_MODE_HELPERS=yCONFIG_FB_TILEBLITTING=y
#
# Frame buffer hardware drivers
#
# CONFIG_FB_CIRRUS is not setCONFIG_FB_PM2=yCONFIG_FB_PM2_FIFO_DISCONNECT=yCONFIG_FB_CYBER2000=yCONFIG_FB_CYBER2000_DDC=yCONFIG_FB_ARC=y
# CONFIG_FB_ASILIANT is not setCONFIG_FB_IMSTT=y
# CONFIG_FB_VGA16 is not setCONFIG_FB_UVESA=y
# CONFIG_FB_VESA is not setCONFIG_FB_EFI=yCONFIG_FB_N411=yCONFIG_FB_HGA=yCONFIG_FB_S1D13XXX=yCONFIG_FB_NVIDIA=yCONFIG_FB_NVIDIA_I2C=y
# CONFIG_FB_NVIDIA_DEBUG is not setCONFIG_FB_NVIDIA_BACKLIGHT=yCONFIG_FB_RIVA=yCONFIG_FB_RIVA_I2C=y
# CONFIG_FB_RIVA_DEBUG is not setCONFIG_FB_RIVA_BACKLIGHT=yCONFIG_FB_I810=yCONFIG_FB_I810_GTF=yCONFIG_FB_I810_I2C=yCONFIG_FB_LE80578=yCONFIG_FB_CARILLO_RANCH=yCONFIG_FB_INTEL=m
# CONFIG_FB_INTEL_DEBUG is not setCONFIG_FB_INTEL_I2C=yCONFIG_FB_MATROX=yCONFIG_FB_MATROX_MILLENIUM=yCONFIG_FB_MATROX_MYSTIQUE=yCONFIG_FB_MATROX_G=yCONFIG_FB_MATROX_I2C=yCONFIG_FB_MATROX_MAVEN=y
# CONFIG_FB_RADEON is not setCONFIG_FB_ATY128=yCONFIG_FB_ATY128_BACKLIGHT=yCONFIG_FB_ATY=yCONFIG_FB_ATY_CT=yCONFIG_FB_ATY_GENERIC_LCD=yCONFIG_FB_ATY_GX=yCONFIG_FB_ATY_BACKLIGHT=yCONFIG_FB_S3=yCONFIG_FB_SAVAGE=yCONFIG_FB_SAVAGE_I2C=yCONFIG_FB_SAVAGE_ACCEL=yCONFIG_FB_SIS=yCONFIG_FB_SIS_300=yCONFIG_FB_SIS_315=yCONFIG_FB_VIA=y
# CONFIG_FB_VIA_DIRECT_PROCFS is not setCONFIG_FB_NEOMAGIC=yCONFIG_FB_KYRO=yCONFIG_FB_3DFX=yCONFIG_FB_3DFX_ACCEL=yCONFIG_FB_3DFX_I2C=yCONFIG_FB_VOODOO1=yCONFIG_FB_VT8623=yCONFIG_FB_TRIDENT=yCONFIG_FB_ARK=yCONFIG_FB_PM3=yCONFIG_FB_CARMINE=y
# CONFIG_FB_CARMINE_DRAM_EVAL is not setCONFIG_CARMINE_DRAM_CUSTOM=yCONFIG_FB_GEODE=yCONFIG_FB_GEODE_LX=yCONFIG_FB_GEODE_GX=yCONFIG_FB_GEODE_GX1=yCONFIG_FB_TMIO=mCONFIG_FB_TMIO_ACCELL=yCONFIG_FB_SM501=mCONFIG_FB_UDL=m
# CONFIG_FB_VIRTUAL is not setCONFIG_FB_METRONOME=yCONFIG_FB_MB862XX=yCONFIG_FB_MB862XX_PCI_GDC=yCONFIG_FB_BROADSHEET=yCONFIG_BACKLIGHT_LCD_SUPPORT=yCONFIG_LCD_CLASS_DEVICE=mCONFIG_LCD_L4F00242T03=mCONFIG_LCD_LMS283GF05=mCONFIG_LCD_LTV350QV=mCONFIG_LCD_ILI9320=mCONFIG_LCD_TDO24M=mCONFIG_LCD_VGG2432A4=mCONFIG_LCD_PLATFORM=mCONFIG_LCD_S6E63M0=mCONFIG_LCD_LD9040=mCONFIG_BACKLIGHT_CLASS_DEVICE=yCONFIG_BACKLIGHT_GENERIC=yCONFIG_BACKLIGHT_PROGEAR=mCONFIG_BACKLIGHT_CARILLO_RANCH=mCONFIG_BACKLIGHT_DA903X=mCONFIG_BACKLIGHT_MAX8925=mCONFIG_BACKLIGHT_APPLE=mCONFIG_BACKLIGHT_SAHARA=mCONFIG_BACKLIGHT_WM831X=mCONFIG_BACKLIGHT_ADP5520=mCONFIG_BACKLIGHT_ADP8860=mCONFIG_BACKLIGHT_88PM860X=mCONFIG_BACKLIGHT_PCF50633=m
#
# Display device support
#CONFIG_DISPLAY_SUPPORT=y
#
# Display hardware drivers
#
#
# Console display driver support
#CONFIG_VGA_CONSOLE=yCONFIG_VGACON_SOFT_SCROLLBACK=yCONFIG_VGACON_SOFT_SCROLLBACK_SIZE=256
# CONFIG_MDA_CONSOLE is not setCONFIG_DUMMY_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE is not set
CONFIG_FONT_8x16=yCONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not setCONFIG_LOGO_LINUX_VGA16=yCONFIG_LOGO_LINUX_CLUT224=yCONFIG_SOUND=mCONFIG_SOUND_OSS_CORE=yCONFIG_SOUND_OSS_CORE_PRECLAIM=yCONFIG_SND=mCONFIG_SND_TIMER=mCONFIG_SND_PCM=mCONFIG_SND_HWDEP=mCONFIG_SND_RAWMIDI=mCONFIG_SND_JACK=yCONFIG_SND_SEQUENCER=mCONFIG_SND_SEQ_DUMMY=mCONFIG_SND_OSSEMUL=yCONFIG_SND_MIXER_OSS=mCONFIG_SND_PCM_OSS=mCONFIG_SND_PCM_OSS_PLUGINS=yCONFIG_SND_SEQUENCER_OSS=yCONFIG_SND_HRTIMER=mCONFIG_SND_SEQ_HRTIMER_DEFAULT=yCONFIG_SND_DYNAMIC_MINORS=yCONFIG_SND_SUPPORT_OLD_API=yCONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not setCONFIG_SND_VMASTER=yCONFIG_SND_DMA_SGBUF=yCONFIG_SND_RAWMIDI_SEQ=mCONFIG_SND_OPL3_LIB_SEQ=mCONFIG_SND_OPL4_LIB_SEQ=mCONFIG_SND_SBAWE_SEQ=mCONFIG_SND_EMU10K1_SEQ=mCONFIG_SND_MPU401_UART=mCONFIG_SND_OPL3_LIB=mCONFIG_SND_OPL4_LIB=mCONFIG_SND_VX_LIB=mCONFIG_SND_AC97_CODEC=mCONFIG_SND_DRIVERS=yCONFIG_SND_PCSP=mCONFIG_SND_DUMMY=mCONFIG_SND_ALOOP=mCONFIG_SND_VIRMIDI=mCONFIG_SND_MTPAV=mCONFIG_SND_MTS64=mCONFIG_SND_SERIAL_U16550=mCONFIG_SND_MPU401=mCONFIG_SND_PORTMAN2X4=mCONFIG_SND_AC97_POWER_SAVE=yCONFIG_SND_AC97_POWER_SAVE_DEFAULT=0CONFIG_SND_WSS_LIB=mCONFIG_SND_SB_COMMON=mCONFIG_SND_SB8_DSP=mCONFIG_SND_SB16_DSP=mCONFIG_SND_ISA=yCONFIG_SND_ADLIB=mCONFIG_SND_AD1816A=mCONFIG_SND_AD1848=mCONFIG_SND_ALS100=mCONFIG_SND_AZT1605=mCONFIG_SND_AZT2316=mCONFIG_SND_AZT2320=mCONFIG_SND_CMI8330=mCONFIG_SND_CS4231=mCONFIG_SND_CS4236=mCONFIG_SND_ES1688=mCONFIG_SND_ES18XX=mCONFIG_SND_SC6000=mCONFIG_SND_GUSCLASSIC=mCONFIG_SND_GUSEXTREME=mCONFIG_SND_GUSMAX=mCONFIG_SND_INTERWAVE=mCONFIG_SND_INTERWAVE_STB=mCONFIG_SND_JAZZ16=mCONFIG_SND_OPL3SA2=mCONFIG_SND_OPTI92X_AD1848=mCONFIG_SND_OPTI92X_CS4231=mCONFIG_SND_OPTI93X=mCONFIG_SND_MIRO=mCONFIG_SND_SB8=mCONFIG_SND_SB16=mCONFIG_SND_SBAWE=mCONFIG_SND_SB16_CSP=yCONFIG_SND_SSCAPE=mCONFIG_SND_WAVEFRONT=mCONFIG_SND_MSND_PINNACLE=mCONFIG_SND_MSND_CLASSIC=mCONFIG_SND_PCI=yCONFIG_SND_AD1889=mCONFIG_SND_ALS300=mCONFIG_SND_ALS4000=mCONFIG_SND_ALI5451=mCONFIG_SND_ASIHPI=mCONFIG_SND_ATIIXP=mCONFIG_SND_ATIIXP_MODEM=mCONFIG_SND_AU8810=mCONFIG_SND_AU8820=mCONFIG_SND_AU8830=mCONFIG_SND_AW2=mCONFIG_SND_AZT3328=mCONFIG_SND_BT87X=m
# CONFIG_SND_BT87X_OVERCLOCK is not setCONFIG_SND_CA0106=mCONFIG_SND_CMIPCI=mCONFIG_SND_OXYGEN_LIB=mCONFIG_SND_OXYGEN=mCONFIG_SND_CS4281=mCONFIG_SND_CS46XX=mCONFIG_SND_CS46XX_NEW_DSP=yCONFIG_SND_CS5530=mCONFIG_SND_CS5535AUDIO=mCONFIG_SND_CTXFI=mCONFIG_SND_DARLA20=mCONFIG_SND_GINA20=mCONFIG_SND_LAYLA20=mCONFIG_SND_DARLA24=mCONFIG_SND_GINA24=mCONFIG_SND_LAYLA24=mCONFIG_SND_MONA=mCONFIG_SND_MIA=mCONFIG_SND_ECHO3G=mCONFIG_SND_INDIGO=mCONFIG_SND_INDIGOIO=mCONFIG_SND_INDIGODJ=mCONFIG_SND_INDIGOIOX=mCONFIG_SND_INDIGODJX=mCONFIG_SND_EMU10K1=mCONFIG_SND_EMU10K1X=mCONFIG_SND_ENS1370=mCONFIG_SND_ENS1371=mCONFIG_SND_ES1938=mCONFIG_SND_ES1968=mCONFIG_SND_ES1968_INPUT=yCONFIG_SND_FM801=mCONFIG_SND_FM801_TEA575X_BOOL=yCONFIG_SND_FM801_TEA575X=mCONFIG_SND_HDA_INTEL=mCONFIG_SND_HDA_HWDEP=yCONFIG_SND_HDA_RECONFIG=yCONFIG_SND_HDA_INPUT_BEEP=yCONFIG_SND_HDA_INPUT_BEEP_MODE=1CONFIG_SND_HDA_INPUT_JACK=y
# CONFIG_SND_HDA_PATCH_LOADER is not setCONFIG_SND_HDA_CODEC_REALTEK=yCONFIG_SND_HDA_CODEC_ANALOG=yCONFIG_SND_HDA_CODEC_SIGMATEL=yCONFIG_SND_HDA_CODEC_VIA=yCONFIG_SND_HDA_CODEC_HDMI=yCONFIG_SND_HDA_CODEC_CIRRUS=yCONFIG_SND_HDA_CODEC_CONEXANT=yCONFIG_SND_HDA_CODEC_CA0110=yCONFIG_SND_HDA_CODEC_CMEDIA=yCONFIG_SND_HDA_CODEC_SI3054=yCONFIG_SND_HDA_GENERIC=y
# CONFIG_SND_HDA_POWER_SAVE is not setCONFIG_SND_HDSP=mCONFIG_SND_HDSPM=mCONFIG_SND_ICE1712=mCONFIG_SND_ICE1724=mCONFIG_SND_INTEL8X0=mCONFIG_SND_INTEL8X0M=mCONFIG_SND_KORG1212=mCONFIG_SND_LX6464ES=mCONFIG_SND_MAESTRO3=mCONFIG_SND_MAESTRO3_INPUT=yCONFIG_SND_MIXART=mCONFIG_SND_NM256=mCONFIG_SND_PCXHR=mCONFIG_SND_RIPTIDE=mCONFIG_SND_RME32=mCONFIG_SND_RME96=mCONFIG_SND_RME9652=mCONFIG_SND_SIS7019=mCONFIG_SND_SONICVIBES=mCONFIG_SND_TRIDENT=mCONFIG_SND_VIA82XX=mCONFIG_SND_VIA82XX_MODEM=mCONFIG_SND_VIRTUOSO=mCONFIG_SND_VX222=mCONFIG_SND_YMFPCI=mCONFIG_SND_SPI=yCONFIG_SND_USB=yCONFIG_SND_USB_AUDIO=mCONFIG_SND_USB_UA101=mCONFIG_SND_USB_USX2Y=mCONFIG_SND_USB_CAIAQ=mCONFIG_SND_USB_CAIAQ_INPUT=yCONFIG_SND_USB_US122L=mCONFIG_SND_USB_6FIRE=mCONFIG_SND_FIREWIRE=yCONFIG_SND_FIREWIRE_LIB=mCONFIG_SND_FIREWIRE_SPEAKERS=mCONFIG_SND_PCMCIA=yCONFIG_SND_VXPOCKET=mCONFIG_SND_PDAUDIOCF=mCONFIG_SND_SOC=m
# CONFIG_SND_SOC_CACHE_LZO is not setCONFIG_SND_SOC_I2C_AND_SPI=mCONFIG_SND_SOC_ALL_CODECS=mCONFIG_SND_SOC_88PM860X=mCONFIG_SND_SOC_WM_HUBS=mCONFIG_SND_SOC_AD1836=mCONFIG_SND_SOC_AD193X=mCONFIG_SND_SOC_AD73311=mCONFIG_SND_SOC_ADS117X=mCONFIG_SND_SOC_AK4104=mCONFIG_SND_SOC_AK4535=mCONFIG_SND_SOC_AK4642=mCONFIG_SND_SOC_AK4671=mCONFIG_SND_SOC_ALC5623=mCONFIG_SND_SOC_CS42L51=mCONFIG_SND_SOC_CS4270=mCONFIG_SND_SOC_CS4271=mCONFIG_SND_SOC_CX20442=mCONFIG_SND_SOC_L3=mCONFIG_SND_SOC_DA7210=mCONFIG_SND_SOC_DFBMCS320=mCONFIG_SND_SOC_MAX98088=mCONFIG_SND_SOC_MAX9850=mCONFIG_SND_SOC_PCM3008=mCONFIG_SND_SOC_SGTL5000=mCONFIG_SND_SOC_SPDIF=mCONFIG_SND_SOC_SSM2602=mCONFIG_SND_SOC_TLV320AIC23=mCONFIG_SND_SOC_TLV320AIC26=mCONFIG_SND_SOC_TVL320AIC32X4=mCONFIG_SND_SOC_TLV320AIC3X=mCONFIG_SND_SOC_TLV320DAC33=mCONFIG_SND_SOC_TWL4030=mCONFIG_SND_SOC_TWL6040=mCONFIG_SND_SOC_UDA134X=mCONFIG_SND_SOC_UDA1380=mCONFIG_SND_SOC_WL1273=mCONFIG_SND_SOC_WM8350=mCONFIG_SND_SOC_WM8400=mCONFIG_SND_SOC_WM8510=mCONFIG_SND_SOC_WM8523=mCONFIG_SND_SOC_WM8580=mCONFIG_SND_SOC_WM8711=mCONFIG_SND_SOC_WM8727=mCONFIG_SND_SOC_WM8728=mCONFIG_SND_SOC_WM8731=mCONFIG_SND_SOC_WM8737=mCONFIG_SND_SOC_WM8741=mCONFIG_SND_SOC_WM8750=mCONFIG_SND_SOC_WM8753=mCONFIG_SND_SOC_WM8770=mCONFIG_SND_SOC_WM8776=mCONFIG_SND_SOC_WM8804=mCONFIG_SND_SOC_WM8900=mCONFIG_SND_SOC_WM8903=mCONFIG_SND_SOC_WM8904=mCONFIG_SND_SOC_WM8940=mCONFIG_SND_SOC_WM8955=mCONFIG_SND_SOC_WM8960=mCONFIG_SND_SOC_WM8961=mCONFIG_SND_SOC_WM8962=mCONFIG_SND_SOC_WM8971=mCONFIG_SND_SOC_WM8974=mCONFIG_SND_SOC_WM8978=mCONFIG_SND_SOC_WM8985=mCONFIG_SND_SOC_WM8988=mCONFIG_SND_SOC_WM8990=mCONFIG_SND_SOC_WM8991=mCONFIG_SND_SOC_WM8993=mCONFIG_SND_SOC_WM8994=mCONFIG_SND_SOC_WM8995=mCONFIG_SND_SOC_WM9081=mCONFIG_SND_SOC_LM4857=mCONFIG_SND_SOC_MAX9877=mCONFIG_SND_SOC_TPA6130A2=mCONFIG_SND_SOC_WM2000=mCONFIG_SND_SOC_WM9090=mCONFIG_SOUND_PRIME=m
# CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not setCONFIG_SOUND_OSS=mCONFIG_SOUND_TRACEINIT=yCONFIG_SOUND_DMAP=yCONFIG_SOUND_VMIDI=mCONFIG_SOUND_TRIX=mCONFIG_SOUND_MSS=mCONFIG_SOUND_MPU401=mCONFIG_SOUND_PAS=mCONFIG_SOUND_PSS=mCONFIG_PSS_MIXER=yCONFIG_SOUND_SB=mCONFIG_SOUND_YM3812=mCONFIG_SOUND_UART6850=mCONFIG_SOUND_AEDSP16=mCONFIG_SC6600=yCONFIG_SC6600_JOY=yCONFIG_SC6600_CDROM=4CONFIG_SC6600_CDROMBASE=0CONFIG_SOUND_KAHLUA=mCONFIG_AC97_BUS=mCONFIG_HID_SUPPORT=yCONFIG_HID=yCONFIG_HIDRAW=y
#
# USB Input Devices
#CONFIG_USB_HID=yCONFIG_HID_PID=yCONFIG_USB_HIDDEV=y
#
# Special HID drivers
#CONFIG_HID_3M_PCT=yCONFIG_HID_A4TECH=yCONFIG_HID_ACRUX=mCONFIG_HID_ACRUX_FF=mCONFIG_HID_APPLE=yCONFIG_HID_BELKIN=yCONFIG_HID_CANDO=yCONFIG_HID_CHERRY=yCONFIG_HID_CHICONY=yCONFIG_HID_PRODIKEYS=mCONFIG_HID_CYPRESS=yCONFIG_HID_DRAGONRISE=yCONFIG_DRAGONRISE_FF=yCONFIG_HID_EMS_FF=mCONFIG_HID_ELECOM=mCONFIG_HID_EZKEY=yCONFIG_HID_KEYTOUCH=yCONFIG_HID_KYE=yCONFIG_HID_UCLOGIC=yCONFIG_HID_WALTOP=yCONFIG_HID_GYRATION=yCONFIG_HID_TWINHAN=yCONFIG_HID_KENSINGTON=yCONFIG_HID_LCPOWER=yCONFIG_HID_LOGITECH=yCONFIG_LOGITECH_FF=yCONFIG_LOGIRUMBLEPAD2_FF=yCONFIG_LOGIG940_FF=yCONFIG_LOGIWII_FF=yCONFIG_HID_MAGICMOUSE=mCONFIG_HID_MICROSOFT=yCONFIG_HID_MOSART=yCONFIG_HID_MONTEREY=yCONFIG_HID_MULTITOUCH=yCONFIG_HID_NTRIG=yCONFIG_HID_ORTEK=yCONFIG_HID_PANTHERLORD=yCONFIG_PANTHERLORD_FF=yCONFIG_HID_PETALYNX=yCONFIG_HID_PICOLCD=mCONFIG_HID_PICOLCD_FB=yCONFIG_HID_PICOLCD_BACKLIGHT=yCONFIG_HID_PICOLCD_LCD=yCONFIG_HID_PICOLCD_LEDS=yCONFIG_HID_QUANTA=yCONFIG_HID_ROCCAT=yCONFIG_HID_ROCCAT_COMMON=yCONFIG_HID_ROCCAT_ARVO=yCONFIG_HID_ROCCAT_KONE=yCONFIG_HID_ROCCAT_KONEPLUS=yCONFIG_HID_ROCCAT_KOVAPLUS=yCONFIG_HID_ROCCAT_PYRA=yCONFIG_HID_SAMSUNG=yCONFIG_HID_SONY=yCONFIG_HID_STANTUM=yCONFIG_HID_SUNPLUS=yCONFIG_HID_GREENASIA=yCONFIG_GREENASIA_FF=yCONFIG_HID_SMARTJOYPLUS=yCONFIG_SMARTJOYPLUS_FF=yCONFIG_HID_TOPSEED=yCONFIG_HID_THRUSTMASTER=yCONFIG_THRUSTMASTER_FF=yCONFIG_HID_WACOM=mCONFIG_HID_WACOM_POWER_SUPPLY=yCONFIG_HID_ZEROPLUS=yCONFIG_ZEROPLUS_FF=yCONFIG_HID_ZYDACRON=mCONFIG_USB_SUPPORT=yCONFIG_USB_ARCH_HAS_HCD=yCONFIG_USB_ARCH_HAS_OHCI=yCONFIG_USB_ARCH_HAS_EHCI=yCONFIG_USB=y
# CONFIG_USB_DEBUG is not setCONFIG_USB_ANNOUNCE_NEW_DEVICES=y
#
# Miscellaneous USB options
#
# CONFIG_USB_DEVICEFS is not setCONFIG_USB_DEVICE_CLASS=yCONFIG_USB_DYNAMIC_MINORS=y
# CONFIG_USB_SUSPEND is not set
# CONFIG_USB_OTG_WHITELIST is not set
# CONFIG_USB_OTG_BLACKLIST_HUB is not setCONFIG_USB_MON=yCONFIG_USB_WUSB=yCONFIG_USB_WUSB_CBAF=y
# CONFIG_USB_WUSB_CBAF_DEBUG is not set
#
# USB Host Controller Drivers
#CONFIG_USB_C67X00_HCD=yCONFIG_USB_XHCI_HCD=y
# CONFIG_USB_XHCI_HCD_DEBUGGING is not setCONFIG_USB_EHCI_HCD=yCONFIG_USB_EHCI_ROOT_HUB_TT=yCONFIG_USB_EHCI_TT_NEWSCHED=yCONFIG_USB_OXU210HP_HCD=yCONFIG_USB_ISP116X_HCD=yCONFIG_USB_ISP1760_HCD=yCONFIG_USB_ISP1362_HCD=yCONFIG_USB_OHCI_HCD=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=mCONFIG_USB_SL811_HCD=yCONFIG_USB_SL811_CS=yCONFIG_USB_R8A66597_HCD=yCONFIG_USB_WHCI_HCD=yCONFIG_USB_HWA_HCD=y
#
# USB Device Class drivers
#CONFIG_USB_ACM=yCONFIG_USB_PRINTER=yCONFIG_USB_WDM=yCONFIG_USB_TMC=y
#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may #
#
# also be needed; see USB_STORAGE Help for more info # CONFIG_USB_STORAGE=y # CONFIG_USB_STORAGE_DEBUG is not set CONFIG_USB_STORAGE_REALTEK=y CONFIG_USB_STORAGE_DATAFAB=y CONFIG_USB_STORAGE_FREECOM=y CONFIG_USB_STORAGE_ISD200=y CONFIG_USB_STORAGE_USBAT=y CONFIG_USB_STORAGE_SDDR09=y CONFIG_USB_STORAGE_SDDR55=y CONFIG_USB_STORAGE_JUMPSHOT=y CONFIG_USB_STORAGE_ALAUDA=y CONFIG_USB_STORAGE_ONETOUCH=y CONFIG_USB_STORAGE_KARMA=y CONFIG_USB_STORAGE_CYPRESS_ATACB=y CONFIG_USB_STORAGE_ENE_UB6250=y CONFIG_USB_UAS=y CONFIG_USB_LIBUSUAL=y
#
# USB Imaging devices
#CONFIG_USB_MDC800=mCONFIG_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=mCONFIG_USB_SERIAL_CH341=mCONFIG_USB_SERIAL_WHITEHEAT=mCONFIG_USB_SERIAL_DIGI_ACCELEPORT=mCONFIG_USB_SERIAL_CP210X=mCONFIG_USB_SERIAL_CYPRESS_M8=mCONFIG_USB_SERIAL_EMPEG=mCONFIG_USB_SERIAL_FTDI_SIO=mCONFIG_USB_SERIAL_FUNSOFT=mCONFIG_USB_SERIAL_VISOR=mCONFIG_USB_SERIAL_IPAQ=mCONFIG_USB_SERIAL_IR=mCONFIG_USB_SERIAL_EDGEPORT=mCONFIG_USB_SERIAL_EDGEPORT_TI=mCONFIG_USB_SERIAL_GARMIN=mCONFIG_USB_SERIAL_IPW=mCONFIG_USB_SERIAL_IUU=mCONFIG_USB_SERIAL_KEYSPAN_PDA=mCONFIG_USB_SERIAL_KEYSPAN=mCONFIG_USB_SERIAL_KLSI=mCONFIG_USB_SERIAL_KOBIL_SCT=mCONFIG_USB_SERIAL_MCT_U232=mCONFIG_USB_SERIAL_MOS7720=mCONFIG_USB_SERIAL_MOS7715_PARPORT=yCONFIG_USB_SERIAL_MOS7840=mCONFIG_USB_SERIAL_MOTOROLA=mCONFIG_USB_SERIAL_NAVMAN=mCONFIG_USB_SERIAL_PL2303=mCONFIG_USB_SERIAL_OTI6858=mCONFIG_USB_SERIAL_QCAUX=mCONFIG_USB_SERIAL_QUALCOMM=mCONFIG_USB_SERIAL_SPCP8X5=mCONFIG_USB_SERIAL_HP4X=mCONFIG_USB_SERIAL_SAFE=mCONFIG_USB_SERIAL_SAFE_PADDED=yCONFIG_USB_SERIAL_SAMBA=mCONFIG_USB_SERIAL_SIEMENS_MPI=mCONFIG_USB_SERIAL_SIERRAWIRELESS=mCONFIG_USB_SERIAL_SYMBOL=mCONFIG_USB_SERIAL_TI=mCONFIG_USB_SERIAL_CYBERJACK=mCONFIG_USB_SERIAL_XIRCOM=mCONFIG_USB_SERIAL_WWAN=mCONFIG_USB_SERIAL_OPTION=mCONFIG_USB_SERIAL_OMNINET=mCONFIG_USB_SERIAL_OPTICON=mCONFIG_USB_SERIAL_VIVOPAY_SERIAL=mCONFIG_USB_SERIAL_ZIO=mCONFIG_USB_SERIAL_SSU100=mCONFIG_USB_SERIAL_DEBUG=m
#
# USB Miscellaneous drivers
#CONFIG_USB_EMI62=mCONFIG_USB_EMI26=mCONFIG_USB_ADUTUX=mCONFIG_USB_SEVSEG=mCONFIG_USB_RIO500=mCONFIG_USB_LEGOTOWER=mCONFIG_USB_LCD=mCONFIG_USB_LED=mCONFIG_USB_CYPRESS_CY7C63=mCONFIG_USB_CYTHERM=mCONFIG_USB_IDMOUSE=mCONFIG_USB_FTDI_ELAN=mCONFIG_USB_APPLEDISPLAY=mCONFIG_USB_SISUSBVGA=mCONFIG_USB_SISUSBVGA_CON=yCONFIG_USB_LD=mCONFIG_USB_TRANCEVIBRATOR=mCONFIG_USB_IOWARRIOR=m
# CONFIG_USB_TEST is not setCONFIG_USB_ISIGHTFW=mCONFIG_USB_YUREX=mCONFIG_USB_ATM=mCONFIG_USB_SPEEDTOUCH=mCONFIG_USB_CXACRU=mCONFIG_USB_UEAGLEATM=mCONFIG_USB_XUSBATM=mCONFIG_USB_GADGET=m
# CONFIG_USB_GADGET_DEBUG_FILES is not set
# CONFIG_USB_GADGET_DEBUG_FS is not setCONFIG_USB_GADGET_VBUS_DRAW=2CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_FUSB300 is not set
# CONFIG_USB_GADGET_R8A66597 is not set
# CONFIG_USB_GADGET_PXA_U2O is not set
# CONFIG_USB_GADGET_M66592 is not set
# CONFIG_USB_GADGET_AMD5536UDC is not setCONFIG_USB_GADGET_CI13XXX_PCI=yCONFIG_USB_CI13XXX_PCI=m
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_LANGWELL is not set
# CONFIG_USB_GADGET_EG20T is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not setCONFIG_USB_GADGET_DUALSPEED=yCONFIG_USB_ZERO=mCONFIG_USB_AUDIO=mCONFIG_USB_ETH=mCONFIG_USB_ETH_RNDIS=yCONFIG_USB_ETH_EEM=yCONFIG_USB_G_NCM=mCONFIG_USB_GADGETFS=mCONFIG_USB_FUNCTIONFS=mCONFIG_USB_FUNCTIONFS_ETH=yCONFIG_USB_FUNCTIONFS_RNDIS=yCONFIG_USB_FUNCTIONFS_GENERIC=yCONFIG_USB_FILE_STORAGE=mCONFIG_USB_FILE_STORAGE_TEST=yCONFIG_USB_MASS_STORAGE=mCONFIG_USB_G_SERIAL=mCONFIG_USB_MIDI_GADGET=mCONFIG_USB_G_PRINTER=mCONFIG_USB_CDC_COMPOSITE=mCONFIG_USB_G_NOKIA=mCONFIG_USB_G_MULTI=mCONFIG_USB_G_MULTI_RNDIS=yCONFIG_USB_G_MULTI_CDC=yCONFIG_USB_G_HID=mCONFIG_USB_G_DBGP=mCONFIG_USB_G_DBGP_PRINTK=y
# CONFIG_USB_G_DBGP_SERIAL is not setCONFIG_USB_G_WEBCAM=m
#
# OTG and related infrastructure
#CONFIG_USB_OTG_UTILS=yCONFIG_USB_GPIO_VBUS=mCONFIG_TWL4030_USB=mCONFIG_TWL6030_USB=mCONFIG_NOP_USB_XCEIV=mCONFIG_AB8500_USB=mCONFIG_UWB=yCONFIG_UWB_HWA=yCONFIG_UWB_WHCI=yCONFIG_UWB_I1480U=mCONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
# CONFIG_MMC_CLKGATE is not set
#
# MMC/SD/SDIO Card Drivers
#CONFIG_MMC_BLOCK=yCONFIG_MMC_BLOCK_MINORS=8CONFIG_MMC_BLOCK_BOUNCE=yCONFIG_SDIO_UART=yCONFIG_MMC_TEST=y
#
# MMC/SD/SDIO Host Controller Drivers
#CONFIG_MMC_SDHCI=yCONFIG_MMC_SDHCI_PCI=yCONFIG_MMC_RICOH_MMC=yCONFIG_MMC_SDHCI_OF=yCONFIG_MMC_SDHCI_PLTFM=yCONFIG_MMC_WBSD=yCONFIG_MMC_TIFM_SD=yCONFIG_MMC_SDRICOH_CS=yCONFIG_MMC_CB710=yCONFIG_MMC_VIA_SDMMC=yCONFIG_MMC_USHC=yCONFIG_MEMSTICK=y
# CONFIG_MEMSTICK_DEBUG is not set
#
# MemoryStick drivers
#
# CONFIG_MEMSTICK_UNSAFE_RESUME is not setCONFIG_MSPRO_BLOCK=y
#
# MemoryStick Host Controller Drivers
#CONFIG_MEMSTICK_TIFM_MS=yCONFIG_MEMSTICK_JMICRON_38X=yCONFIG_MEMSTICK_R592=yCONFIG_NEW_LEDS=yCONFIG_LEDS_CLASS=y
#
# LED drivers
#CONFIG_LEDS_88PM860X=mCONFIG_LEDS_LM3530=mCONFIG_LEDS_NET48XX=mCONFIG_LEDS_NET5501=mCONFIG_LEDS_WRAP=mCONFIG_LEDS_ALIX2=mCONFIG_LEDS_PCA9532=mCONFIG_LEDS_GPIO=mCONFIG_LEDS_GPIO_PLATFORM=yCONFIG_LEDS_GPIO_OF=yCONFIG_LEDS_LP3944=mCONFIG_LEDS_LP5521=mCONFIG_LEDS_LP5523=mCONFIG_LEDS_CLEVO_MAIL=mCONFIG_LEDS_PCA955X=mCONFIG_LEDS_WM831X_STATUS=mCONFIG_LEDS_WM8350=mCONFIG_LEDS_DA903X=mCONFIG_LEDS_DAC124S085=mCONFIG_LEDS_REGULATOR=mCONFIG_LEDS_BD2802=mCONFIG_LEDS_INTEL_SS4200=mCONFIG_LEDS_LT3593=mCONFIG_LEDS_ADP5520=mCONFIG_LEDS_DELL_NETBOOKS=mCONFIG_LEDS_MC13783=mCONFIG_LEDS_TRIGGERS=y
#
# LED Triggers
#CONFIG_LEDS_TRIGGER_TIMER=mCONFIG_LEDS_TRIGGER_HEARTBEAT=mCONFIG_LEDS_TRIGGER_BACKLIGHT=mCONFIG_LEDS_TRIGGER_GPIO=mCONFIG_LEDS_TRIGGER_DEFAULT_ON=m
#
# iptables trigger is under Netfilter config (LED target) # CONFIG_NFC_DEVICES=y CONFIG_PN544_NFC=m CONFIG_ACCESSIBILITY=y CONFIG_A11Y_BRAILLE_CONSOLE=y CONFIG_INFINIBAND=m CONFIG_INFINIBAND_USER_MAD=m CONFIG_INFINIBAND_USER_ACCESS=m CONFIG_INFINIBAND_USER_MEM=y CONFIG_INFINIBAND_ADDR_TRANS=y CONFIG_INFINIBAND_MTHCA=m CONFIG_INFINIBAND_MTHCA_DEBUG=y CONFIG_INFINIBAND_AMSO1100=m # CONFIG_INFINIBAND_AMSO1100_DEBUG is not set CONFIG_INFINIBAND_CXGB3=m # CONFIG_INFINIBAND_CXGB3_DEBUG is not set CONFIG_INFINIBAND_CXGB4=m CONFIG_MLX4_INFINIBAND=m CONFIG_INFINIBAND_NES=m # CONFIG_INFINIBAND_NES_DEBUG is not set CONFIG_INFINIBAND_IPOIB=m CONFIG_INFINIBAND_IPOIB_CM=y # CONFIG_INFINIBAND_IPOIB_DEBUG is not set CONFIG_INFINIBAND_SRP=m CONFIG_INFINIBAND_ISER=m CONFIG_EDAC=y
#
# Reporting subsystems
#
# CONFIG_EDAC_DEBUG is not setCONFIG_EDAC_DECODE_MCE=yCONFIG_EDAC_MCE_INJ=mCONFIG_EDAC_MM_EDAC=yCONFIG_EDAC_MCE=yCONFIG_EDAC_AMD76X=mCONFIG_EDAC_E7XXX=mCONFIG_EDAC_E752X=mCONFIG_EDAC_I82875P=mCONFIG_EDAC_I82975X=mCONFIG_EDAC_I3000=mCONFIG_EDAC_I3200=mCONFIG_EDAC_X38=mCONFIG_EDAC_I5400=mCONFIG_EDAC_I7CORE=mCONFIG_EDAC_I82860=mCONFIG_EDAC_R82600=mCONFIG_EDAC_I5000=mCONFIG_EDAC_I5100=mCONFIG_EDAC_I7300=mCONFIG_RTC_LIB=mCONFIG_RTC_CLASS=m
#
# RTC interfaces
#CONFIG_RTC_INTF_SYSFS=yCONFIG_RTC_INTF_PROC=yCONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not setCONFIG_RTC_DRV_TEST=m
#
# I2C RTC drivers
#CONFIG_RTC_DRV_DS1307=mCONFIG_RTC_DRV_DS1374=mCONFIG_RTC_DRV_DS1672=mCONFIG_RTC_DRV_DS3232=mCONFIG_RTC_DRV_MAX6900=mCONFIG_RTC_DRV_MAX8925=mCONFIG_RTC_DRV_MAX8998=mCONFIG_RTC_DRV_RS5C372=mCONFIG_RTC_DRV_ISL1208=mCONFIG_RTC_DRV_ISL12022=mCONFIG_RTC_DRV_X1205=mCONFIG_RTC_DRV_PCF8563=mCONFIG_RTC_DRV_PCF8583=mCONFIG_RTC_DRV_M41T80=mCONFIG_RTC_DRV_M41T80_WDT=yCONFIG_RTC_DRV_BQ32K=mCONFIG_RTC_DRV_TWL4030=mCONFIG_RTC_DRV_S35390A=mCONFIG_RTC_DRV_FM3130=mCONFIG_RTC_DRV_RX8581=mCONFIG_RTC_DRV_RX8025=m
#
# SPI RTC drivers
#CONFIG_RTC_DRV_M41T94=mCONFIG_RTC_DRV_DS1305=mCONFIG_RTC_DRV_DS1390=mCONFIG_RTC_DRV_MAX6902=mCONFIG_RTC_DRV_R9701=mCONFIG_RTC_DRV_RS5C348=mCONFIG_RTC_DRV_DS3234=mCONFIG_RTC_DRV_PCF2123=m
#
# Platform RTC drivers
#CONFIG_RTC_DRV_CMOS=mCONFIG_RTC_DRV_DS1286=mCONFIG_RTC_DRV_DS1511=mCONFIG_RTC_DRV_DS1553=mCONFIG_RTC_DRV_DS1742=mCONFIG_RTC_DRV_STK17TA8=mCONFIG_RTC_DRV_M48T86=mCONFIG_RTC_DRV_M48T35=mCONFIG_RTC_DRV_M48T59=mCONFIG_RTC_DRV_MSM6242=mCONFIG_RTC_DRV_BQ4802=mCONFIG_RTC_DRV_RP5C01=mCONFIG_RTC_DRV_V3020=mCONFIG_RTC_DRV_WM831X=mCONFIG_RTC_DRV_WM8350=mCONFIG_RTC_DRV_PCF50633=mCONFIG_RTC_DRV_AB3100=mCONFIG_RTC_DRV_AB8500=m
#
# on-CPU RTC drivers
#CONFIG_RTC_DRV_PCAP=mCONFIG_RTC_DRV_MC13XXX=mCONFIG_DMADEVICES=y
# CONFIG_DMADEVICES_DEBUG is not set
#
# DMA Devices
#CONFIG_INTEL_MID_DMAC=yCONFIG_INTEL_IOATDMA=yCONFIG_TIMB_DMA=yCONFIG_PCH_DMA=yCONFIG_DMA_ENGINE=y
#
# DMA Clients
#CONFIG_NET_DMA=yCONFIG_ASYNC_TX_DMA=y
# CONFIG_DMATEST is not setCONFIG_DCA=yCONFIG_AUXDISPLAY=yCONFIG_KS0108=mCONFIG_KS0108_PORT=0x378CONFIG_KS0108_DELAY=2CONFIG_CFAG12864B=mCONFIG_CFAG12864B_RATE=20CONFIG_UIO=yCONFIG_UIO_CIF=mCONFIG_UIO_PDRV=mCONFIG_UIO_PDRV_GENIRQ=mCONFIG_UIO_AEC=mCONFIG_UIO_SERCOS3=mCONFIG_UIO_PCI_GENERIC=mCONFIG_UIO_NETX=mCONFIG_STAGING=y
# CONFIG_STAGING_EXCLUDE_BUILD is not setCONFIG_STALLION=mCONFIG_ISTALLION=mCONFIG_DIGIEPCA=mCONFIG_RISCOM8=mCONFIG_SPECIALIX=mCONFIG_COMPUTONE=mCONFIG_ET131X=m
# CONFIG_ET131X_DEBUG is not setCONFIG_SLICOSS=mCONFIG_VIDEO_GO7007=mCONFIG_VIDEO_GO7007_USB=mCONFIG_VIDEO_GO7007_USB_S2250_BOARD=mCONFIG_VIDEO_GO7007_OV7640=mCONFIG_VIDEO_GO7007_SAA7113=mCONFIG_VIDEO_GO7007_SAA7115=mCONFIG_VIDEO_GO7007_TW9903=mCONFIG_VIDEO_GO7007_UDA1342=mCONFIG_VIDEO_GO7007_SONY_TUNER=mCONFIG_VIDEO_GO7007_TW2804=mCONFIG_VIDEO_CX25821=mCONFIG_VIDEO_CX25821_ALSA=mCONFIG_VIDEO_TM6000=mCONFIG_VIDEO_TM6000_ALSA=mCONFIG_VIDEO_TM6000_DVB=mCONFIG_DVB_CXD2099=mCONFIG_USB_IP_COMMON=mCONFIG_USB_IP_VHCI_HCD=mCONFIG_USB_IP_HOST=m
# CONFIG_USB_IP_DEBUG_ENABLE is not setCONFIG_W35UND=mCONFIG_PRISM2_USB=mCONFIG_ECHO=mCONFIG_BRCM80211=mCONFIG_BRCMSMAC=yCONFIG_BRCMFMAC=yCONFIG_BRCMDBG=yCONFIG_RT2860=mCONFIG_RT2870=mCONFIG_COMEDI=m
# CONFIG_COMEDI_DEBUG is not setCONFIG_COMEDI_MISC_DRIVERS=mCONFIG_COMEDI_KCOMEDILIB=mCONFIG_COMEDI_BOND=mCONFIG_COMEDI_TEST=mCONFIG_COMEDI_PARPORT=mCONFIG_COMEDI_SERIAL2002=mCONFIG_COMEDI_SKEL=mCONFIG_COMEDI_ISA_DRIVERS=mCONFIG_COMEDI_ACL7225B=mCONFIG_COMEDI_PCL711=mCONFIG_COMEDI_PCL724=mCONFIG_COMEDI_PCL725=mCONFIG_COMEDI_PCL726=mCONFIG_COMEDI_PCL730=mCONFIG_COMEDI_PCL812=mCONFIG_COMEDI_PCL816=mCONFIG_COMEDI_PCL818=mCONFIG_COMEDI_PCM3724=mCONFIG_COMEDI_PCM3730=mCONFIG_COMEDI_RTI800=mCONFIG_COMEDI_RTI802=mCONFIG_COMEDI_DAS16M1=mCONFIG_COMEDI_DAS16=mCONFIG_COMEDI_DAS800=mCONFIG_COMEDI_DAS1800=mCONFIG_COMEDI_DAS6402=mCONFIG_COMEDI_DT2801=mCONFIG_COMEDI_DT2811=mCONFIG_COMEDI_DT2814=mCONFIG_COMEDI_DT2815=mCONFIG_COMEDI_DT2817=mCONFIG_COMEDI_DT282X=mCONFIG_COMEDI_DMM32AT=mCONFIG_COMEDI_FL512=mCONFIG_COMEDI_AIO_AIO12_8=mCONFIG_COMEDI_AIO_IIRO_16=mCONFIG_COMEDI_C6XDIGIO=mCONFIG_COMEDI_MPC624=mCONFIG_COMEDI_ADQ12B=mCONFIG_COMEDI_NI_AT_A2150=mCONFIG_COMEDI_NI_AT_AO=mCONFIG_COMEDI_NI_ATMIO=mCONFIG_COMEDI_NI_ATMIO16D=mCONFIG_COMEDI_PCMAD=mCONFIG_COMEDI_PCMDA12=mCONFIG_COMEDI_PCMMIO=mCONFIG_COMEDI_PCMUIO=mCONFIG_COMEDI_MULTIQ3=mCONFIG_COMEDI_POC=mCONFIG_COMEDI_PCI_DRIVERS=mCONFIG_COMEDI_ADDI_APCI_035=mCONFIG_COMEDI_ADDI_APCI_1032=mCONFIG_COMEDI_ADDI_APCI_1500=mCONFIG_COMEDI_ADDI_APCI_1516=mCONFIG_COMEDI_ADDI_APCI_1564=mCONFIG_COMEDI_ADDI_APCI_16XX=mCONFIG_COMEDI_ADDI_APCI_2016=mCONFIG_COMEDI_ADDI_APCI_2032=mCONFIG_COMEDI_ADDI_APCI_2200=mCONFIG_COMEDI_ADDI_APCI_3001=mCONFIG_COMEDI_ADDI_APCI_3120=mCONFIG_COMEDI_ADDI_APCI_3501=mCONFIG_COMEDI_ADDI_APCI_3XXX=mCONFIG_COMEDI_ADL_PCI6208=mCONFIG_COMEDI_ADL_PCI7230=mCONFIG_COMEDI_ADL_PCI7296=mCONFIG_COMEDI_ADL_PCI7432=mCONFIG_COMEDI_ADL_PCI8164=mCONFIG_COMEDI_ADL_PCI9111=mCONFIG_COMEDI_ADL_PCI9118=mCONFIG_COMEDI_ADV_PCI1710=mCONFIG_COMEDI_ADV_PCI1723=mCONFIG_COMEDI_ADV_PCI_DIO=mCONFIG_COMEDI_AMPLC_DIO200=mCONFIG_COMEDI_AMPLC_PC236=mCONFIG_COMEDI_AMPLC_PC263=mCONFIG_COMEDI_AMPLC_PCI224=mCONFIG_COMEDI_AMPLC_PCI230=mCONFIG_COMEDI_CONTEC_PCI_DIO=mCONFIG_COMEDI_DT3000=mCONFIG_COMEDI_UNIOXX5=mCONFIG_COMEDI_GSC_HPDI=mCONFIG_COMEDI_ICP_MULTI=mCONFIG_COMEDI_II_PCI20KC=mCONFIG_COMEDI_DAQBOARD2000=mCONFIG_COMEDI_JR3_PCI=mCONFIG_COMEDI_KE_COUNTER=mCONFIG_COMEDI_CB_PCIDAS64=mCONFIG_COMEDI_CB_PCIDAS=mCONFIG_COMEDI_CB_PCIDDA=mCONFIG_COMEDI_CB_PCIDIO=mCONFIG_COMEDI_CB_PCIMDAS=mCONFIG_COMEDI_CB_PCIMDDA=mCONFIG_COMEDI_ME4000=mCONFIG_COMEDI_ME_DAQ=mCONFIG_COMEDI_NI_6527=mCONFIG_COMEDI_NI_65XX=mCONFIG_COMEDI_NI_660X=mCONFIG_COMEDI_NI_670X=mCONFIG_COMEDI_NI_PCIDIO=mCONFIG_COMEDI_NI_PCIMIO=mCONFIG_COMEDI_RTD520=mCONFIG_COMEDI_S526=mCONFIG_COMEDI_S626=mCONFIG_COMEDI_SSV_DNP=mCONFIG_COMEDI_PCMCIA_DRIVERS=mCONFIG_COMEDI_CB_DAS16_CS=mCONFIG_COMEDI_DAS08_CS=mCONFIG_COMEDI_NI_DAQ_700_CS=mCONFIG_COMEDI_NI_DAQ_DIO24_CS=mCONFIG_COMEDI_NI_LABPC_CS=mCONFIG_COMEDI_NI_MIO_CS=mCONFIG_COMEDI_QUATECH_DAQP_CS=mCONFIG_COMEDI_USB_DRIVERS=mCONFIG_COMEDI_DT9812=mCONFIG_COMEDI_USBDUX=mCONFIG_COMEDI_USBDUXFAST=mCONFIG_COMEDI_VMK80XX=mCONFIG_COMEDI_NI_COMMON=mCONFIG_COMEDI_MITE=mCONFIG_COMEDI_NI_TIO=mCONFIG_COMEDI_NI_LABPC=mCONFIG_COMEDI_8255=mCONFIG_COMEDI_DAS08=mCONFIG_COMEDI_FC=mCONFIG_FB_OLPC_DCON=mCONFIG_FB_OLPC_DCON_1=yCONFIG_FB_OLPC_DCON_1_5=yCONFIG_ASUS_OLED=mCONFIG_PANEL=mCONFIG_PANEL_PARPORT=0CONFIG_PANEL_PROFILE=5
# CONFIG_PANEL_CHANGE_MESSAGE is not setCONFIG_R8187SE=mCONFIG_RTL8192U=mCONFIG_RTL8192E=mCONFIG_R8712U=mCONFIG_R8712_AP=yCONFIG_RTS_PSTOR=m
# CONFIG_RTS_PSTOR_DEBUG is not setCONFIG_TRANZPORT=mCONFIG_POHMELFS=m
# CONFIG_POHMELFS_DEBUG is not setCONFIG_POHMELFS_CRYPTO=yCONFIG_IDE_PHISON=mCONFIG_LINE6_USB=mCONFIG_LINE6_USB_DEBUG=yCONFIG_LINE6_USB_DUMP_CTRL=yCONFIG_LINE6_USB_DUMP_MIDI=yCONFIG_LINE6_USB_DUMP_PCM=yCONFIG_LINE6_USB_RAW=yCONFIG_LINE6_USB_IMPULSE_RESPONSE=yCONFIG_DRM_VMWGFX=mCONFIG_DRM_NOUVEAU=mCONFIG_DRM_NOUVEAU_BACKLIGHT=yCONFIG_DRM_NOUVEAU_DEBUG=y
#
# I2C encoder or helper chips
#CONFIG_DRM_I2C_CH7006=mCONFIG_DRM_I2C_SIL164=mCONFIG_USB_SERIAL_QUATECH2=mCONFIG_USB_SERIAL_QUATECH_USB2=mCONFIG_VT6655=mCONFIG_VT6656=m
# CONFIG_HYPERV is not setCONFIG_VME_BUS=m
#
# VME Bridge Drivers
#CONFIG_VME_CA91CX42=mCONFIG_VME_TSI148=m
#
# VME Device Drivers
#CONFIG_VME_USER=m
#
# VME Board Drivers
#CONFIG_VMIVME_7805=mCONFIG_DX_SEP=mCONFIG_IIO=mCONFIG_IIO_RING_BUFFER=yCONFIG_IIO_SW_RING=mCONFIG_IIO_KFIFO_BUF=mCONFIG_IIO_TRIGGER=y
#
# Accelerometers
#CONFIG_ADIS16201=mCONFIG_ADIS16203=mCONFIG_ADIS16204=mCONFIG_ADIS16209=mCONFIG_ADIS16220=mCONFIG_ADIS16240=mCONFIG_KXSD9=mCONFIG_LIS3L02DQ=mCONFIG_LIS3L02DQ_BUF_KFIFO=y
# CONFIG_LIS3L02DQ_BUF_RING_SW is not setCONFIG_SCA3000=m
#
# Analog to digital convertors
#CONFIG_MAX1363=mCONFIG_MAX1363_RING_BUFFER=yCONFIG_AD7150=mCONFIG_AD7152=mCONFIG_AD7291=mCONFIG_AD7298=mCONFIG_AD7314=mCONFIG_AD7606=mCONFIG_AD7606_IFACE_PARALLEL=mCONFIG_AD7606_IFACE_SPI=mCONFIG_AD799X=mCONFIG_AD799X_RING_BUFFER=yCONFIG_AD7476=mCONFIG_AD7887=mCONFIG_AD7745=mCONFIG_AD7816=mCONFIG_ADT75=mCONFIG_ADT7310=mCONFIG_ADT7410=m
#
# Analog digital bi-direction convertors
#CONFIG_ADT7316=mCONFIG_ADT7316_SPI=mCONFIG_ADT7316_I2C=m
#
# Digital to analog convertors
#CONFIG_AD5624R_SPI=mCONFIG_AD5446=mCONFIG_MAX517=m
#
# Direct Digital Synthesis
#CONFIG_AD5930=mCONFIG_AD9832=mCONFIG_AD9834=mCONFIG_AD9850=mCONFIG_AD9852=mCONFIG_AD9910=mCONFIG_AD9951=m
#
# Digital gyroscope sensors
#CONFIG_ADIS16060=mCONFIG_ADIS16080=mCONFIG_ADIS16130=mCONFIG_ADIS16260=m
#
# Inertial measurement units
#CONFIG_ADIS16300=mCONFIG_ADIS16350=mCONFIG_ADIS16400=m
#
# Light sensors
#CONFIG_SENSORS_TSL2563=mCONFIG_SENSORS_ISL29018=m
#
# Magnetometer sensors
#CONFIG_SENSORS_AK8975=mCONFIG_SENSORS_HMC5843=m
#
# Active energy metering IC
#CONFIG_ADE7753=mCONFIG_ADE7754=mCONFIG_ADE7758=mCONFIG_ADE7759=mCONFIG_ADE7854=mCONFIG_ADE7854_I2C=mCONFIG_ADE7854_SPI=m
#
# Resolver to digital converters
#CONFIG_AD2S90=mCONFIG_AD2S120X=mCONFIG_AD2S1210=m
# CONFIG_AD2S1210_GPIO_INPUT is not set
# CONFIG_AD2S1210_GPIO_OUTPUT is not setCONFIG_AD2S1210_GPIO_NONE=y
#
# Triggers - standalone
#CONFIG_IIO_PERIODIC_RTC_TRIGGER=mCONFIG_IIO_GPIO_TRIGGER=mCONFIG_IIO_SYSFS_TRIGGER=mCONFIG_CS5535_GPIO=mCONFIG_XVMALLOC=yCONFIG_ZRAM=m
# CONFIG_ZRAM_DEBUG is not setCONFIG_WLAGS49_H2=mCONFIG_WLAGS49_H25=mCONFIG_FB_SM7XX=yCONFIG_VIDEO_DT3155=mCONFIG_DT3155_CCIR=yCONFIG_CRYSTALHD=mCONFIG_CXT1E1=mCONFIG_SBE_PMCC4_NCOMM=yCONFIG_FB_XGI=yCONFIG_LIRC_STAGING=yCONFIG_LIRC_BT829=mCONFIG_LIRC_IGORPLUGUSB=mCONFIG_LIRC_IMON=mCONFIG_LIRC_PARALLEL=mCONFIG_LIRC_SASEM=mCONFIG_LIRC_SERIAL=mCONFIG_LIRC_SERIAL_TRANSMITTER=yCONFIG_LIRC_SIR=mCONFIG_LIRC_TTUSBIR=mCONFIG_LIRC_ZILOG=mCONFIG_EASYCAP=mCONFIG_EASYCAP_SND=y
# CONFIG_EASYCAP_OSS is not set
# CONFIG_EASYCAP_DEBUG is not setCONFIG_SOLO6X10=mCONFIG_ACPI_QUICKSTART=yCONFIG_MACH_NO_WESTBRIDGE=yCONFIG_SBE_2T3E3=mCONFIG_ATH6K_LEGACY=m
CONFIG_AR600x_SD31_XXX=y
# CONFIG_AR600x_WB31_XXX is not set
# CONFIG_AR600x_SD32_XXX is not set
# CONFIG_AR600x_CUSTOM_XXX is not setCONFIG_ATH6KL_ENABLE_COEXISTENCE=y
CONFIG_AR600x_DUAL_ANTENNA=y
# CONFIG_AR600x_SINGLE_ANTENNA is not set
# CONFIG_AR600x_BT_QCOM is not set
# CONFIG_AR600x_BT_CSR is not set
CONFIG_AR600x_BT_AR3001=yCONFIG_ATH6KL_HCI_BRIDGE=yCONFIG_ATH6KL_CONFIG_GPIO_BT_RESET=y
CONFIG_AR600x_BT_RESET_PIN=22CONFIG_ATH6KL_CFG80211=yCONFIG_ATH6KL_HTC_RAW_INTERFACE=yCONFIG_ATH6KL_VIRTUAL_SCATTER_GATHER=yCONFIG_ATH6KL_SKIP_ABI_VERSION_CHECK=y
# CONFIG_ATH6KL_DEBUG is not setCONFIG_USB_ENESTORAGE=mCONFIG_BCM_WIMAX=mCONFIG_FT1000=mCONFIG_FT1000_USB=mCONFIG_FT1000_PCMCIA=m
#
# Speakup console speech
#CONFIG_SPEAKUP=mCONFIG_SPEAKUP_SYNTH_ACNTSA=mCONFIG_SPEAKUP_SYNTH_ACNTPC=mCONFIG_SPEAKUP_SYNTH_APOLLO=mCONFIG_SPEAKUP_SYNTH_AUDPTR=mCONFIG_SPEAKUP_SYNTH_BNS=mCONFIG_SPEAKUP_SYNTH_DECTLK=mCONFIG_SPEAKUP_SYNTH_DECEXT=mCONFIG_SPEAKUP_SYNTH_DECPC=mCONFIG_SPEAKUP_SYNTH_DTLK=mCONFIG_SPEAKUP_SYNTH_KEYPC=mCONFIG_SPEAKUP_SYNTH_LTLK=mCONFIG_SPEAKUP_SYNTH_SOFT=mCONFIG_SPEAKUP_SYNTH_SPKOUT=mCONFIG_SPEAKUP_SYNTH_TXPRT=mCONFIG_SPEAKUP_SYNTH_DUMMY=mCONFIG_TOUCHSCREEN_CLEARPAD_TM1217=mCONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=mCONFIG_DRM_PSB=m
#
# Altera FPGA firmware download module
#
# CONFIG_ALTERA_STAPL is not setCONFIG_X86_PLATFORM_DEVICES=yCONFIG_ACER_WMI=yCONFIG_ACERHDF=yCONFIG_DELL_LAPTOP=mCONFIG_DELL_WMI=yCONFIG_DELL_WMI_AIO=yCONFIG_FUJITSU_LAPTOP=y
# CONFIG_FUJITSU_LAPTOP_DEBUG is not setCONFIG_TC1100_WMI=yCONFIG_HP_ACCEL=yCONFIG_HP_WMI=yCONFIG_MSI_LAPTOP=yCONFIG_PANASONIC_LAPTOP=yCONFIG_COMPAL_LAPTOP=yCONFIG_SONY_LAPTOP=yCONFIG_SONYPI_COMPAT=yCONFIG_IDEAPAD_LAPTOP=yCONFIG_THINKPAD_ACPI=y
# CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set
# CONFIG_THINKPAD_ACPI_DEBUG is not setCONFIG_THINKPAD_ACPI_UNSAFE_LEDS=yCONFIG_THINKPAD_ACPI_VIDEO=yCONFIG_THINKPAD_ACPI_HOTKEY_POLL=yCONFIG_SENSORS_HDAPS=yCONFIG_INTEL_MENLOW=yCONFIG_EEEPC_LAPTOP=yCONFIG_ASUS_WMI=yCONFIG_ASUS_NB_WMI=yCONFIG_EEEPC_WMI=yCONFIG_ACPI_WMI=yCONFIG_MSI_WMI=yCONFIG_ACPI_ASUS=yCONFIG_TOPSTAR_LAPTOP=yCONFIG_ACPI_TOSHIBA=yCONFIG_TOSHIBA_BT_RFKILL=yCONFIG_ACPI_CMPC=yCONFIG_INTEL_IPS=yCONFIG_IBM_RTL=yCONFIG_XO1_RFKILL=yCONFIG_XO15_EBOOK=yCONFIG_SAMSUNG_LAPTOP=y
#
# Firmware Drivers
#CONFIG_EDD=y
# CONFIG_EDD_OFF is not setCONFIG_FIRMWARE_MEMMAP=y
# CONFIG_EFI_VARS is not setCONFIG_DELL_RBU=mCONFIG_DCDBAS=mCONFIG_DMIID=yCONFIG_DMI_SYSFS=yCONFIG_ISCSI_IBFT_FIND=yCONFIG_ISCSI_IBFT=y
# CONFIG_SIGMA is not set
#
# File systems
#CONFIG_EXT2_FS=yCONFIG_EXT2_FS_XATTR=yCONFIG_EXT2_FS_POSIX_ACL=yCONFIG_EXT2_FS_SECURITY=yCONFIG_EXT2_FS_XIP=yCONFIG_EXT3_FS=yCONFIG_EXT3_DEFAULTS_TO_ORDERED=yCONFIG_EXT3_FS_XATTR=yCONFIG_EXT3_FS_POSIX_ACL=yCONFIG_EXT3_FS_SECURITY=yCONFIG_EXT4_FS=yCONFIG_EXT4_FS_XATTR=yCONFIG_EXT4_FS_POSIX_ACL=yCONFIG_EXT4_FS_SECURITY=y
# CONFIG_EXT4_DEBUG is not setCONFIG_FS_XIP=yCONFIG_JBD=y
# CONFIG_JBD_DEBUG is not setCONFIG_JBD2=y
# CONFIG_JBD2_DEBUG is not setCONFIG_FS_MBCACHE=yCONFIG_REISERFS_FS=y
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not setCONFIG_REISERFS_FS_XATTR=yCONFIG_REISERFS_FS_POSIX_ACL=yCONFIG_REISERFS_FS_SECURITY=yCONFIG_JFS_FS=yCONFIG_JFS_POSIX_ACL=yCONFIG_JFS_SECURITY=y
# CONFIG_JFS_DEBUG is not set
# CONFIG_JFS_STATISTICS is not setCONFIG_XFS_FS=yCONFIG_XFS_QUOTA=yCONFIG_XFS_POSIX_ACL=yCONFIG_XFS_RT=y
# CONFIG_XFS_DEBUG is not setCONFIG_GFS2_FS=yCONFIG_GFS2_FS_LOCKING_DLM=yCONFIG_OCFS2_FS=yCONFIG_OCFS2_FS_O2CB=yCONFIG_OCFS2_FS_USERSPACE_CLUSTER=y
# CONFIG_OCFS2_FS_STATS is not setCONFIG_OCFS2_DEBUG_MASKLOG=y
# CONFIG_OCFS2_DEBUG_FS is not setCONFIG_BTRFS_FS=yCONFIG_BTRFS_FS_POSIX_ACL=yCONFIG_NILFS2_FS=yCONFIG_FS_POSIX_ACL=yCONFIG_EXPORTFS=yCONFIG_FILE_LOCKING=yCONFIG_FSNOTIFY=yCONFIG_DNOTIFY=yCONFIG_INOTIFY_USER=yCONFIG_FANOTIFY=y
# CONFIG_FANOTIFY_ACCESS_PERMISSIONS is not setCONFIG_QUOTA=yCONFIG_QUOTA_NETLINK_INTERFACE=y
# CONFIG_PRINT_QUOTA_WARNING is not set
# CONFIG_QUOTA_DEBUG is not setCONFIG_QUOTA_TREE=yCONFIG_QFMT_V1=yCONFIG_QFMT_V2=yCONFIG_QUOTACTL=yCONFIG_AUTOFS4_FS=yCONFIG_FUSE_FS=yCONFIG_CUSE=yCONFIG_GENERIC_ACL=y
#
# Caches
#CONFIG_FSCACHE=yCONFIG_FSCACHE_STATS=yCONFIG_FSCACHE_HISTOGRAM=y
# CONFIG_FSCACHE_DEBUG is not set
# CONFIG_FSCACHE_OBJECT_LIST is not setCONFIG_CACHEFILES=y
# CONFIG_CACHEFILES_DEBUG is not setCONFIG_CACHEFILES_HISTOGRAM=y
#
# CD-ROM/DVD Filesystems
#CONFIG_ISO9660_FS=yCONFIG_JOLIET=yCONFIG_ZISOFS=yCONFIG_UDF_FS=yCONFIG_UDF_NLS=y
#
# DOS/FAT/NT Filesystems
#CONFIG_FAT_FS=yCONFIG_MSDOS_FS=yCONFIG_VFAT_FS=yCONFIG_FAT_DEFAULT_CODEPAGE=437CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"CONFIG_NTFS_FS=y
# CONFIG_NTFS_DEBUG is not setCONFIG_NTFS_RW=y
#
# 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=yCONFIG_MISC_FILESYSTEMS=yCONFIG_ADFS_FS=yCONFIG_ADFS_FS_RW=yCONFIG_AFFS_FS=yCONFIG_ECRYPT_FS=yCONFIG_HFS_FS=yCONFIG_HFSPLUS_FS=yCONFIG_BEFS_FS=y
# CONFIG_BEFS_DEBUG is not setCONFIG_BFS_FS=yCONFIG_EFS_FS=y
# CONFIG_LOGFS is not setCONFIG_CRAMFS=yCONFIG_SQUASHFS=yCONFIG_SQUASHFS_XATTR=y
# CONFIG_SQUASHFS_LZO is not set
# CONFIG_SQUASHFS_XZ is not setCONFIG_SQUASHFS_EMBEDDED=yCONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3CONFIG_VXFS_FS=yCONFIG_MINIX_FS=yCONFIG_OMFS_FS=yCONFIG_HPFS_FS=yCONFIG_QNX4FS_FS=yCONFIG_ROMFS_FS=yCONFIG_ROMFS_BACKED_BY_BLOCK=yCONFIG_ROMFS_ON_BLOCK=yCONFIG_PSTORE=yCONFIG_SYSV_FS=yCONFIG_UFS_FS=y
# CONFIG_UFS_FS_WRITE is not set
# CONFIG_UFS_DEBUG is not setCONFIG_EXOFS_FS=y
# CONFIG_EXOFS_DEBUG is not setCONFIG_NETWORK_FILESYSTEMS=yCONFIG_NFS_FS=yCONFIG_NFS_V3=yCONFIG_NFS_V3_ACL=yCONFIG_NFS_V4=yCONFIG_NFS_V4_1=yCONFIG_PNFS_FILE_LAYOUT=y
# CONFIG_ROOT_NFS is not setCONFIG_NFS_FSCACHE=yCONFIG_NFS_USE_LEGACY_DNS=yCONFIG_NFS_USE_NEW_IDMAPPER=yCONFIG_NFSD=yCONFIG_NFSD_DEPRECATED=yCONFIG_NFSD_V2_ACL=yCONFIG_NFSD_V3=yCONFIG_NFSD_V3_ACL=yCONFIG_NFSD_V4=yCONFIG_LOCKD=yCONFIG_LOCKD_V4=yCONFIG_NFS_ACL_SUPPORT=yCONFIG_NFS_COMMON=yCONFIG_SUNRPC=yCONFIG_SUNRPC_GSS=yCONFIG_SUNRPC_XPRT_RDMA=mCONFIG_RPCSEC_GSS_KRB5=mCONFIG_CEPH_FS=yCONFIG_CIFS=yCONFIG_CIFS_STATS=yCONFIG_CIFS_STATS2=yCONFIG_CIFS_WEAK_PW_HASH=yCONFIG_CIFS_UPCALL=yCONFIG_CIFS_XATTR=yCONFIG_CIFS_POSIX=y
# CONFIG_CIFS_DEBUG2 is not setCONFIG_CIFS_DFS_UPCALL=yCONFIG_CIFS_FSCACHE=yCONFIG_CIFS_ACL=yCONFIG_CIFS_EXPERIMENTAL=yCONFIG_NCP_FS=yCONFIG_NCPFS_PACKET_SIGNING=yCONFIG_NCPFS_IOCTL_LOCKING=yCONFIG_NCPFS_STRONG=yCONFIG_NCPFS_NFS_NS=yCONFIG_NCPFS_OS2_NS=yCONFIG_NCPFS_SMALLDOS=yCONFIG_NCPFS_NLS=yCONFIG_NCPFS_EXTRAS=yCONFIG_CODA_FS=yCONFIG_AFS_FS=y
# CONFIG_AFS_DEBUG is not setCONFIG_AFS_FSCACHE=yCONFIG_9P_FS=mCONFIG_9P_FSCACHE=yCONFIG_9P_FS_POSIX_ACL=y
#
# Partition Types
#CONFIG_PARTITION_ADVANCED=yCONFIG_ACORN_PARTITION=yCONFIG_ACORN_PARTITION_CUMANA=yCONFIG_ACORN_PARTITION_EESOX=yCONFIG_ACORN_PARTITION_ICS=yCONFIG_ACORN_PARTITION_ADFS=yCONFIG_ACORN_PARTITION_POWERTEC=yCONFIG_ACORN_PARTITION_RISCIX=yCONFIG_OSF_PARTITION=yCONFIG_AMIGA_PARTITION=yCONFIG_ATARI_PARTITION=yCONFIG_MAC_PARTITION=yCONFIG_MSDOS_PARTITION=yCONFIG_BSD_DISKLABEL=yCONFIG_MINIX_SUBPARTITION=yCONFIG_SOLARIS_X86_PARTITION=yCONFIG_UNIXWARE_DISKLABEL=yCONFIG_LDM_PARTITION=yCONFIG_LDM_DEBUG=yCONFIG_SGI_PARTITION=yCONFIG_ULTRIX_PARTITION=yCONFIG_SUN_PARTITION=yCONFIG_KARMA_PARTITION=yCONFIG_EFI_PARTITION=yCONFIG_SYSV68_PARTITION=yCONFIG_NLS=yCONFIG_NLS_DEFAULT="utf8"CONFIG_NLS_CODEPAGE_437=yCONFIG_NLS_CODEPAGE_737=mCONFIG_NLS_CODEPAGE_775=mCONFIG_NLS_CODEPAGE_850=yCONFIG_NLS_CODEPAGE_852=yCONFIG_NLS_CODEPAGE_855=mCONFIG_NLS_CODEPAGE_857=mCONFIG_NLS_CODEPAGE_860=yCONFIG_NLS_CODEPAGE_861=m
# CONFIG_NLS_CODEPAGE_862 is not setCONFIG_NLS_CODEPAGE_863=mCONFIG_NLS_CODEPAGE_864=yCONFIG_NLS_CODEPAGE_865=mCONFIG_NLS_CODEPAGE_866=yCONFIG_NLS_CODEPAGE_869=mCONFIG_NLS_CODEPAGE_936=yCONFIG_NLS_CODEPAGE_950=mCONFIG_NLS_CODEPAGE_932=yCONFIG_NLS_CODEPAGE_949=mCONFIG_NLS_CODEPAGE_874=m
# CONFIG_NLS_ISO8859_8 is not setCONFIG_NLS_CODEPAGE_1250=mCONFIG_NLS_CODEPAGE_1251=mCONFIG_NLS_ASCII=mCONFIG_NLS_ISO8859_1=yCONFIG_NLS_ISO8859_2=mCONFIG_NLS_ISO8859_3=mCONFIG_NLS_ISO8859_4=mCONFIG_NLS_ISO8859_5=yCONFIG_NLS_ISO8859_6=yCONFIG_NLS_ISO8859_7=mCONFIG_NLS_ISO8859_9=mCONFIG_NLS_ISO8859_13=mCONFIG_NLS_ISO8859_14=mCONFIG_NLS_ISO8859_15=yCONFIG_NLS_KOI8_R=yCONFIG_NLS_KOI8_U=mCONFIG_NLS_UTF8=yCONFIG_DLM=y
# CONFIG_DLM_DEBUG is not set
4,539 lines not shown · raw message
Part of this message is not shown here. View the raw message.
Quoted 15 lines · Ingo Molnar
1415 if (!nr_sectors)
1416 return 0;
1417
1418 /* Test device or partition size, when known. */
1419 maxsector =i_size_read(bio->bi_bdev->bd_inode)>> 9; <==== [ **CRASH** ]
1420 if (maxsector) {
1421sector_tsector =bio->bi_sector;
1422
1423 if (maxsector <nr_sectors|| maxsector -nr_sectors< sector) {
bio->bi_bdevhas become NULL?I do not think the
_cond_resched()was called, judging from stack contents. But we just had an IRQ:
Quoted 7 lines
[<
c1d74030>] ?common_interrupt+0x30/0x40So we might have raced with block IO IRQ queue-completion/submission activites.
But maybe it was a reschedule after all, just the stack does not carry any traces of it anymore. IRQs do not clear ->bi_bdev, right? Unless the bio refcounts are wrong and an IRQ's completion actually frees the bio, right?
Looking at the call chain that's impossible:
generic_make_requestsubmit_biosubmit_bh
submit_bh does:
bio = bio_alloc()
bio_get(bio)
submit_bio(bio)
bio_put(bio)
So that bio is not yet known to anything else than the calling code.
One possibility is that bh->bdev is NULL when submit_bh() is called, which I think is rather unlikely, but can be easily verified with
fs/buffer.c +1 -0
@@ -2887,6 +2887,7 @@ int submit_bh(int rw, struct buffer_head * bh)BUG_ON (!bh->b_end_io);BUG_ON (buffer_delay (bh));BUG_ON (buffer_unwritten (bh)); +BUG_ON (!bh->b_bdev);/* * Only clear out a write error when rewriting
But I rather suspect, that CONFIG_SLUB=y is the thing we need to look at. The lockless fastpath cmpxchg comes to my mind.
Either we generate broken code with that ELAN caused options or that combo triggers some hidden problem in SLUB.
Thanks,
tglx
Quoted 2 lines · Ingo Molnar
I've built a
CONFIG_DEBUG_PAGEALLOC=yandCONFIG_SLUB_DEBUG=ykernel, maybe the crash triggers in a more revealing way.
After an hour of testing it still has not triggered. This could have multiple reasons:
- Maybe i reproduced the original crash by pure luck.
To exclude this i'll re-test once again with the non-debug .config.
- There's some kernel image layout dependency that twiddling these options has hidden.
This is the lowest probability explanation, because the problem triggered for me after tweaking the original .config and using a different toolchain.
- These debug options could have narrowed the race window and could make the race much less likely to occur.
This is the highest probability explanation.
Thanks,
Ingo
Quoted 2 lines · Thomas Gleixner
But I rather suspect, that
CONFIG_SLUB=yis the thing we need to look at. The lockless fastpath cmpxchg comes to my mind.
Hm, and CONFIG_X86_ELAN, as Linus noted, has an impact on the cmpxchg implementation.
Quoted 2 lines
Either we generate broken code with that ELAN caused options or that combo triggers some hidden problem in SLUB.
Note that the crash went away with SLUB_DEBUG=y and PAGEALLOC=y and SLUB_DEBUG=y would certainly narrow any lockless-SLUB race windows.
Thanks,
Ingo
Quoted 7 lines · Ingo Molnar
Quoted 2 lines · Thomas Gleixner
But I rather suspect, that
CONFIG_SLUB=yis the thing we need to look at. The lockless fastpath cmpxchg comes to my mind.Hm, and
CONFIG_X86_ELAN, as Linus noted, has an impact on the cmpxchg implementation.
Walter, could you please test the patch below on a failing kernel?
Note, the patch is actually incorrect for a real Elan box, but should work on Walter's box - and should avoid the cmpxchg8b_emul implementation on that box.
Thanks,
Ingo
arch/x86/Kconfig.cpu +1 -1
@@ -402,7 +402,7 @@ config X86_TSC config X86_CMPXCHG64 def_bool y - depends on X86_PAE || X86_64 || MCORE2 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MATOM + depends on X86_PAE || X86_64 || MCORE2 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MATOM || X86_ELAN # this should be set for all -march=.. options where the compiler # generates cmov.
Quoted 1 line · Ingo Molnar
Walter, could you please test the patch below on a failing kernel?
the other patch to test would be the one below, on a failing kernel. This would check whether compiler flags have an impact on your crash.
Ingo
arch/x86/Makefile_32.cpu +0 -3
@@ -36,9 +36,6 @@ cflags-$(CONFIG_MCORE2) += -march=i686 $(call tune,core2) cflags-$(CONFIG_MATOM) += $(call cc-option,-march=atom,$(call cc-option,-march=core2,-march=i686)) \ $(call cc-option,-mtune=atom,$(call cc-option,-mtune=generic)) -# AMD Elan support -cflags-$(CONFIG_X86_ELAN) += -march=i486 - # Geode GX1 support cflags-$(CONFIG_MGEODEGX1) += -march=pentium-mmx cflags-$(CONFIG_MGEODE_LX) += $(call cc-option,-march=geode,-march=pentium-mmx)
Quoted 3 lines · Ingo Molnar
- Maybe i reproduced the original crash by pure luck.
To exclude this i'll re-test once again with the non-debug .config.
I got a different problem this time around:
Fedora Core release 6 (Zod)
Kernel 2.6.39-rc5-i486-1sys+ on an i686
mercury login: ata1: lost interrupt (Status 0x58)
ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen ata1.00: failed command: WRITE DMA EXT
ata1.00: cmd 35/00:38:56:cf:a5/00:01:05:00:00/e0 tag 0 dma 159744 out
res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata1.00: status: { DRDY }
ata1: soft resetting link
ata1: nv_mode_filter: 0x3f39f&0x3f39f->0x3f39f, BIOS=0x3f000 (0xc60000c0) ACPI=0x3f01f (20:600:0x13) ata1.00: configured for UDMA/100
ata1.00: device reported invalid CHS sector 0
ata1: EH complete
ata1: lost interrupt (Status 0x58)
ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
ata1.00: failed command: WRITE DMA EXT
ata1.00: cmd 35/00:38:56:cf:a5/00:01:05:00:00/e0 tag 0 dma 159744 out
res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata1.00: status: { DRDY }
ata1: soft resetting link
ata1: nv_mode_filter: 0x3f39f&0x3f39f->0x3f39f, BIOS=0x3f000 (0xc60000c0) ACPI=0x3f01f (20:600:0x13) ata1.00: configured for UDMA/100
ata1.00: device reported invalid CHS sector 0
ata1: EH complete
Fedora Core release 6 (Zod)
Kernel 2.6.39-rc5-i486-1sys+ on an i686
mercury login:
Fedora Core release 6 (Zod)
Kernel 2.6.39-rc5-i486-1sys+ on an i686
mercury login: ata1: lost interrupt (Status 0x58)
ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen ata1.00: failed command: WRITE DMA EXT
ata1.00: cmd 35/00:38:56:cf:a5/00:01:05:00:00/e0 tag 0 dma 159744 out
res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata1.00: status: { DRDY }
ata1: soft resetting link
ata1: nv_mode_filter: 0x3f39f&0x3f39f->0x3f39f, BIOS=0x3f000 (0xc60000c0) ACPI=0x3f01f (20:600:0x13) ata1.00: configured for UDMA/100
ata1.00: device reported invalid CHS sector 0
ata1: EH complete
The system is dead (is not performing any IO) after that.
Note that i reported similar problems early during this merge window, in this mail:
[sporadic crash] blk: request botched
That sha1 was 89078d572eb9ce8d4c04264b8b0ba86de0d74c8f - that already had lockless SLUB:
e8c500c2b64b: Merge branch 'slub/lockless' into for-linus
I never managed to pin that down, these IO problems were very sporadic in my test setup and never reproducible, until today.
Ingo
Quoted 11 lines · Ingo Molnar
Note that i reported similar problems early during this merge window, in this mail:
[sporadic crash] blk: request botched
That sha1 was
89078d572eb9ce8d4c04264b8b0ba86de0d74c8f- that already had lockless SLUB:
e8c500c2b64b: Merge branch 'slub/lockless' into for-linusI never managed to pin that down, these IO problems were very sporadic in my test setup and never reproducible, until today.
So i'm doing a testrun now with a failing kernel with the patch below applied, to disable the SLUB lockless code.
Ingo
mm/slub.c +2 -0
@@ -30,6 +30,8 @@#include <trace/events/kmem.h> +#undef CONFIG_CMPXCHG_LOCAL +/* * Lock order: * 1. slab_lock(page)
mm/slub.c line 37
Quoted 13 lines · Ingo Molnar
mm/slub.c +2
-0@@ -30,6 +30,8 @@#include <trace/events/kmem.h> +#undef CONFIG_CMPXCHG_LOCAL +/* * Lock order: * 1. slab_lock(page)
This seems rock solid after half an hour of testing. I'll keep it running longer, i still have no good data for how frequently the crashes are occuring.
Thanks,
Ingo
Quoted 8 lines · Ingo Molnar
Quoted 2 lines · Thomas Gleixner
But I rather suspect, that
CONFIG_SLUB=yis the thing we need to look at. The lockless fastpath cmpxchg comes to my mind.Hm, and
CONFIG_X86_ELAN, as Linus noted, has an impact on the cmpxchg implementation.
Exactly. With ELAN CONFIG_X86_CMPXCHG64 is not set. When I disable ELAN it's set.
Quoted 5 lines
Quoted 2 lines
Either we generate broken code with that ELAN caused options or that combo triggers some hidden problem in SLUB.
Note that the crash went away with SLUB_DEBUG=y and PAGEALLOC=y and SLUB_DEBUG=y would certainly narrow any lockless-SLUB race windows.
Well, it's pretty simple:
CONFIG_X86_CMPXCHG64=y compiles this_cpu_generic_cmpxchg_double() into:
28f7: 89 f9 mov %edi,%ecx
28f9: 8b 3e mov (%esi),%edi
28fb: 89 45 e4 mov %eax,-0x1c(%ebp)
28fe: 89 c3 mov %eax,%ebx
2900: 8b 45 f0 mov -0x10(%ebp),%eax
2903: 64 0f c7 0f cmpxchg8b %fs:(%edi)
2907: 0f 94 c0 sete %al
290a: 84 c0 test %al,%al
290c: 88 45 e4 mov %al,-0x1c(%ebp)
290f: 74 a4 je 28b5 <kmem_cache_alloc+0x29>while CONFIG_X86_CMPXCHG64=n results in:
28b0: 8b 03 mov (%ebx),%eax
28b2: 64 8b 30 mov %fs:(%eax),%esi
28b5: 39 d6 cmp %edx,%esi
28b7: 75 d2 jne 288b <kmem_cache_alloc+0x26>
28b9: 64 8b 50 04 mov %fs:0x4(%eax),%edx
28bd: 39 ca cmp %ecx,%edx
28bf: 75 ca jne 288b <kmem_cache_alloc+0x26>
28c1: 8b 4b 14 mov 0x14(%ebx),%ecx
28c4: 8b 0c 0e mov (%esi,%ecx,1),%ecx
28c7: 64 89 08 mov %ecx,%fs:(%eax)
28ca: 8b 03 mov (%ebx),%eax
28cc: 42 inc %edx
28cd: 64 89 50 04 mov %edx,%fs:0x4(%eax)And that code runs with preemption enabled. So when the task gets preempted _BEFORE_ it has actuallty written back the data, then the race window is wide open.
I'm still trying to understand that macro hell which actually generates that code. I always thought that George Anzingers macro maze was horrible, but that's even worse.
Thanks,
tglx
Quoted 51 lines · Thomas Gleixner
Quoted 8 lines · Ingo Molnar
Quoted 2 lines · Thomas Gleixner
But I rather suspect, that
CONFIG_SLUB=yis the thing we need to look at. The lockless fastpath cmpxchg comes to my mind.Hm, and
CONFIG_X86_ELAN, as Linus noted, has an impact on the cmpxchg implementation.Exactly. With ELAN
CONFIG_X86_CMPXCHG64is not set. When I disable ELAN it's set.Quoted 5 lines
Quoted 2 lines
Either we generate broken code with that ELAN caused options or that combo triggers some hidden problem in SLUB.
Note that the crash went away with SLUB_DEBUG=y and PAGEALLOC=y and SLUB_DEBUG=y would certainly narrow any lockless-SLUB race windows.
Well, it's pretty simple:
CONFIG_X86_CMPXCHG64=ycompilesthis_cpu_generic_cmpxchg_double()into:28f7: 89 f9 mov %edi,%ecx
28f9: 8b 3e mov (%esi),%edi 28fb: 89 45 e4 mov %eax,-0x1c(%ebp) 28fe: 89 c3 mov %eax,%ebx
2900: 8b 45 f0 mov -0x10(%ebp),%eax 2903: 64 0f c7 0f cmpxchg8b %fs:(%edi) 2907: 0f 94 c0 sete %al
290a: 84 c0 test %al,%al
290c: 88 45 e4 mov %al,-0x1c(%ebp) 290f: 74 a4 je 28b5 <kmem_cache_alloc+0x29>while
CONFIG_X86_CMPXCHG64=nresults in:28b0: 8b 03 mov (%ebx),%eax 28b2: 64 8b 30 mov %fs:(%eax),%esi 28b5: 39 d6 cmp %edx,%esi
28b7: 75 d2 jne 288b <kmem_cache_alloc+0x26> 28b9: 64 8b 50 04 mov %fs:0x4(%eax),%edx 28bd: 39 ca cmp %ecx,%edx
28bf: 75 ca jne 288b <kmem_cache_alloc+0x26> 28c1: 8b 4b 14 mov 0x14(%ebx),%ecx 28c4: 8b 0c 0e mov (%esi,%ecx,1),%ecx 28c7: 64 89 08 mov %ecx,%fs:(%eax) 28ca: 8b 03 mov (%ebx),%eax 28cc: 42 inc %edx
28cd: 64 89 50 04 mov %edx,%fs:0x4(%eax)
Quoted 7 lines
And that code runs with preemption enabled. So when the task gets preempted _BEFORE_ it has actuallty written back the data, then the race window is wide open.
I'm still trying to understand that macro hell which actually generates that code. I always thought that George Anzingers macro maze was horrible, but that's even worse.
I'm adding Christoph and Tejun to CC.
Tejun Heo
maintainerHello,
Quoted 33 lines · Pekka Enberg
Quoted 32 lines · Thomas Gleixner
On Wed, 4 May 2011, Ingo Molnar wrote:
Well, it's pretty simple:
CONFIG_X86_CMPXCHG64=ycompilesthis_cpu_generic_cmpxchg_double()into:28f7: 89 f9 mov %edi,%ecx
28f9: 8b 3e mov (%esi),%edi 28fb: 89 45 e4 mov %eax,-0x1c(%ebp) 28fe: 89 c3 mov %eax,%ebx
2900: 8b 45 f0 mov -0x10(%ebp),%eax 2903: 64 0f c7 0f cmpxchg8b %fs:(%edi) 2907: 0f 94 c0 sete %al
290a: 84 c0 test %al,%al
290c: 88 45 e4 mov %al,-0x1c(%ebp) 290f: 74 a4 je 28b5 <kmem_cache_alloc+0x29>while
CONFIG_X86_CMPXCHG64=nresults in:28b0: 8b 03 mov (%ebx),%eax 28b2: 64 8b 30 mov %fs:(%eax),%esi 28b5: 39 d6 cmp %edx,%esi
28b7: 75 d2 jne 288b <kmem_cache_alloc+0x26> 28b9: 64 8b 50 04 mov %fs:0x4(%eax),%edx 28bd: 39 ca cmp %ecx,%edx
28bf: 75 ca jne 288b <kmem_cache_alloc+0x26> 28c1: 8b 4b 14 mov 0x14(%ebx),%ecx 28c4: 8b 0c 0e mov (%esi,%ecx,1),%ecx 28c7: 64 89 08 mov %ecx,%fs:(%eax) 28ca: 8b 03 mov (%ebx),%eax 28cc: 42 inc %edx
28cd: 64 89 50 04 mov %edx,%fs:0x4(%eax)
Quoted 3 lines
Quoted 3 lines
And that code runs with preemption enabled. So when the task gets preempted _BEFORE_ it has actuallty written back the data, then the race window is wide open.
Hmmm... if it's a race caused by preemtion enabled where it shouldn't be, it's most likely the wrong type of this_cpu_cmpxchg_double() being used in SLUB? ie. __this_cpu_cmpxchg_double() where it should have been this_cpu_cmpxchg_double()? Christoph?
Thanks.
Signature · 1 line
tejun
Quoted 5 lines · Ingo Molnar
Quoted 2 lines · Ingo Molnar
* Thomas Gleixner <[email protected]> wrote:
Quoted 7 lines
Quoted 5 lines
Quoted 2 lines
But I rather suspect, that
CONFIG_SLUB=yis the thing we need to look at. The lockless fastpath cmpxchg comes to my mind.Hm, and
CONFIG_X86_ELAN, as Linus noted, has an impact on the cmpxchg implementation.Walter, could you please test the patch below on a failing kernel?
This patch will likely make the bug go away.
Ingo
Quoted 7 lines · Ingo Molnar
Quoted 1 line · Ingo Molnar
Walter, could you please test the patch below on a failing kernel?
the other patch to test would be the one below, on a failing kernel. This would check whether compiler flags have an impact on your crash.
this patch will probably have no effect on the crash.
Thanks,
Ingo
Quoted 11 lines · Ingo Molnar
Quoted 8 lines · Ingo Molnar
mm/slub.c +0
-0@@ -30,6 +30,8 @@#include <trace/events/kmem.h>
Quoted 8 lines
mm/slub.c line 37
Quoted 5 lines
mm/slub.c +2
-0+#undef CONFIG_CMPXCHG_LOCAL +/* * Lock order: * 1. slab_lock(page) This seems rock solid after half an hour of testing. I'll keep it running longer, i still have no good data for how frequently the crashes are occuring.
It's still rock solid after 2 hours: neither crashes nor IO/IRQ timeouts are occuring.
Thanks,
Ingo
Quoted 16 lines · Ingo Molnar
Quoted 7 lines
Quoted 7 lines
index 94d2a33..27bc3be 100644
mm/slub.c +0
-0@@ -30,6 +30,8 @@#include <trace/events/kmem.h> Quoted 8 lines
mm/slub.c line 37
Quoted 5 lines
mm/slub.c +2
-0+#undef CONFIG_CMPXCHG_LOCAL +/* * Lock order: * 1. slab_lock(page) This seems rock solid after half an hour of testing. I'll keep it running longer, i still have no good data for how frequently the crashes are occuring.
Quoted 2 lines
It's still rock solid after 2 hours: neither crashes nor IO/IRQ timeouts are occuring.
So i removed the above patch and rebooted, and within minutes of starting the FS test i got:
skb_over_panic: text:c19fe045 len:98 put:98 head: (null) data: (null) tail:0x62 end:0x0 dev:<NULL>
------------[ cut here ]------------ kernel BUG at net/core/skbuff.c:127! invalid opcode: 0000 [#1] SMP last sysfs file: /sys/devices/pci0000:00/0000:00:0a.0/net/eth0/address Modules linked in:
Pid: 3535, comm: dd Not tainted 2.6.39-rc5-i486-1sys+ #122586 System manufacturer System Product Name/A8N-E
EIP: 0060:[<c1bda60d>] EFLAGS: 00010292 CPU: 1
EIP is at skb_put+0x89/0x92
EAX: 0000006b EBX: 00000000 ECX: 00000046 EDX: 00000000
ESI: c19fe045 EDI: 00000062 EBP: f64cdf20 ESP: f64cdef4
DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
Process dd (pid: 3535, ti=f64cc000 task=f5f4b570 task.ti=f53f4000)
Stack: c2143545 c19fe045 00000062 00000062 00000000 00000000 00000062 00000000 c207d136 f6506000 f408d600 f64cdf4c c19fe045 c19fd92b f64cdf4c 00000040 f6506428 00000000 34020062 f6506000 00000246 c21b799c f64cdf90 c1a004c1 Call Trace: [<c19fe045>] ? nv_rx_process_optimized+0x101/0x1de [<c19fe045>] nv_rx_process_optimized+0x101/0x1de [<c19fd92b>] ? nv_alloc_rx_optimized+0xe/0x18f [<c1a004c1>] nv_napi_poll+0x496/0x4a5 [<c105838c>] ? hrtimer_run_pending+0xe/0xd1 [<c1d734b4>] ? _raw_spin_lock+0x8/0x1e [<c1be1d59>] net_rx_action+0x94/0x1ab [<c1042fcd>] __do_softirq+0x9f/0x14f [<c1042f2e>] ? remote_softirq_receive+0x33/0x33 <IRQ> [<c10431e7>] ? irq_exit+0x3a/0x43 [<c10047ce>] ? do_IRQ+0x8c/0xa0 [<c116366d>] ? __ext3_journal_dirty_metadata+0x1e/0x45 [<c1054f23>] ? wake_up_bit+0x1c/0x20 [<c10ec726>] ? __brelse+0xb/0x36 [<c102ea1c>] ? __wake_up_common+0xe/0x62 [<c1d74eb0>] ? common_interrupt+0x30/0x40 [<c14fb1ea>] ? sha_transform+0x9a/0x1be [<c15ff44e>] ? extract_buf+0x50/0xe3 [<c14fe7ab>] ? __copy_to_user_ll+0xb/0x37 [<c14fe9b5>] ? copy_to_user+0x3e/0x49 [<c15ffd83>] ? extract_entropy_user+0x80/0xe5 [<c15ffdfa>] ? urandom_read+0x12/0x14 [<c10cc888>] ? vfs_read+0x93/0x115 [<c15ffde8>] ? extract_entropy_user+0xe5/0xe5 [<c10cc94c>] ? sys_read+0x42/0x66 [<c1d74903>] ? sysenter_do_call+0x12/0x28 Code: 00 00 89 44 24 14 8b 81 a8 00 00 00 89 44 24 10 89 54 24 0c 8b 41 50 89 44 24 08 89 74 24 04 c7 04 24 45 35 14 c2 e8 fa 09 18 00 <0f> 0b 83 c4 24 5b 5e 5d c3 55 89 e5 57 56 53 83 ec 30 e8 ac a8 EIP: [<c1bda60d>] skb_put+0x89/0x92 SS:ESP 0068:f64cdef4 ---[ end trace 1d38b9741c67ed6b ]---
And in hindsight i have to admit that i saw this in randconfig testing in the past few weeks, i just never managed to reproduce it ...
So yes, the fact that this time it crashed in networking (not in block IO) clearly implicates SLUB as well.
And the trigger condition is the lockless SLUB code on 32-bit, non-64-bit-cmpxchg platforms. I'd not be surprised if some embedded platforms triggered this too.
Ingo
Hi Tejun,
Quoted 4 lines · Tejun Heo
Hmmm... if it's a race caused by preemtion enabled where it shouldn't be, it's most likely the wrong type of
this_cpu_cmpxchg_double()being used in SLUB? ie.__this_cpu_cmpxchg_double()where it should have beenthis_cpu_cmpxchg_double()? Christoph?
There's no __this_cpu_cmpxchg_double() usage in mm/slub.c so I don't think it's that simple.
Quoted 10 lines · Pekka Enberg
Hi Tejun,
Quoted 4 lines · Tejun Heo
Hmmm... if it's a race caused by preemtion enabled where it shouldn't be, it's most likely the wrong type of
this_cpu_cmpxchg_double()being used in SLUB? ie.__this_cpu_cmpxchg_double()where it should have beenthis_cpu_cmpxchg_double()? Christoph?There's no
__this_cpu_cmpxchg_double()usage inmm/slub.cso I don't think it's that simple.
Well, AFAICS the problem is:
earth4:~/tip> grep cmpxchg mm/slub.c
if (unlikely(!this_cpu_cmpxchg_double( if (unlikely(!this_cpu_cmpxchg_double(
Where this macro resolves to:
# define this_cpu_cmpxchg_double_8(pcp1, pcp2, oval1, oval2, nval1, nval2) \
_this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)
where:
#define _this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) \
({ \
int ret__; \
preempt_disable(); \
ret__ = __this_cpu_generic_cmpxchg_double(pcp1, pcp2, \
oval1, oval2, nval1, nval2); \
preempt_enable(); where:
#define __this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) \
({ \
int __ret = 0; \
if (__this_cpu_read(pcp1) == (oval1) && \
__this_cpu_read(pcp2) == (oval2)) { \
__this_cpu_write(pcp1, (nval1)); \
__this_cpu_write(pcp2, (nval2)); \
__ret = 1; \
} \
(__ret); \})
With is both IRQ and SMP unsafe.
Thanks,
Ingo
Quoted 8 lines · Tejun Heo
Quoted 3 lines
Quoted 3 lines
And that code runs with preemption enabled. So when the task gets preempted _BEFORE_ it has actuallty written back the data, then the race window is wide open.
Hmmm... if it's a race caused by preemtion enabled where it shouldn't be, it's most likely the wrong type of
this_cpu_cmpxchg_double()being used in SLUB? ie.__this_cpu_cmpxchg_double()where it should have beenthis_cpu_cmpxchg_double()? Christoph?
No, the problem is that ELAN prevents the cmpxchg8b, but keeps CONFIG_CMPXCHG_LOCAL=y which then results in the unprotected code for the following reason:
this_cpu_cmpxchg_double()
-> __pcpu_double_call_return_bool
-> this_cpu_cmpxchg_double_4
Which on x86 expands to
-> percpu_cmpxchg8b_double() when CONFIG_X86_CMPXCHG64=y
With CONFIG_X86_CMPXCHG64=n it expands to the default:
_this_cpu_generic_cmpxchg_double() in linux/percpu.h
#define _this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) \
({ \
int ret__; \
preempt_disable(); \
ret__ = __this_cpu_generic_cmpxchg_double(pcp1, pcp2, \
oval1, oval2, nval1, nval2); \
preempt_enable(); \
ret__; \})
And:
#define __this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) \
({ \
int __ret = 0; \
if (__this_cpu_read(pcp1) == (oval1) && \
__this_cpu_read(pcp2) == (oval2)) { \
__this_cpu_write(pcp1, (nval1)); \
__this_cpu_write(pcp2, (nval2)); \
__ret = 1; \
} \
(__ret); \})
So now that failing config has CONFIG_PREEMPT=n which makes preempt_disable / enable a nop.
So preemption is not the problem, but what about interrupts and softirqs ?
So the question is whether CMPXCHG_LOCAL for x86 wants to depend on X86_CMPXCHG64.
The other solution is to use irqsafe_cpu_cmpxchg_double() instead of this_cpu_cmpxchg_double() in slub.c.
This will not hurt the X86_CMPXCHG64=y case, but keep the expansion to the above __this_cpu_generic_cmpxchg_double working.
Which makes me even wonder some more whether we need that whole CMPXCHG_LOCAL #ifdeffery in slub.c at all.
Thanks,
tglx
Quoted 46 lines · Ingo Molnar
Quoted 10 lines · Pekka Enberg
Hi Tejun,
Quoted 4 lines · Tejun Heo
Hmmm... if it's a race caused by preemtion enabled where it shouldn't be, it's most likely the wrong type of
this_cpu_cmpxchg_double()being used in SLUB? ie.__this_cpu_cmpxchg_double()where it should have beenthis_cpu_cmpxchg_double()? Christoph?There's no
__this_cpu_cmpxchg_double()usage inmm/slub.cso I don't think it's that simple.Well, AFAICS the problem is:
earth4:~/tip> grep cmpxchg
mm/slub.cif (unlikely(!this_cpu_cmpxchg_double( if (unlikely(!this_cpu_cmpxchg_double(Where this macro resolves to:
# define
this_cpu_cmpxchg_double_8(pcp1, pcp2, oval1, oval2, nval1, nval2)\
_this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)where:
#define
_this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)\({ \ int ret__; \ preempt_disable(); \ ret__ = __this_cpu_generic_cmpxchg_double(pcp1, pcp2, \ oval1, oval2, nval1, nval2); \ preempt_enable();where:
#define
__this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)\({ \ int __ret = 0; \ if (__this_cpu_read(pcp1) == (oval1) && \ __this_cpu_read(pcp2) == (oval2)) { \ __this_cpu_write(pcp1, (nval1)); \ __this_cpu_write(pcp2, (nval2)); \ __ret = 1; \ } \ (__ret); \
Quoted 3 lines
})
With is both IRQ and SMP unsafe.
SMP is not an issue because that's cpu local access, but it's irq/softirq unsafe. See my other mail.
Thanks,
tglx
Tejun Heo
maintainerHello,
Quoted 13 lines · Thomas Gleixner
Quoted 8 lines · Tejun Heo
Quoted 3 lines
Quoted 3 lines
And that code runs with preemption enabled. So when the task gets preempted _BEFORE_ it has actuallty written back the data, then the race window is wide open.
Hmmm... if it's a race caused by preemtion enabled where it shouldn't be, it's most likely the wrong type of
this_cpu_cmpxchg_double()being used in SLUB? ie.__this_cpu_cmpxchg_double()where it should have beenthis_cpu_cmpxchg_double()? Christoph?No, the problem is that ELAN prevents the cmpxchg8b, but keeps
CONFIG_CMPXCHG_LOCAL=ywhich then results in the unprotected code for the following reason:
...
Quoted 5 lines
So the question is whether
CMPXCHG_LOCALfor x86 wants to depend onX86_CMPXCHG64.The other solution is to use
irqsafe_cpu_cmpxchg_double()instead ofthis_cpu_cmpxchg_double()inslub.c.
I think this is the root cause. CMPXCHG_LOCAL is an optimization flag, indicating that the processor provides fast local cmpxchg, it doesn't say anything about local synchronization properties and if the code required irq exclusion, it should have used irqsafe_cpu_cmpxchg_double() whether the processor supports it natively or not, so there's the bug. Pekka, can you please change the offending cmpxchg_double() to irqsafe variant?
As for CMPXCHG_LOCAL being set spuriously, maybe introduce CMPXCHG_DOUBLE_LOCAL? I don't know. It's pretty nasty to implement different high-level code paths depending on CPU features. We can't even determine whether the feature will be actually available at compile time. But, then again, it might incur noticeable slowdown for cases where the generic implementation is used. Has anyone measured the difference against before the whole this_cpu conversion?
Thanks.
Signature · 1 line
tejun
Quoted 2 lines · Thomas Gleixner
Which makes me even wonder some more whether we need that whole
CMPXCHG_LOCAL#ifdeffery inslub.cat all.
I always found that #ifdeffery rather repulsive.
Thanks,
Ingo
Quoted 35 lines · Pekka Enberg
Quoted 35 lines
Well, it's pretty simple:
CONFIG_X86_CMPXCHG64=ycompilesthis_cpu_generic_cmpxchg_double()into:28f7: 89 f9 mov %edi,%ecx
28f9: 8b 3e mov (%esi),%edi 28fb: 89 45 e4 mov %eax,-0x1c(%ebp) 28fe: 89 c3 mov %eax,%ebx
2900: 8b 45 f0 mov -0x10(%ebp),%eax 2903: 64 0f c7 0f cmpxchg8b %fs:(%edi) 2907: 0f 94 c0 sete %al
290a: 84 c0 test %al,%al
290c: 88 45 e4 mov %al,-0x1c(%ebp) 290f: 74 a4 je 28b5 <kmem_cache_alloc+0x29>while
CONFIG_X86_CMPXCHG64=nresults in:28b0: 8b 03 mov (%ebx),%eax 28b2: 64 8b 30 mov %fs:(%eax),%esi 28b5: 39 d6 cmp %edx,%esi
28b7: 75 d2 jne 288b <kmem_cache_alloc+0x26> 28b9: 64 8b 50 04 mov %fs:0x4(%eax),%edx 28bd: 39 ca cmp %ecx,%edx
28bf: 75 ca jne 288b <kmem_cache_alloc+0x26> 28c1: 8b 4b 14 mov 0x14(%ebx),%ecx 28c4: 8b 0c 0e mov (%esi,%ecx,1),%ecx 28c7: 64 89 08 mov %ecx,%fs:(%eax) 28ca: 8b 03 mov (%ebx),%eax 28cc: 42 inc %edx
28cd: 64 89 50 04 mov %edx,%fs:0x4(%eax)And that code runs with preemption enabled. So when the task gets preempted _BEFORE_ it has actuallty written back the data, then the race window is wide open.
Quoted 5 lines
Quoted 3 lines
I'm still trying to understand that macro hell which actually generates that code. I always thought that George Anzingers macro maze was horrible, but that's even worse.
I'm adding Christoph and Tejun to CC.
The above should not happen. If a kernel config indicates that there is no cmpxchg16b/cmpxchg8b available then we need to not compile the path that uses cmpxchg8b/cmpxchg16b. Guess we need CMPXCHG_DOUBLE_LOCAL or so.
Tejun Heo
maintainerHello, Christoph.
Quoted 3 lines · Christoph Lameter
The above should not happen. If a kernel config indicates that there is no cmpxchg16b/cmpxchg8b available then we need to not compile the path that uses cmpxchg8b/cmpxchg16b. Guess we need
CMPXCHG_DOUBLE_LOCALor so.
But regardless of that, if the code requires irq safety it should be using irqsafe_* operations. CMPXCHG_LOCAL is an optimization hint and doesn't necessarily imply stronger synchronization guarantees. In addition, there's no downside to using irqsafe_* variant when CPU actually supports cmpxchg[_double]. So, let's first fix that and think about CMPXCHG[_DOUBLE]_LOCAL or whatnot later.
Thank you.
Signature · 1 line
tejun
Quoted 23 lines · Tejun Heo
Hello,
Quoted 13 lines · Thomas Gleixner
Quoted 8 lines · Tejun Heo
Quoted 3 lines
Quoted 3 lines
And that code runs with preemption enabled. So when the task gets preempted _BEFORE_ it has actuallty written back the data, then the race window is wide open.
Hmmm... if it's a race caused by preemtion enabled where it shouldn't be, it's most likely the wrong type of
this_cpu_cmpxchg_double()being used in SLUB? ie.__this_cpu_cmpxchg_double()where it should have beenthis_cpu_cmpxchg_double()? Christoph?No, the problem is that ELAN prevents the cmpxchg8b, but keeps
CONFIG_CMPXCHG_LOCAL=ywhich then results in the unprotected code for the following reason:...
Quoted 5 lines
So the question is whether
CMPXCHG_LOCALfor x86 wants to depend onX86_CMPXCHG64.The other solution is to use
irqsafe_cpu_cmpxchg_double()instead ofthis_cpu_cmpxchg_double()inslub.c.
Quoted 7 lines
I think this is the root cause.
CMPXCHG_LOCALis an optimization flag, indicating that the processor provides fast local cmpxchg, it doesn't say anything about local synchronization properties and if the code required irq exclusion, it should have usedirqsafe_cpu_cmpxchg_double()whether the processor supports it natively or not, so there's the bug. Pekka, can you please change the offendingcmpxchg_double()to irqsafe variant?
Patch below. Ingo, can you test that please ?
Quoted 2 lines
As for
CMPXCHG_LOCALbeing set spuriously, maybe introduceCMPXCHG_DOUBLE_LOCAL? I don't know. It's pretty nasty to implement
Oh no, please not another CONFIG_WTF and more #ifdeffery.
Quoted 3 lines
different high-level code paths depending on CPU features. We can't even determine whether the feature will be actually available at compile time. But, then again, it might incur noticeable slowdown for
Right, and the x86 implementation should not do
#ifdef CONFIG_X86_CMPXCHG64
#define percpu_cmpxchg8b_double(pcp1, o1, o2, n1, n2) #endif
And let the code fallback to the generic variant. It should have an #else path using the the cmpxchg64_local() implementation which has alternatives for runtime selection of cmpxchg8b or the cli protected emulation.
Quoted 2 lines
cases where the generic implementation is used. Has anyone measured the difference against before the whole
this_cpuconversion?
Yes, that really wants to be done. The whole CMPXCHG_LOCAL ifdeffery should have been avoided in the first place. this_cpu_cmpxchg can really be implemented with preempt_enable/disable and the irqsafe variant in any case.
Thanks,
tglx
--------->
Subject: slub-hmm.patch
From: Thomas Gleixner <[email protected]>
Date: Wed, 04 May 2011 15:38:19 +0200
--- include/linux/percpu.h | 2 +- mm/slub.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
include/linux/percpu.h +1 -1
@@ -948,7 +948,7 @@ do { \ irqsafe_generic_cpu_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)# endif # define irqsafe_cpu_cmpxchg_double (pcp1, pcp2, oval1, oval2, nval1, nval2) \ - __pcpu_double_call_return_int(irqsafe_cpu_cmpxchg_double_, (pcp1), (pcp2), (oval1), (oval2), (nval1), (nval2)) + __pcpu_double_call_return_bool(irqsafe_cpu_cmpxchg_double_, (pcp1), (pcp2), (oval1), (oval2), (nval1), (nval2))#endif #endif /* __LINUX_PERCPU_H */
mm/slub.c +2 -2
@@ -1940,7 +1940,7 @@ redo:* Since this is without lock semantics the protection is only against * code executing on this cpu *not* from access by other cpus. */ -if (unlikely (!this_cpu_cmpxchg_double ( +if (unlikely (!irqsafe_cpu_cmpxchg_double ( s->cpu_slab->freelist, s->cpu_slab->tid, object, tid,get_freepointer (s, object),next_tid (tid)))) {
@@ -2145,7 +2145,7 @@ redo:set_freepointer (s, object, c->freelist);#ifdef CONFIG_CMPXCHG_LOCAL -if (unlikely (!this_cpu_cmpxchg_double ( +if (unlikely (!irqsafe_cpu_cmpxchg_double ( s->cpu_slab->freelist, s->cpu_slab->tid, c->freelist, tid, object,next_tid (tid)))) {
Quoted 1 line · Thomas Gleixner
Patch below. Ingo, can you test that please ?
Sure - test underway.
Thanks,
Ingo
include/linux/percpu.h do { \ · line 954
Quoted 13 lines · Thomas Gleixner
Index:
linux-2.6/include/linux/percpu.h
===================================================================include/linux/percpu.h +1
-1@@ -948,7 +948,7 @@ do { \ irqsafe_generic_cpu_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)# endif # define irqsafe_cpu_cmpxchg_double (pcp1, pcp2, oval1, oval2, nval1, nval2) \ - __pcpu_double_call_return_int(irqsafe_cpu_cmpxchg_double_, (pcp1), (pcp2), (oval1), (oval2), (nval1), (nval2)) + __pcpu_double_call_return_bool(irqsafe_cpu_cmpxchg_double_, (pcp1), (pcp2), (oval1), (oval2), (nval1), (nval2))#endif #endif /* __LINUX_PERCPU_H */
Looking at the same thing here testing a similar patch. This should go separately as a bug fix.
Quoted 15 lines
Index:
linux-2.6/mm/slub.c
===================================================================mm/slub.c +1
-1@@ -1940,7 +1940,7 @@ redo:* Since this is without lock semantics the protection is only against * code executing on this cpu *not* from access by other cpus. */ -if (unlikely (!this_cpu_cmpxchg_double ( +if (unlikely (!irqsafe_cpu_cmpxchg_double ( s->cpu_slab->freelist, s->cpu_slab->tid, object, tid,get_freepointer (s, object),next_tid (tid)))) {
mm/slub.c redo: · line 2151
Quoted 8 lines
mm/slub.c +1
-1@@ -2145,7 +2145,7 @@ redo:set_freepointer (s, object, c->freelist);#ifdef CONFIG_CMPXCHG_LOCAL -if (unlikely (!this_cpu_cmpxchg_double ( +if (unlikely (!irqsafe_cpu_cmpxchg_double ( s->cpu_slab->freelist, s->cpu_slab->tid, c->freelist, tid, object,next_tid (tid)))) {
Ok as a basic fix since it does not change the code generated for the common x86 and other.
My version also takes out the CONFIG_CMPXCHG_LOCAL.
We could make the above two patches and then make the CONFIG_CMPXCHG_LOCAL removal a separate one (since it requires some benchmarking).
Quoted 2 lines · Thomas Gleixner
So the question is whether
CMPXCHG_LOCALfor x86 wants to depend onX86_CMPXCHG64.
Right.
Quoted 8 lines
The other solution is to use
irqsafe_cpu_cmpxchg_double()instead ofthis_cpu_cmpxchg_double()inslub.c.This will not hurt the X86_CMPXCHG64=y case, but keep the expansion to the above
__this_cpu_generic_cmpxchg_doubleworking.Which makes me even wonder some more whether we need that whole
CMPXCHG_LOCAL#ifdeffery inslub.cat all.
Hmmm... I have not measured it but it would certainly be nice to get rid of it. The period of irq disablement is then reduced in the fastpath too. However, we need to do additional tid checking (which should be fast).
The following patch does that and runs here in kvm
--- include/linux/percpu.h | 2 - include/linux/slub_def.h | 2 - mm/slub.c | 60 +---------------------------------------------- 3 files changed, 3 insertions(+), 61 deletions(-)
include/linux/percpu.h +1 -1
@@ -948,7 +948,7 @@ do { \ irqsafe_generic_cpu_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)# endif # define irqsafe_cpu_cmpxchg_double (pcp1, pcp2, oval1, oval2, nval1, nval2) \ - __pcpu_double_call_return_int(irqsafe_cpu_cmpxchg_double_, (pcp1), (pcp2), (oval1), (oval2), (nval1), (nval2)) + __pcpu_double_call_return_bool(irqsafe_cpu_cmpxchg_double_, (pcp1), (pcp2), (oval1), (oval2), (nval1), (nval2))#endif #endif /* __LINUX_PERCPU_H */
include/linux/slub_def.h +0 -2
@@ -37,9 +37,7 @@ enum stat_item {struct kmem_cache_cpu {void **freelist;/* Pointer to next available object */ -#ifdef CONFIG_CMPXCHG_LOCAL unsigned long tid;/* Globally unique transaction id */ -#endif struct page *page;/* The slab from which we are allocating */ int node;/* The node of the page (or -1 for debug) */ #ifdef CONFIG_SLUB_STATS
mm/slub.c +2 -58
213 lines not on this page · raw message
Quoted 4 lines · Christoph Lameter
The above should not happen. If a kernel config indicates that there is no cmpxchg16b/cmpxchg8b available then we need to not compile the path that uses cmpxchg8b/cmpxchg16b. Guess we need
CMPXCHG_DOUBLE_LOCALor so.
Oh no, you have perfectly fine replacements for that in percpu.h with irqsafe and preempt safe versions. So why adding another CONFIG from hell which creates even more ifdef mess ?
The whole CONFIG_CMPXCHG_LOCAL ifdeffery in slub.c is horrible and I think it's not necessary at all for two reasons:
1) irqsafe_cpu_cmpxchg() can be emulated cheap and we still have the advantatage of shorter irq disabled sections. And the difference between the current CONFIG_CMPXCHG_LOCAL=n and using the emulation macros with the short irqsave/restore around the access is probably not measurable at all.
2) that would actually test the code under all possible combinations and not splitting the tester base into x86 and !x86. So that bug would have been avoided in the first place.
Thanks,
tglx
Tejun Heo
maintainerHello,
Quoted 7 lines · Thomas Gleixner
Quoted 2 lines
cases where the generic implementation is used. Has anyone measured the difference against before the whole
this_cpuconversion?Yes, that really wants to be done. The whole
CMPXCHG_LOCALifdeffery should have been avoided in the first place.this_cpu_cmpxchgcan really be implemented with preempt_enable/disable and the irqsafe variant in any case.
Yeah, slub code looks pretty scary with the #ifdefs. IIUC, the problem was that cmpxchg_double is an optimization for fast path which was already very light weight and an extra locked op or irq on/off would have made considerable difference.
The cmpxchg_double optimization made the fast path go quite faster when CPU supports it but it may as well slow things down considerably if CPU doesn't, due to extra irq on/off's. Anyways, here's hoping that the slow down is acceptable compared to the base code without cmpxchg_double and the ugliness can be removed.
Thanks.
Signature · 1 line
tejun
Quoted 5 lines · Tejun Heo
The
cmpxchg_doubleoptimization made the fast path go quite faster when CPU supports it but it may as well slow things down considerably if CPU doesn't, due to extra irq on/off's. Anyways, here's hoping that the slow down is acceptable compared to the base code withoutcmpxchg_doubleand the ugliness can be removed.
I think we are all in agreement. First path to fix the percpu macros:
Subject: percpu: Fix irqsafe_cpu_cmpxchg_double
The function in the macro was not updated when the function was given a bool return value.
--- include/linux/percpu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/linux/percpu.h +1 -1
@@ -948,7 +948,7 @@ do { \ irqsafe_generic_cpu_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)# endif # define irqsafe_cpu_cmpxchg_double (pcp1, pcp2, oval1, oval2, nval1, nval2) \ - __pcpu_double_call_return_int(irqsafe_cpu_cmpxchg_double_, (pcp1), (pcp2), (oval1), (oval2), (nval1), (nval2)) + __pcpu_double_call_return_bool(irqsafe_cpu_cmpxchg_double_, (pcp1), (pcp2), (oval1), (oval2), (nval1), (nval2))#endif #endif /* __LINUX_PERCPU_H */
PATCH 1/1 slub: Fix the lockless code on 32-bit platforms with no 64-bit cmpxchg
In reply to Ingo MolnarQuoted 6 lines · Ingo Molnar
Quoted 1 line · Thomas Gleixner
Patch below. Ingo, can you test that please ?
Sure - test underway.
Ok, the patch below is looking really good - the test would have crashed on the bad kernel. I think we can consider the regression fixed:
I'll keep it running some more to make really sure it's fixed, plus it would be nice if Walter tested your fix as well.
Thanks,
Ingo
----------------->
Quoted 1 line
From
c22bd309573330e33a77c329405d9473fc14f1cbMon Sep 17 00:00:00 2001
From: Thomas Gleixner <[email protected]>
Date: Wed, 4 May 2011 15:38:19 +0200
Subject: [PATCH] slub: Fix the lockless code on 32-bit platforms with no 64-bit cmpxchg
--- include/linux/percpu.h | 2 +- mm/slub.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
include/linux/percpu.h +1 -1
@@ -948,7 +948,7 @@ do { \ irqsafe_generic_cpu_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)# endif # define irqsafe_cpu_cmpxchg_double (pcp1, pcp2, oval1, oval2, nval1, nval2) \ - __pcpu_double_call_return_int(irqsafe_cpu_cmpxchg_double_, (pcp1), (pcp2), (oval1), (oval2), (nval1), (nval2)) + __pcpu_double_call_return_bool(irqsafe_cpu_cmpxchg_double_, (pcp1), (pcp2), (oval1), (oval2), (nval1), (nval2))#endif #endif /* __LINUX_PERCPU_H */
mm/slub.c +2 -2
@@ -1940,7 +1940,7 @@ redo:* Since this is without lock semantics the protection is only against * code executing on this cpu *not* from access by other cpus. */ -if (unlikely (!this_cpu_cmpxchg_double ( +if (unlikely (!irqsafe_cpu_cmpxchg_double ( s->cpu_slab->freelist, s->cpu_slab->tid, object, tid,get_freepointer (s, object),next_tid (tid)))) {
@@ -2145,7 +2145,7 @@ redo:set_freepointer (s, object, c->freelist);#ifdef CONFIG_CMPXCHG_LOCAL -if (unlikely (!this_cpu_cmpxchg_double ( +if (unlikely (!irqsafe_cpu_cmpxchg_double ( s->cpu_slab->freelist, s->cpu_slab->tid, c->freelist, tid, object,next_tid (tid)))) {
Re: [PATCH] slub: Fix the lockless code on 32-bit platforms with no 64-bit cmpxchg
Quoted 7 lines · Ingo Molnar
Ok, the patch below is looking really good - the test would have crashed on the bad kernel. I think we can consider the regression fixed:
Acked-and-tested-by Ingo Molnar <[email protected]>I'll keep it running some more to make really sure it's fixed, plus it would be nice if Walter tested your fix as well.
Looks good and is exactly what I have here.
Quoted 11 lines · Tejun Heo
Hello,
Quoted 7 lines · Thomas Gleixner
Quoted 2 lines
cases where the generic implementation is used. Has anyone measured the difference against before the whole
this_cpuconversion?Yes, that really wants to be done. The whole
CMPXCHG_LOCALifdeffery should have been avoided in the first place.this_cpu_cmpxchgcan really be implemented with preempt_enable/disable and the irqsafe variant in any case.
Quoted 8 lines
Yeah, slub code looks pretty scary with the #ifdefs. IIUC, the problem was that
cmpxchg_doubleis an optimization for fast path which was already very light weight and an extra locked op or irq on/off would have made considerable difference.The
cmpxchg_doubleoptimization made the fast path go quite faster when CPU supports it but it may as well slow things down considerably if CPU doesn't, due to extra irq on/off's. Anyways, here's hoping
Not really.
CMPXCHG_LOCAL=n
local_irq_save(); handle_everything(); local_irq_restore();
vs.
CMPXCHG_LOCAL=y
do_prep(); local_irq_save(); emulate_cmpxchg(); local_irq_restore(); do_rest();
So you have local irq disable/enable in both cases. So for the case where you don't have a local cmpxchg8b/16b available it's not worse versus irq disable/enable than now. It just has the possible repeat case when stuff changed between the prep and the actual cmpxchg, which is the same problem when cmpxchg8b/16 is available.
Thanks,
tglx
Quoted 5 lines
So you have local irq disable/enable in both cases. So for the case where you don't have a local cmpxchg8b/16b available it's not worse versus irq disable/enable than now. It just has the possible repeat case when stuff changed between the prep and the actual cmpxchg, which is the same problem when cmpxchg8b/16 is available.
Right there is only the tid management that is added. Hope I am fast enough to at least get one patch in (not very well tested):
Subject: slub: Remove CONFIG_CMPXCHG_LOCAL ifdeffery
Remove the #ifdefs. This means that the irqsafe_cpu_cmpxchg_double() is used everywhere.
There may be performance implications since:
A. We now have to manage a transaction ID for all arches
B. The interrupt holdoff for arches not supporting CONFIG_CMPXCHG_LOCAL is reduced to a very short irqoff section.
There are no multiple irqoff/irqon sequences as a result of this change. Even in the fallback case we only have to do one disable and enable like before.
--- include/linux/slub_def.h | 2 - mm/slub.c | 56 ----------------------------------------------- 2 files changed, 58 deletions(-)
include/linux/slub_def.h +0 -2
@@ -37,9 +37,7 @@ enum stat_item {struct kmem_cache_cpu {void **freelist;/* Pointer to next available object */ -#ifdef CONFIG_CMPXCHG_LOCAL unsigned long tid;/* Globally unique transaction id */ -#endif struct page *page;/* The slab from which we are allocating */ int node;/* The node of the page (or -1 for debug) */ #ifdef CONFIG_SLUB_STATS
mm/slub.c +0 -56
203 lines not on this page · raw message
Quoted 3 lines · Christoph Lameter
Right there is only the tid management that is added. Hope I am fast enough to at least get one patch in (not very well tested):
So the thing that worries me about this is non-x86 architectures.
Have we verified that the generic routines are ok for all architectures? Has somebody checked the memory barriers in particular? Things that work on x86 may not work on non-x86. Everything should be per-cpu _except_ for the initialization, I think, but that should be double-checked.
I guess the initialization happens so early that we don't really need to worry about it, but I'd still like somebody to really double- and triple-check it for me.
My gut reaction would be: let's do the minimal patch that just fixes things to do irqsafe_cpu_cmpxchg_double() for 2.6.39, and then let's remove the #ifdef'fery in -rc1. Or make _really_ sure that things are ok for platforms that never even triggered the CMPXCHG_LOCAL case before.
Hmm?
Linus
Quoted 8 lines · Christoph Lameter
Quoted 5 lines · Tejun Heo
The
cmpxchg_doubleoptimization made the fast path go quite faster when CPU supports it but it may as well slow things down considerably if CPU doesn't, due to extra irq on/off's. Anyways, here's hoping that the slow down is acceptable compared to the base code withoutcmpxchg_doubleand the ugliness can be removed.
Quoted 8 lines
I think we are all in agreement. First path to fix the percpu macros:
Subject: percpu: Fix
irqsafe_cpu_cmpxchg_doubleThe function in the macro was not updated when the function was given a bool return value.
Signed-off-by Christoph Lameter <[email protected]>
Note, the final commit needs to have a proper Reported-by and explanation about how this was triggered, to fairly credit all the hard work done by Werner ...
Thanks,
Ingo
Quoted 9 lines · Linus Torvalds
Quoted 3 lines · Christoph Lameter
Right there is only the tid management that is added. Hope I am fast enough to at least get one patch in (not very well tested):
So the thing that worries me about this is non-x86 architectures.
Have we verified that the generic routines are ok for all architectures? Has somebody checked the memory barriers in particular?
There are no memory barriers used. The barrier() here is a compiler hint to not keep data across it. This is dealing with concurrency issues on the *same* cpu due to preemption and irqs. It avoids the interrupt disable. There no memory barrier issues for code running on a single cpu. The cpu is always guaranteed to have a consistent view of the data.
There is an additional patchset that also uses a cmpxchg_double for the slowpath. There barrier issues may arise because concurrent access is possible but that is likely to be merged only in 2.6.41. The cmpxchg_double in that case is a locked operation.
Quoted 3 lines
Things that work on x86 may not work on non-x86. Everything should be per-cpu _except_ for the initialization, I think, but that should be double-checked.
The fallback path is using interrupt disable / enable. This must be working on all arches AFAICT.
Quoted 7 lines
My gut reaction would be: let's do the minimal patch that just fixes things to do
irqsafe_cpu_cmpxchg_double()for 2.6.39, and then let's remove the #ifdef'fery in -rc1. Or make _really_ sure that things are ok for platforms that never even triggered theCMPXCHG_LOCALcase before.Hmm?
Ok. Pekka can put that patch in for the next round of merges?
Quoted 3 lines · Christoph Lameter
There are no memory barriers used. The
barrier()here is a compiler hint to not keep data across it.
Go back and read my email, please.
The lack of memory barriers is exactly what I worry about.
Look at the initialization path. The "tid" thing is _not_ purely cpu-local.
Linus
Quoted 9 lines · Christoph Lameter
Subject: slub: Remove
CONFIG_CMPXCHG_LOCALifdefferyRemove the #ifdefs. This means that the
irqsafe_cpu_cmpxchg_double()is used everywhere.There may be performance implications since:
A. We now have to manage a transaction ID for all arches
Quoted 7 lines
B. The interrupt holdoff for arches not supporting
CONFIG_CMPXCHG_LOCALis reduced to a very short irqoff section.There are no multiple irqoff/irqon sequences as a result of this change. Even in the fallback case we only have to do one disable and enable like before.
Signed-off-by Christoph Lameter <[email protected]>
This doesn't apply cleanly on top of slab/next which has some of your cleanup patches applied. There's some CONFIG_PREEMPT conflicts so I'd rather you rediffed it yourself.
Pekka
Quoted 9 lines · Christoph Lameter
Quoted 7 lines
My gut reaction would be: let's do the minimal patch that just fixes things to do
irqsafe_cpu_cmpxchg_double()for 2.6.39, and then let's remove the #ifdef'fery in -rc1. Or make _really_ sure that things are ok for platforms that never even triggered theCMPXCHG_LOCALcase before.Hmm?
Ok. Pekka can put that patch in for the next round of merges?
Sure. Who's taking care of the minimal fix for .39?
Quoted 2 lines · Pekka Enberg
Sure. Who's taking care of the minimal fix for .39?
I'll take it. I'm just hoping to also get Werner's tested-by for it.
I'm pretty confident this is it, though, so if I don't get it by the end of the day I'll just apply it regardless with just a reported-by from him.
Linus
Quoted 10 lines · Linus Torvalds
Quoted 3 lines · Christoph Lameter
There are no memory barriers used. The
barrier()here is a compiler hint to not keep data across it.Go back and read my email, please.
The lack of memory barriers is exactly what I worry about.
Look at the initialization path. The "tid" thing is _not_ purely cpu-local.
kmem_cache_create() only hands the pointer to the slab cache back after the percpu values have been initialized. In order to do an allocation one needs to have the pointer to the slab cache.
You think that accesses to struct kmem_cache_cpu by other cpus could require memory barriers? But this is what both SLAB and SLUB already do today even before these modification. Nor do we have memory barriers for the same situation in the page allocator.
Re: [PATCH] slub: Fix the lockless code on 32-bit platforms with no 64-bit cmpxchg
In reply to Ingo MolnarQuoted 9 lines · Ingo Molnar
Quoted 6 lines · Ingo Molnar
Quoted 1 line · Thomas Gleixner
Patch below. Ingo, can you test that please ?
Sure - test underway.
Quoted 7 lines
Ok, the patch below is looking really good - the test would have crashed on the bad kernel. I think we can consider the regression fixed:
Acked-and-tested-by Ingo Molnar <[email protected]>I'll keep it running some more to make really sure it's fixed, plus it would be nice if Walter tested your fix as well.
Stopped the test after 2 hours uptime - i think we can consider the crash fixed.
Thanks,
Ingo
Quoted 3 lines · Linus Torvalds
My gut reaction would be: let's do the minimal patch that just fixes things to do
irqsafe_cpu_cmpxchg_double()for 2.6.39, and then let's remove the #ifdef'fery in -rc1. [...]
Looks like the sanest option IMHO, -rc7 is pretty late for anything than a few-liner patch.
Quoted 2 lines
[...] Or make _really_ sure that things are ok for platforms that never even triggered the
CMPXCHG_LOCALcase before.
Considering that the status quo was !CMPXCHG_LOCAL in v2.6.38 and that lockless SLUB is an x86-only affair right now:
$ git grep CMPXCHG_LOCAL arch/ arch/um/Kconfig.x86:config CMPXCHG_LOCAL arch/x86/Kconfig.cpu:config CMPXCHG_LOCAL
There should be no problem with other architectures, right?
Thanks,
Ingo
Quoted 9 lines · Ingo Molnar
Quoted 3 lines · Linus Torvalds
My gut reaction would be: let's do the minimal patch that just fixes things to do
irqsafe_cpu_cmpxchg_double()for 2.6.39, and then let's remove the #ifdef'fery in -rc1. [...]Looks like the sanest option IMHO, -rc7 is pretty late for anything than a few-liner patch.
Agreed.
Quoted 11 lines
Quoted 2 lines
[...] Or make _really_ sure that things are ok for platforms that never even triggered the
CMPXCHG_LOCALcase before.Considering that the status quo was !CMPXCHG_LOCAL in v2.6.38 and that lockless SLUB is an x86-only affair right now:
$ git grep CMPXCHG_LOCAL arch/ arch/um/Kconfig.x86:config CMPXCHG_LOCAL arch/x86/Kconfig.cpu:config CMPXCHG_LOCALThere should be no problem with other architectures, right?
No, they use the local_irq disabled path which is pretty much the same as in 38.
Thanks,
tglx
Quoted 6 lines · Linus Torvalds
I'll take it. I'm just hoping to also get Werner's tested-by for it.
I'm pretty confident this is it, though, so if I don't get it by the end of the day I'll just apply it regardless with just a reported-by from him.
So I'm still waiting for the tested-by, but in the meantime I wrote a changelog. And part of that changelog reads:
[ Btw, that whole "generic code defaults to no protection" design just
sounds stupid - if the code needs no protection, there is no reason to use "cmpxchg_double" to begin with. So we should probably just remove
the unprotected version entirely as pointless. - Linus ]
which really sums up the whole thing.
The current "this_cpu_cmpxchg_double()" implementation is just incredibly idiotic. There is absolutely _no_ point to having that function at all. Why does it exist?
I can kind of see the point of the "preempt" version, although I'm not entirely convinced of that either. But the notion of having a "cmpxchg" function that isn't atomic even on a single CPU just makes me go "f*ck that, whoever wrote that is just a moron".
If the function doesn't need atomicity, you're really better off just writing it out. It's going to be faster on pretty much all architectures using just regular load/store instructions.
Linus
Quoted 8 lines · Linus Torvalds
So I'm still waiting for the tested-by, but in the meantime I wrote a changelog. And part of that changelog reads:
[ Btw, that whole "generic code defaults to no protection" design just
sounds stupid - if the code needs no protection, there is no reason to use "cmpxchg_double" to begin with. So we should probably just remove
the unprotected version entirely as pointless. - Linus ]
The unprotected version is the __this_cpu_cmpxchg_double? That currently has no user and could be removed. But all other functions also have __ variants so it was put there for symmetries sake.
Quoted 5 lines
which really sums up the whole thing.
The current "
this_cpu_cmpxchg_double()" implementation is just incredibly idiotic. There is absolutely _no_ point to having that function at all. Why does it exist?
this_cpu_cmpxchg_double() affords protection against preemption but not irqs. In the allocator case we have to deal with interrupts so its not useful there. Other code that can guarantee that nothing runs from irq context can use this function and then the fallback handling on other arches can avoid disabling and enabling interrupts which is required by irqsafe_cpu_cmpxchg_double().
Quoted 8 lines
I can kind of see the point of the "preempt" version, although I'm not entirely convinced of that either. But the notion of having a "cmpxchg" function that isn't atomic even on a single CPU just makes me go "f*ck that, whoever wrote that is just a moron".
If the function doesn't need atomicity, you're really better off just writing it out. It's going to be faster on pretty much all architectures using just regular load/store instructions.
The unlocked cmpxchg8b/16b is quite fast on x86. The __ function allows the use of cmpxchg8b on x86 and the fallback (and therefore longer) code on other archs.
But I see the point that __this_cpu_cmpxchg double is pretty useless. There is no user and so it could be removed.
Quoted 4 lines · Christoph Lameter
The unprotected version is the
__this_cpu_cmpxchg_double? That currently has no user and could be removed. But all other functions also have __ variants so it was put there for symmetries sake.
No, I'm talking about the regular "this_cpu_cmpxchg_double" with no underscores.
Why the f*!@ does that exist?
Why the f*%^ do you have to write "irqsafe", when the whole concept DOES NOT MAKE SENSE without the "irqsafe"?
Why did we have this bug in the first place, in other words? The whole interface was mis-designed, and pretty much designed to cause bugs.
I think we should remove every single version of "this_cpu_cmpxchg_double" except for two: the per-cpu one and the SMP-safe one.
And the per-cpu one doesn't mention "irqsafe" or "preempt" or anything like that, because the whole function makes no sense except when it is irq-safe and preempt-safe.
So I think the fact that we need to say "irqsafe" is a bug. Plain and simple.
The whole (and ONLY) point of "cmpxchg" is atomicity.
This is not like "add one to something". That's an operation that makes sense outside of atomicity issues. But "cmpxchg" is all about being atomic.
Linus
Quoted 9 lines · Linus Torvalds
Quoted 4 lines · Christoph Lameter
The unprotected version is the
__this_cpu_cmpxchg_double? That currently has no user and could be removed. But all other functions also have __ variants so it was put there for symmetries sake.No, I'm talking about the regular "
this_cpu_cmpxchg_double" with no underscores.Why the f*!@ does that exist?
Because it is useful if the per cpu serialization only requires safety from preemption during the cmpxchg.
Quoted 2 lines
Why the f*%^ do you have to write "irqsafe", when the whole concept DOES NOT MAKE SENSE without the "irqsafe"?
Because that is how the other irq safe this_cpu_xxx functions are named and I tried to keep it consistent.
Quoted 3 lines
I think we should remove every single version of "
this_cpu_cmpxchg_double" except for two: the per-cpu one and the SMP-safe one.
The smp safe one would be cmpxchg_double() then. This is part of a future patchset and would be named like other fully atomic ops. Would not be part of include/linux/percpu.h because it is not a per cpu related function.
Quoted 3 lines
And the per-cpu one doesn't mention "irqsafe" or "preempt" or anything like that, because the whole function makes no sense except when it is irq-safe and preempt-safe.
It does make sense because arches that do not have the hardware capabilities must use fallback implementations that can be faster if f.e. irqs must not be disabled. And this_cpu_xxx ops are usually used in performance critical paths.
Quoted 7 lines
So I think the fact that we need to say "irqsafe" is a bug. Plain and simple.
The whole (and ONLY) point of "cmpxchg" is atomicity.
This is not like "add one to something". That's an operation that makes sense outside of atomicity issues. But "cmpxchg" is all about being atomic.
The naming convention came about from the existing this_cpu_xxx operations (and yes those starting with the problem of the increment). To do it differently now just for this function would make it more difficult to comprehend for someone already familiar with this_cpu operations on per cpu data.
Quoted 3 lines · Christoph Lameter
The naming convention came about from the existing
this_cpu_xxxoperations
You're missing my point.
An "add" operation makes sense even if it isn't atomic, because atomicity isn't a part of the definition of "add".
But cmpxchg DOES NOT MAKE SENSE without atomicity guarantees.
The whole operation is about atomicity.
Having a version that isn't atomic is STUPID. It's misleading. It's _wrong_.
In contrast, having a non-atomic "add" version is understandable.
So when you say "naming convention", you're missing the much bigger naming convention. Namely the "cmpxchg" part!
Linus
Quoted 11 lines · Linus Torvalds
Quoted 3 lines · Christoph Lameter
The naming convention came about from the existing
this_cpu_xxxoperationsYou're missing my point.
An "add" operation makes sense even if it isn't atomic, because atomicity isn't a part of the definition of "add".
But cmpxchg DOES NOT MAKE SENSE without atomicity guarantees.
This is not a real cmpxchg after all. Its not atomic in the sense of other functions. Its only "percpu atomic" if you want it that way. This is *not* a full cmpxchg_double().
Quoted 3 lines
The whole operation is about atomicity.
Having a version that isn't atomic is STUPID. It's misleading. It's _wrong_.
Its "atomic" in the sense that it is an instruction that is either executed or not in total and that fact alone allow the avoiding of synchronization for preemption and interrupts. We just push as much processing as possible into this single instruction and then we dont have to worry about preemption or interrupts while this function is executed by the processor.
Quoted 4 lines
In contrast, having a non-atomic "add" version is understandable.
So when you say "naming convention", you're missing the much bigger naming convention. Namely the "cmpxchg" part!
Well this is not really a true cmpxchg. There is no lock prefix.
The semantics of the this_cpu_xxx functions are not atomic but only per cpu atomic. That per cpu atomicity can require only the exclusion of preemption or the exclusion of interrupts.
In extreme cases we dont care about preemption or interrupts interfering with the operation. We just want to opportunistically take advantage of sophisticated instructions if they are available (f.e. for accurate vm counters). Or we may have some other external means of serialization (like lock or we already disabled preemption). Thats what the __ operations are for.
Maybe I should have pushed the cmpxchg_double() before the this_cpu_cmpxchg to avoid these misunderstandings
Here is the patch for the fullly atomic cmpxchg_double() which will be needed for making the non per cpu specific processing lockless later:
Subject: x86: Add support for cmpxchg_double
A simple implementation that only supports the word size and does not have a fallback mode (would require a spinlock).
And 32 and 64 bit support for cmpxchg_double. cmpxchg double uses the cmpxchg8b or cmpxchg16b instruction on x86 processors to compare and swap 2 machine words. This allows lockless algorithms to move more context information through critical sections.
Set a flag CONFIG_CMPXCHG_DOUBLE to signal the support of that feature during kernel builds.
--- arch/x86/Kconfig.cpu | 3 ++ arch/x86/include/asm/cmpxchg_32.h | 46 ++++++++++++++++++++++++++++++++++++++ arch/x86/include/asm/cmpxchg_64.h | 45 +++++++++++++++++++++++++++++++++++++ arch/x86/include/asm/cpufeature.h | 1 4 files changed, 95 insertions(+)
arch/x86/include/asm/cmpxchg_64.h +45 -0
@@ -151,4 +151,49 @@ extern void __cmpxchg_wrong_size(void);cmpxchg_local ((ptr), (o), (n)); \ }) +#define cmpxchg16b (ptr, o1, o2, n1, n2) \ +({ \ + char __ret; \ + __typeof__(o2) __junk; \ + __typeof__(*(ptr)) __old1 = (o1); \ + __typeof__(o2) __old2 = (o2); \ + __typeof__(*(ptr)) __new1 = (n1); \ + __typeof__(o2) __new2 = (n2); \ + asm volatile(LOCK_PREFIX_HERE "lock; cmpxchg16b (%%rsi);setz %1" \ + : "=d"(__junk), "=a"(__ret) \ + : "S"(ptr), "b"(__new1), "c"(__new2), \ + "a"(__old1), "d"(__old2)); \ + __ret; }) + + +#define cmpxchg16b_local (ptr, o1, o2, n1, n2) \ +({ \ + char __ret; \ + __typeof__(o2) __junk; \ + __typeof__(*(ptr)) __old1 = (o1); \ + __typeof__(o2) __old2 = (o2); \ + __typeof__(*(ptr)) __new1 = (n1); \ + __typeof__(o2) __new2 = (n2); \ + asm volatile("cmpxchg16b (%%rsi)\n\t\tsetz %1\n\t" \ + : "=d"(__junk)_, "=a"(__ret) \ + : "S"((ptr)), "b"(__new1), "c"(__new2), \ + "a"(__old1), "d"(__old2)); \ + __ret; }) + +#define cmpxchg_double (ptr, o1, o2, n1, n2) \ +({ \ + BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ + VM_BUG_ON((unsigned long)(ptr) % 16); \ + cmpxchg16b((ptr), (o1), (o2), (n1), (n2)); \ +}) + +#define cmpxchg_double_local (ptr, o1, o2, n1, n2) \ +({ \ + BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ + VM_BUG_ON((unsigned long)(ptr) % 16); \ + cmpxchg16b_local((ptr), (o1), (o2), (n1), (n2)); \ +}) + +#define system_has_cmpxchg_double () cpu_has_cx16 +#endif /* _ASM_X86_CMPXCHG_64_H */
arch/x86/include/asm/cmpxchg_32.h +46 -0
50 lines not on this page · raw message
arch/x86/Kconfig.cpu +3 -0
@@ -308,6 +308,9 @@ config X86_CMPXCHG config CMPXCHG_LOCAL def_bool X86_64 || (X86_32 && !M386) +config CMPXCHG_DOUBLE + def_bool X86_64 || (X86_32 && !M386) + config X86_L1_CACHE_SHIFT int default "7" if MPENTIUM4 || MPSC
arch/x86/include/asm/cpufeature.h +1 -0
@@ -286,6 +286,7 @@ extern const char * const x86_power_flag#define cpu_has_hypervisor boot_cpu_has(X86_FEATURE_HYPERVISOR)#define cpu_has_pclmulqdq boot_cpu_has(X86_FEATURE_PCLMULQDQ)#define cpu_has_perfctr_core boot_cpu_has(X86_FEATURE_PERFCTR_CORE) +#define cpu_has_cx16 boot_cpu_has(X86_FEATURE_CX16)#if defined(CONFIG_X86_INVLPG ) || defined(CONFIG_X86_64 )# define cpu_has_invlpg 1
Quoted 7 lines · Christoph Lameter
Quoted 1 line · Linus Torvalds
But cmpxchg DOES NOT MAKE SENSE without atomicity guarantees.
This is not a real cmpxchg after all. Its not atomic in the sense of other functions. Its only "percpu atomic" if you want it that way. This is *not* a full
cmpxchg_double().
Calling it a cmpxchg when it doesn't have the primary distinguishing property of a hardware cmpxchg is just loading a bullet in the chamber and inviting kernel hackers to point it at their feet...
Quoted 5 lines · On Wed, 4 May 2011, [email protected] wrote:
Quoted 4 lines · Christoph Lameter
Quoted 1 line · Linus Torvalds
But cmpxchg DOES NOT MAKE SENSE without atomicity guarantees.
Quoted 7 lines
Quoted 3 lines
This is not a real cmpxchg after all. Its not atomic in the sense of other functions. Its only "percpu atomic" if you want it that way. This is *not* a full
cmpxchg_double().Calling it a cmpxchg when it doesn't have the primary distinguishing property of a hardware cmpxchg is just loading a bullet in the chamber and inviting kernel hackers to point it at their feet...
It does have most of the distinguishing characterstics but the lock-prefixless cmpxchg8b/16b (which is quite fast) is used in a unique way here in a percpu fastdpath. Thats why we have the strange naming this_cpu_cmpxchg_double etc.
Quoted 6 lines · Christoph Lameter
Quoted 3 lines
Calling it a cmpxchg when it doesn't have the primary distinguishing property of a hardware cmpxchg is just loading a bullet in the chamber and inviting kernel hackers to point it at their feet...
It does have most of the distinguishing characterstics but the lock-prefixless cmpxchg8b/16b (which is quite fast) [...]
6 cycles for CMPXCHG8B versus 19 cycles for LOCK CMPXCHG8B, on Nehalem.
And note that it's not really true that the LOCK prefix-less CMPXCHG8B is not
atomic: the write is atomic if the target word is naturally aligned, on i586 and upwards ...
So in practice, unless the SLUB variables are misaligned, the lock prefix-less CMPXCHG8B *IS* atomic.
Non-atomicity is a special case of a weird special case.
Quoted 2 lines
[...] is used in a unique way here in a percpu fastdpath. Thats why we have the strange naming
this_cpu_cmpxchg_doubleetc.
Furthermore, we never used cmpxchg in the kernel without expecting atomicity.
Uniquely strange, unintuitive naming == invitation for strange bugs.
And guess what, we had a strange bug here. Can you possibly see any connection?
Thanks,
Ingo
Quoted 3 lines · Christoph Lameter
Maybe I should have pushed the
cmpxchg_double()before thethis_cpu_cmpxchgto avoid these misunderstandings
Christoph, the only mis-understanding is yours.
I understand perfectly that the percpu cmpxchg isn't SMP-atomic. We all know that.
The problem is that cmpxchg *IS*NOT*AN*CMPXCHG*AT*ALL*. Not even on UP.
It's something totally different.
Linus
Quoted 2 lines · Linus Torvalds
The problem is that cmpxchg *IS*NOT*AN*CMPXCHG*AT*ALL*. Not even on UP.
Btw, the really sad thing is that as far as I can tell, the cmpxchg64_local() function that we define actually gets this *right*, with a helper function that actually works (and disables interrupts) and all the alternative_io() stuff to then use the right instruction automatically if the CPU supports it, rather than making it a hardcoded decision.
But we don't use it, because the "percpu_cmpxchg8b_double()" code rolls its own inferior version, and has slightly different semantics (ie the whole "return value success" thing).
So close, but yet so far.
Linus
Quoted 12 lines · Linus Torvalds
Quoted 2 lines · Linus Torvalds
The problem is that cmpxchg *IS*NOT*AN*CMPXCHG*AT*ALL*. Not even on UP.
Btw, the really sad thing is that as far as I can tell, the
cmpxchg64_local()function that we define actually gets this *right*, with a helper function that actually works (and disables interrupts) and all thealternative_io()stuff to then use the right instruction automatically if the CPU supports it, rather than making it a hardcoded decision.
Quoted 3 lines
But we don't use it, because the "
percpu_cmpxchg8b_double()" code rolls its own inferior version, and has slightly different semantics (ie the whole "return value success" thing).
Yeah, I tripped over that as well. And the new shiny extra CONFIG_CMPXCHG_DOUBLE misfeature Christoph nailed together is just ignoring it as well. It's just more useless #ifdef and CONFIG bloat.
That whole this_cpu_* stuff seems to be designed by committee. A quick grep shows that max. 10% of the implemented macro hell is actually used. Can we get rid of all unused ones and bring them back when they are actually required?
Thanks,
tglx
Re: [PATCH] slub: Fix the lockless code on 32-bit platforms with no 64-bit cmpxchg
In reply to Ingo MolnarQuoted 4 lines · Ingo Molnar
Quoted 1 line
From
c22bd309573330e33a77c329405d9473fc14f1cbMon Sep 17 00:00:00 2001From: Thomas Gleixner<[email protected]>
Date: Wed, 4 May 2011 15:38:19 +0200
Subject: [PATCH] slub: Fix the lockless code on 32-bit platforms with no 64-bit cmpxchg
This patch appears to fix the crashes I was seeing on my 32-bit Atom system.
It would crash within 30 seconds of booting every time before this patch...
Thanks,
Ben
Signature · 2 lines
Ben Greear <[email protected]> Candela Technologies Inc http://www.candelatech.com
Re: [PATCH] slub: Fix the lockless code on 32-bit platforms with no 64-bit cmpxchg
Quoted 5 lines · Ben Greear
This patch appears to fix the crashes I was seeing on my 32-bit Atom system.
It would crash within 30 seconds of booting every time before this patch...
Oh, well - I already committed it and pushed out, otherwise I'd have added that piece of information to the commit log.
But it's good to know that others had seen this too, just never realized what was going on.
Btw, that does seem to imply that your kernel config is somewhat odd. We _should_ be using cmpxchg8b natively if you compile for anything newer than PPro, and that includes atom.
Did you perhaps say "compile for Pentium" (which is pretty close to Atom in some respects - but we don't trust that all Pentium-class CPU's have cmpxchg8b, even if the Intel ones all should).
Regardless, it's pushed out and should be in current -git, apart from any possible mirroring delays there may be that may b eholdin git up from actually being visible on the public kernel.org machines yet.
Linus
Re: [PATCH] slub: Fix the lockless code on 32-bit platforms with no 64-bit cmpxchg
Quoted 9 lines · Linus Torvalds
Quoted 5 lines · Ben Greear
This patch appears to fix the crashes I was seeing on my 32-bit Atom system.
It would crash within 30 seconds of booting every time before this patch...
Oh, well - I already committed it and pushed out, otherwise I'd have added that piece of information to the commit log.
No worries...I'm just happy to finally be able to boot .39 :)
Quoted 10 lines
But it's good to know that others had seen this too, just never realized what was going on.
Btw, that does seem to imply that your kernel config is somewhat odd. We _should_ be using cmpxchg8b natively if you compile for anything newer than PPro, and that includes atom.
Did you perhaps say "compile for Pentium" (which is pretty close to Atom in some respects - but we don't trust that all Pentium-class CPU's have cmpxchg8b, even if the Intel ones all should).
Well, yes. I'm compiling for 'M586' it seems, plus SMP, pre-empt, etc.
Maybe it's time to move to a newer processor family!
Thanks,
Ben
Signature · 2 lines
Ben Greear <[email protected]> Candela Technologies Inc http://www.candelatech.com
Just now I compiled 2.6.39-rc6-git1 (including still
the patchs by hand because not yet included), its also OK, good running, without all these problems. :)
Yes, I continue with my everythingyesconfig, which all the time and also now
after this patchs gives good generic kernels for the distro, working good on my
server and on the laptops of the neighbours except that sometimes
(instead of ELAN) I'll make 486 binaries. And now put the package on the mirrors because everything is OK, and I dont need to switch on and off the server so that they can sync, and the users can use the now working packages of 2.6.39-rcX , which have many new drivers and other good improvements.
Like since years, I continue to compile new versions since -rc1 and report problems. But it was very important that Linus take care of these problems now, because nobody else searched for the reasons. These bugs in logfs and in slub.c and percpu.h probably were processor-type / arch independent, and would have given problems for the most users, so that they could not have been ignored.
wl
=======================================================
Quoted 5 lines · On Thu, 5 May 2011 08:02:04 +0200 Ingo Molnar <[email protected]> wrote:
Quoted 1 line · werner
I'll test the patchs with a 486 config, switching off ELAN.
Quoted 9 lines
I think you can skip all those other test suggestions in this thread - as you confirmed in this email the root cause of your crashes has been found.
So the best testing you could do would be for you to resume testing whatever original config you were using on your system, and make sure there's really no crashes left - and report any other regressions you might see.
Thanks,
Ingo
"werner" <[email protected]>
---
Professional hosting for everyone - http://www.host.ru
Tejun Heo
maintainerHey,
Quoted 8 lines · Thomas Gleixner
Yeah, I tripped over that as well. And the new shiny extra
CONFIG_CMPXCHG_DOUBLEmisfeature Christoph nailed together is just ignoring it as well. It's just more useless #ifdef and CONFIG bloat.That whole this_cpu_* stuff seems to be designed by committee. A quick grep shows that max. 10% of the implemented macro hell is actually used. Can we get rid of all unused ones and bring them back when they are actually required?
What happened there was more of lack of design rather than too much design. At first it were a few ops with only two variants - preemption protected default one and __ prefixed unprotected one. Then came the irqsafe ops and then the whole kinda exploded on itself with all the different ops.
Cleaning up percpu accessors has been on my todo list for some time now. The this_cpu_*() thing is still in its infancy and there aren't many users and the existing ones are mostly in the core, so cleaning things up should be relatively easy. Things which I've been considering are...
1. Static and dynamic accessors.
We have two sets of percpu accessors. Originally, one set was for static percpu variables and the other for dynamic ones. Since the percpu allocator reimplementation, there's no distinction between static and dynamic and the new this_cpu_*() functions don't distinguish them. We need to unify the duplicate ones. There's nothing much to decide about this. It just needs to be done.
2. this_cpu_*()
This one is more tricky. General cleanup aside...
this_cpu_*() ops currently come in three flavors and the naming convention is rather confusing. __this_cpu for no protection, this_cpu for preemtion disabled and irqsafe_cpu for irq protected. IIUC it was intended to loosely match the naming convention of spinlocks but I'm not sure whether that's beneficial in this case.
The biggest problem, as shown by this bug, is that it's error-prone. Percpu ops as they currently stand don't have lockdep protection for accessing contexts. There's nothing protecting percpu vars being accessed from wrong contexts. I think adding lockdep protection should be doable and should be done, but it would be much better if it's safer by default.
The problem is aggravated by the fact that, on x86 where most of developement and testing happens, there's no difference between __this_cpu_*(), this_cpu_*() and irqsafe_cpu_*(). They're one and the same, so testing coverage suffers. We can avoid this by adding a debug option which forces the generic versions whether the arch ones are there or not, but it does raise the question - do we really need all these different confusing variants?
For x86, it doesn't matter. There are some corner cases with cmpxchg_[double] but I don't think we would be in any trouble just using the generic ones for them. The problem is with other archs where local atomic ops haven't been or, for most load-store architectures, can't be implemented. We might say "eh... screw them" and let them use the generic ones but the problem is that this_cpu_*() tend to be used in extremely hot paths where extra irq on/off's can show up as significant overhead.
The thing that I want gone the most is the irqsafe_ variant. It would be much nicer/safer if this_cpu_*() is atomic against everything. If the caller is gonna take care of exclusion from the enclosing area (this is a valid use case when there's a series of operations to be done including but not limited to multiple this_cpu ops), it can use __this_cpu_*() ones.
The reason to disable preemtion instead of IRQ is two-fold - First, preemption can be disabled for longer period than IRQ. Second, depending on CPU, toggling preemption is significantly cheaper than toggling preemption. For this_cpu ops, the first one doesn't apply. It's always very short, so the only thing that needs to be considered is the overhead of toggling protection.
So, to avoid suffering performance penalty from this_cpu_*() conversion, architectures can choose one of the followings.
1. Implement arch specific this_cpu_*() ops. This would be the better way but unfortunately many architectures simply can't. :-(
2. Make irq toggling as cheap as preemption toggling. This can be achieved by implementing IRQ masking in software. I played with it a bit on x86 last year. I didn't get to finish it and it would have taken me some time to iron out weird failures but it didn't seem too difficult and as irq on/off is quite expensive on a lot of CPUs, this might bring overall performance benefit.
For many archs, #2 would be the only choice and if we're gonna do that I think it would be best to do it on x86 too. It involves changes to common code too and x86 has the highest test/development coverage.
I don't feel brave enough to remove preemption protected ones without first somehow taking care of non-x86 archs. The preemption disabled ones are used for statistics in net, block, irq and fs and simply switching to irq protected ones is likely to noticeably hurt many non-x86 archs. Maybe the ones which really matter can implement at least _add() and we can get away without doing soft irq masking.
Anyways, that's what I've been thinking. I'll get to it in the next devel cycle or the one after that. What do you guys think about soft irq masking idea?
Thanks.
--
tejun
Quoted 10 lines · Tejun Heo
2. Make irq toggling as cheap as preemption toggling. This can be achieved by implementing IRQ masking in software. I played with it a bit on x86 last year. I didn't get to finish it and it would have taken me some time to iron out weird failures but it didn't seem too difficult and as irq on/off is quite expensive on a lot of CPUs, this might bring overall performance benefit.
For many archs, #2 would be the only choice and if we're gonna do that I think it would be best to do it on x86 too. It involves changes to common code too and x86 has the highest test/development coverage.
We played with this in -rt on and off but note that -rt doesnt do this right now. Interestingly, most of the irq-disable wrappery and state tracking code for that is upstream already, via the lockdep irq state tracking patches. (Surprise! :-)
The disadvantages:
- register pressure increases, the pushf+cli+popf sequence has no register side-effects, while soft flags inevitably disturb register allocations. *possibly* quite low with the modern percpu implementation, but this has to be measured very carefuly, with disassembly.
- icache size increases - the percpu ops are larger than the minimal pushf+cli+popfl sequence. Again, this too has to be measured both via vmlinux size analysis and via perf stat --repeat icache pressure runs.
[ This is also an assymetric cost: it increases the cost of the cache-cold
case, while most of the benefits are in the cache-hot case. ]
- irq replay becomes common and there's extra cost due to that. Also we are not ready to replay some types of irqs (lapic timer), at least with current code. So there's some ongoing maintenance cost there.
The benefits are:
- lockdep is already tracking irqs on/off sections rather carefully, so we know all the places that play with irqs and the ongoing maintenance cost is shared with what we'd have to do with lockdep anyway.
- on Nehalem a "PUSHF; CLI; POPF" sequence is 18 cycles, a soft sequence would be more like 2 cycles. So we win around 15 cycles per sequence in the fast path - minus collateral slowpath cost above ... which are not directly comparable.
- Stock mainline would become a truly hard RT irq handlers kernel which never ever disables hardirqs. Big wow factor and precision guided, laser mounted sharks!
I probably missed a few factors, but these are the main concerns.
My firm judgement: "Dunno".
Thanks,
Ingo
Quoted 11 lines · Tejun Heo
2. Make irq toggling as cheap as preemption toggling. This can be achieved by implementing IRQ masking in software. I played with it a bit on x86 last year. I didn't get to finish it and it would have taken me some time to iron out weird failures but it didn't seem too difficult and as irq on/off is quite expensive on a lot of CPUs, this might bring overall performance benefit.
For many archs, #2 would be the only choice and if we're gonna do that I think it would be best to do it on x86 too. It involves changes to common code too and x86 has the highest test/development coverage.
Quoted 6 lines
I don't feel brave enough to remove preemption protected ones without first somehow taking care of non-x86 archs. The preemption disabled ones are used for statistics in net, block, irq and fs and simply switching to irq protected ones is likely to noticeably hurt many non-x86 archs. Maybe the ones which really matter can implement at least
_add()and we can get away without doing soft irq masking.
There it's fine when we have certain use cases which just need preemption protection, but the function name should be clear about it and we should only have the functions which are actually required instead of every possible flavour of _OP.
Quoted 3 lines
Anyways, that's what I've been thinking. I'll get to it in the next devel cycle or the one after that. What do you guys think about soft irq masking idea?
It's doable, we played around with that in rt already and put it aside again :)
You need to do the check at the vector entry and then reinject the vector on local_irq_enable/restore(), so that's mostly hackery in the ASM entry code which includes to fixup the pushed flags so the reti wont reeneable interrupts.
That's halfways easy to do on x86, not sure about other architectures, and you have to carefully weigh the actual benefit against the overhead in the slow path case plus the inevitable hackery you need in each architecture implementation.
No strong opinion, but definitely worthwhile to toy with it :)
Thanks,
tglx
Quoted 3 lines · Tejun Heo
Anyways, that's what I've been thinking. I'll get to it in the next devel cycle or the one after that. What do you guys think about soft irq masking idea?
Great idea. Would make the whole irq on/off business much cheaper.
Quoted 7 lines · Christoph Lameter
Quoted 3 lines · Tejun Heo
Anyways, that's what I've been thinking. I'll get to it in the next devel cycle or the one after that. What do you guys think about soft irq masking idea?
Great idea. Would make the whole irq on/off business much cheaper.
The tradeoffs are *not at all* clear and the result (on x86) is not 'much cheaper', at all ...
In particular the irq-enable path gets complicated by the need to check the flag and call a hardirq handling function in that case - a far cry from the single-byte POPF instruction. It will be somewhat cheaper cycle-wise - but the code gets bloated, so the instruction cache impact has to be measured carefully. (See my other mail for details.)
There's also the fact that PUSHF+CLI+POPF sequence has been getting cheaper all the time with newer hardware generations. CLI+STI is even cheaper, 10 cycles both on Intel and AMD CPUs. So it's an optimization that might get narrower and narrower with every CPU generation.
Thanks,
Ingo
Quoted 7 lines · On Thu, 5 May 2011 11:54:21 +0200 Tejun Heo <[email protected]> wrote:
Hey,
Quoted 4 lines · Thomas Gleixner
Yeah, I tripped over that as well. And the new shiny extra
CONFIG_CMPXCHG_DOUBLEmisfeature Christoph nailed together is just ignoring it as well. It's just more useless #ifdef and CONFIG bloat.
Quoted 7 lines
Quoted 4 lines
That whole this_cpu_* stuff seems to be designed by committee. A quick grep shows that max. 10% of the implemented macro hell is actually used. Can we get rid of all unused ones and bring them back when they are actually required?
What happened there was more of lack of design rather than too much design.
........
From the sight of an user, not of an programmer, my opinion about more and more config options and the design is:
As the 1st step, for can be compiled generic kernels
at all, the kernel should have (and has) the ability, to discover at run-time , what hardware the individual user has, and to use only the corresponding kernel subroutines. F.ex. if subroutines for ELAN or MOORESTON were compiled also, then the kernel ignore them simply, if on run-time it discovers that the user has a 486 computer.
Then, in a 2nd step considering this, any
configuration of the arch is becoming obsolete and should be reduced so much as possible. It was useful in the time of papertapes and punched cards to can pick out what one need, but nowaday we have enough memory that the kernel can be compiled ALWAYS including everything, and on run-time the kernel discovers and use only what's present.
For the case if users in poorer countries have a 486
with 8 MB storage (long time ago I used Slackware on such computers), one should CAN alternatively choice to compile and deliver also small kernels. But as default - or spoken more generally if is compiled a huge kernel - then at run-time it simply should ignore what's absent and used what's present. This means, in this general case, ANY user configuration of hardware is obsolete, and as default should be compiled everything (and into the kernel, not as module, in-/output devices which nowadays can happen as boot devices inclusive for an installation). One should reduce the configuration to a very few number of basical items - such as, with/without PEA; low-memory system (that parameter is the only what matters for make impossible an huge everythingyes kernel); slow system.
There is a very good analogon to this. Some distros
have a very complicated configurator, difficult for advanced user and impossible to install Linux for beginners. F.ex., SUSE has an elefantous poissen-green installer, with thousands of options and very mis-understandable, in what I (trying to help someone two weeks ago) was unable to create an install/root partition without to be sure not to loose the existing partition. This is a complete misconcept, hinders people to use Linux, put users in risk by a mistake loose his existing partition/files, and should be dumped completely !!! Principally, the installation can be automatical and thus have to be automatical; little adaptions the user can make later in the KDE control center. My distro, intended to be maximal easy, has no interactive installer at all, and produces a very good working system in 99% of the cases, full-automatically. For example, for what any partition configuration ?? The 1:4 LZMA-packed iso, unfold, gives a 20 GB system. Thus, the install program can search alone where to find 20 GB, without any question to the user. It searches on the primary, then on the secondary hard disk for 20GB unpartioned space; if not found, then it resizes and/or moves existing partitions to get 20 GB free, and then install the sistem. If really all disks are full with files, it goes in the rescue system with mc , and the user should delete some videos etc and restart the instellation. Even the keyboard language, system language, user name, internet id/passwords are found and installed automatically - the install program reads them out from any (in 99% existing) pre-existing Windows, Linux or Minix installation on the computer.
Thus, when I read many comments here in the kernel
threads, I feel that the most kernel configs should be removed and the kernel should find out itself at run time what hardware is existing. Also, the functions of things like udev and hal should be automatized. It is a sick concept, that the kernel itself find all hardware, but one need an externel program like hal to interprete the kernel messages and install the hardware, what the kernel can and should do itself. Each kernel version simply should include an updated table, of existing/known hardware and their most adequade Linux drivers, and then, during identifying hardware at boot or hotplug, set up everything to use it.
The kernel is becoming more and more complicated, and
before people loosing themselves in details, one should make it most easy possible, for the users and for the maintainers, and throw out unnecessary and too complicated or misconcepted things. Because at the same time more and more new hardware surges, and also the kernel config becomes more and more big, there is no alternative and should be started most early possible, to automatize and improve the kernel's runtime autoconfig and auto-hardware-managing habilities. And REDUCE THE HUMAN-DEPENDING PRE-CONFIG TO THE MINIMUM POSSIBLE. This satisfies also that Linux is tecnically good, but have to become more easy for the use-by-anybody. This should be considered for the whole politics/direction in what is going the kernel development.
---
Professional hosting for everyone - http://www.host.ru
Quoted 6 lines · werner
As the 1st step, for can be compiled generic kernels at all, the kernel
should have (and has) the ability, to discover at run-time , what hardware the individual user has, and to use only the corresponding kernel subroutines. F.ex. if subroutines for ELAN or MOORESTON were compiled also, then the kernel ignore them simply, if on run-time it discovers that the user has a 486 computer.
Yes indeed the kernel can detect that. And the code has fallback for the case that the processor flags indicate that cmpxchg16b is not supported.
However, in this case the kernel configuration at build time was set in such a way (!CMPXCHG64 support but CMPXCHG_LOCAL) that generic fallback functions were used at compile time instead of the x86 assembly that can do the fallback with run time detection. Thus the code to do the fallback was not compiled in. Frankly, I was not aware that such a case existed where one could disable cmpxchg64 in this way and was expecting that the runtime detection would always be compiled in for the CMPXCHG_LOCAL case.
Quoted 13 lines · On Thu, 5 May 2011 15:09:04 -0500 (CDT) Christoph Lameter <[email protected]> wrote:
Quoted 7 lines · werner
As the 1st step, for can be compiled generic kernels
at all, the kernel
should have (and has) the ability, to discover at run-time , what hardware the individual user has, and to use only the corresponding kernel subroutines. F.ex. if subroutines for ELAN or MOORESTON were compiled also, then the kernel ignore them simply, if on run-time it discovers that the user has a 486 computer.Yes indeed the kernel can detect that. And the code has fallback for the case that the processor flags indicate that cmpxchg16b is not supported.
Quoted 9 lines
However, in this case the kernel configuration at build time was set in such a way (!CMPXCHG64 support but
CMPXCHG_LOCAL) that generic fallback functions were used at compile time instead of the x86 assembly that can do the fallback with run time detection. Thus the code to do the fallback was not compiled in. Frankly, I was not aware that such a case existed where one could disable cmpxchg64 in this way and was expecting that the runtime detection would always be compiled in for theCMPXCHG_LOCALcase.
Thus, things gone wrong because it's only half-consequent. One should compile everything, and at runtime the kernel itself detect the existing hardware and decides/uses just what it need.
My (and many other users) mind on configuration is very simple: I switch everything on, so that the kernel has everything available, and in run-time it uses just what's existing on the individual computer of the user.
Just if there occured an human configuration error, so that something at run-time wasnt available, then one should improve the above explained manner of use, reducing human need/influence, compiling everything, and improving the kernel's runtime detection and use/selection of its adequade modules.
I saw plenty people (specially, beginners) loosing all their files by overformating or repartitioning the harddisk within a too-complicated installer. Many interactive installers are not good understandable. And many simple users don't know nothing about harddisks, partitions, etc. You know all details inside your washmachine, and you need to know it for use it ?? Linux has to work also for stupid people. Thus, the partitioning / formatting process of the installation is a good example what CAN and HAS TO BE full-automatized, in order to reduce human errors. If a typical distro is 5 GB or 20 GB big, then the installer can and has to manage it, silently and alone, to find or desocupy this space (and more if possible) anywhere on a harddisk, silently and by itself, so that it installs problemless for beginners (while 'specialists' before the installation can desocupy a certain space of the harddisk which then the installer will find and use).
90% of the config options, users don't know for what they are. Instead of more and more new config features in, EVERY CONFIG PARAMETER WHAT THE KERNEL CAN DETECT AT RUN TIME (at the beginning of booting) SHOULD BE THROWED OUT. And the kernel should be compiled 'everythingyes' as default. Even then, with all exotic (but nowadays happening) boot-necessary input/output hardware included, my vmlinuz is only 10 MB big. Sufficient memory for run this (together with an initrd for an installer) nowadays should exist on almost all computers. All other, not-boot necessary modules are perhaps 50 MB, and since the Atari time with 20 MB harddisks passed, there is NO REASON FOR COMPILE SMALL THE KERNEL. Even on Android phones, compiling the kernel / modules 50 MB big but using often only a part, dont hurt. But for emergency, instead of completely configless, one could let 2 options for the kernel config: normal, small (below 16 M memory).
Provisorically, one could but one should not include
such a raw-selection menu in the kernel config, because to check and maintain the dependences of their various single config parameters would be big extra work. Instead of this, one should rigorously make more and more config parameters definitively obsolete and reduce them by improving the corresponding runtime ability of the kernel.
---
Professional hosting for everyone - http://www.host.ru
Quoted 10 lines · werner
90% of the config options, users don't know for what they are. Instead of more and more new config features in, EVERY CONFIG PARAMETER WHAT THE KERNEL CAN DETECT AT RUN TIME (at the beginning of booting) SHOULD BE THROWED OUT.
And the kernel should be compiled 'everythingyes' as default. Even then,
with all exotic (but nowadays happening) boot-necessary input/output hardware
included, my vmlinuz is only 10 MB big. Sufficient memory for run this
(together with an initrd for an installer) nowadays should exist on almost all computers. All other, not-boot necessary modules are perhaps 50 MB, and since the Atari time with 20 MB harddisks passed, there is NO REASON FOR COMPILE SMALL THE KERNEL. Even on Android phones, compiling the kernel / modules 50 MB
Quoted 8 lines
big but using often only a part, dont hurt. But for emergency, instead of completely configless, one could let 2 options for the kernel config: normal,
small (below 16 M memory). Provisorically, one could but one should not
include such a raw-selection menu in the kernel config, because to check and maintain the dependences of their various single config parameters would be
big extra work. Instead of this, one should rigorously make more and more
config parameters definitively obsolete and reduce them by improving the corresponding runtime ability of the kernel.
Have a look outside of the x86 and "smartphone brag with your GBs of RAM" world and you'll see that there are
- systems which really care about size reductions which are measured in kilobytes.
- systems where runtime detection is impossible
- systems where runtime detection is complete overkill in various
aspects: boottime, memory footprint ...
And you CANNOT put those requirements under a single CONFIG_VERY_SMALL=y fits it all thing simply because embedded devices have those fundamental different requirements vs. drivers, filesystems ....
Aside of that config options are a pretty useful mechanism to debug problems.
And in the context of that particular case you are barking up the completely wrong tree. The facts that
- slub used the wrong macro
- the CONFIG dependent x86 implementation of that this_cpu_* mess was crap to begin with
are not an argument at all to go and impose a 100MB/50MB/16MB or whatever arbitrary choice you make limit of CONFIG_FITS_IT_ALL_* approach.
That simply does not work.
Thanks,
tglx