All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86: detect stack protector for i386 builds on x86_64
@ 2009-08-29 16:27 Michal Schmidt
  2009-08-30 13:39 ` Américo Wang
                   ` (2 more replies)
  0 siblings, 3 replies; 30+ messages in thread
From: Michal Schmidt @ 2009-08-29 16:27 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Tejun Heo, Jeremy Fitzhardinge, Linux Kernel Mailing List

Stack protector support was not detected when building with ARCH=i386
on x86_64 systems:
arch/x86/Makefile:80: stack protector enabled but no compiler support

The "-m32" argument needs to be passed to the detection script.

Signed-off-by: Michal Schmidt <mschmidt@redhat.com>

--
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 1b68659..5e7db44 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -72,7 +72,7 @@ endif
 
 ifdef CONFIG_CC_STACKPROTECTOR
 	cc_has_sp := $(srctree)/scripts/gcc-x86_$(BITS)-has-stack-protector.sh
-        ifeq ($(shell $(CONFIG_SHELL) $(cc_has_sp) $(CC)),y)
+        ifeq ($(shell $(CONFIG_SHELL) $(cc_has_sp) $(CC) $(biarch)),y)
                 stackp-y := -fstack-protector
                 stackp-$(CONFIG_CC_STACKPROTECTOR_ALL) += -fstack-protector-all
                 KBUILD_CFLAGS += $(stackp-y)

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* Re: [PATCH] x86: detect stack protector for i386 builds on x86_64
  2009-08-29 16:27 [PATCH] x86: detect stack protector for i386 builds on x86_64 Michal Schmidt
@ 2009-08-30 13:39 ` Américo Wang
  2009-08-30 18:43 ` [tip:x86/asm] x86: Detect " tip-bot for Michal Schmidt
  2009-08-31  6:21 ` [PATCH] x86: detect stack protector for i386 builds on x86_64 Tejun Heo
  2 siblings, 0 replies; 30+ messages in thread
From: Américo Wang @ 2009-08-30 13:39 UTC (permalink / raw)
  To: Michal Schmidt
  Cc: Ingo Molnar, Tejun Heo, Jeremy Fitzhardinge, Linux Kernel Mailing List

On Sat, Aug 29, 2009 at 06:27:18PM +0200, Michal Schmidt wrote:
>Stack protector support was not detected when building with ARCH=i386
>on x86_64 systems:
>arch/x86/Makefile:80: stack protector enabled but no compiler support
>
>The "-m32" argument needs to be passed to the detection script.
>
>Signed-off-by: Michal Schmidt <mschmidt@redhat.com>

Looks fine.

Acked-by: WANG Cong <xiyou.wangcong@gmail.com>

>
>--
>diff --git a/arch/x86/Makefile b/arch/x86/Makefile
>index 1b68659..5e7db44 100644
>--- a/arch/x86/Makefile
>+++ b/arch/x86/Makefile
>@@ -72,7 +72,7 @@ endif
> 
> ifdef CONFIG_CC_STACKPROTECTOR
> 	cc_has_sp := $(srctree)/scripts/gcc-x86_$(BITS)-has-stack-protector.sh
>-        ifeq ($(shell $(CONFIG_SHELL) $(cc_has_sp) $(CC)),y)
>+        ifeq ($(shell $(CONFIG_SHELL) $(cc_has_sp) $(CC) $(biarch)),y)
>                 stackp-y := -fstack-protector
>                 stackp-$(CONFIG_CC_STACKPROTECTOR_ALL) += -fstack-protector-all
>                 KBUILD_CFLAGS += $(stackp-y)
>--
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at  http://www.tux.org/lkml/

-- 
Live like a child, think like the god.
 

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [tip:x86/asm] x86: Detect stack protector for i386 builds on x86_64
  2009-08-29 16:27 [PATCH] x86: detect stack protector for i386 builds on x86_64 Michal Schmidt
  2009-08-30 13:39 ` Américo Wang
@ 2009-08-30 18:43 ` tip-bot for Michal Schmidt
  2009-09-01 10:03   ` Ingo Molnar
  2009-08-31  6:21 ` [PATCH] x86: detect stack protector for i386 builds on x86_64 Tejun Heo
  2 siblings, 1 reply; 30+ messages in thread
From: tip-bot for Michal Schmidt @ 2009-08-30 18:43 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, mschmidt, jeremy, arjan, tj, tglx, mingo

Commit-ID:  23386d63bbb3199cf247313ec088878d72debcfd
Gitweb:     http://git.kernel.org/tip/23386d63bbb3199cf247313ec088878d72debcfd
Author:     Michal Schmidt <mschmidt@redhat.com>
AuthorDate: Sat, 29 Aug 2009 18:27:18 +0200
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Sun, 30 Aug 2009 20:39:48 +0200

x86: Detect stack protector for i386 builds on x86_64

Stack protector support was not detected when building with
ARCH=i386 on x86_64 systems:

  arch/x86/Makefile:80: stack protector enabled but no compiler support

The "-m32" argument needs to be passed to the detection script.

Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Arjan van de Ven <arjan@infradead.org>
LKML-Reference: <20090829182718.10f566b1@leela>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
--


---
 arch/x86/Makefile |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 1b68659..5e7db44 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -72,7 +72,7 @@ endif
 
 ifdef CONFIG_CC_STACKPROTECTOR
 	cc_has_sp := $(srctree)/scripts/gcc-x86_$(BITS)-has-stack-protector.sh
-        ifeq ($(shell $(CONFIG_SHELL) $(cc_has_sp) $(CC)),y)
+        ifeq ($(shell $(CONFIG_SHELL) $(cc_has_sp) $(CC) $(biarch)),y)
                 stackp-y := -fstack-protector
                 stackp-$(CONFIG_CC_STACKPROTECTOR_ALL) += -fstack-protector-all
                 KBUILD_CFLAGS += $(stackp-y)

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* Re: [PATCH] x86: detect stack protector for i386 builds on x86_64
  2009-08-29 16:27 [PATCH] x86: detect stack protector for i386 builds on x86_64 Michal Schmidt
  2009-08-30 13:39 ` Américo Wang
  2009-08-30 18:43 ` [tip:x86/asm] x86: Detect " tip-bot for Michal Schmidt
@ 2009-08-31  6:21 ` Tejun Heo
  2 siblings, 0 replies; 30+ messages in thread
From: Tejun Heo @ 2009-08-31  6:21 UTC (permalink / raw)
  To: Michal Schmidt
  Cc: Ingo Molnar, Jeremy Fitzhardinge, Linux Kernel Mailing List

Michal Schmidt wrote:
> Stack protector support was not detected when building with ARCH=i386
> on x86_64 systems:
> arch/x86/Makefile:80: stack protector enabled but no compiler support
> 
> The "-m32" argument needs to be passed to the detection script.
> 
> Signed-off-by: Michal Schmidt <mschmidt@redhat.com>

Acked-by: Tejun Heo <tj@kernel.org>

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [tip:x86/asm] x86: Detect stack protector for i386 builds on x86_64
  2009-08-30 18:43 ` [tip:x86/asm] x86: Detect " tip-bot for Michal Schmidt
@ 2009-09-01 10:03   ` Ingo Molnar
  2009-09-01 11:39     ` [PATCH] kthreads: Fix startup synchronization boot crash Ingo Molnar
  0 siblings, 1 reply; 30+ messages in thread
From: Ingo Molnar @ 2009-09-01 10:03 UTC (permalink / raw)
  To: arjan, jeremy, mschmidt, mingo, hpa, linux-kernel, tj, tglx
  Cc: linux-tip-commits

[-- Attachment #1: Type: text/plain, Size: 1146 bytes --]


* tip-bot for Michal Schmidt <mschmidt@redhat.com> wrote:

> Commit-ID:  23386d63bbb3199cf247313ec088878d72debcfd
> Gitweb:     http://git.kernel.org/tip/23386d63bbb3199cf247313ec088878d72debcfd
> Author:     Michal Schmidt <mschmidt@redhat.com>
> AuthorDate: Sat, 29 Aug 2009 18:27:18 +0200
> Committer:  Ingo Molnar <mingo@elte.hu>
> CommitDate: Sun, 30 Aug 2009 20:39:48 +0200
> 
> x86: Detect stack protector for i386 builds on x86_64

FYI, -tip testing found a nasty bootup crash:

[    0.027010] Checking 'hlt' instruction... OK.
[    0.034023] calling  spawn_ksoftirqd+0x0/0x48 @ 1
[    0.035025] BUG: unable to handle kernel NULL pointer dereference at (null)
[    0.035994] IP: [<c102c79a>] try_to_wake_up+0x2f/0x174
[    0.035994] *pde = 00000000 
[    0.035994] Oops: 0000 [#1] DEBUG_PAGEALLOC
[    0.035994] last sysfs file: 

and i bisected it down to this commit. The crash was probably 
pre-existing - stackprotector was not enabled in this type of 
cross-build i did.

crashlog and config attached.

Note that 32-bit defconfig + CONFIG_STACKPROTECTOR works just fine - 
so it's some other detail that triggers this crash.

	Ingo

[-- Attachment #2: config --]
[-- Type: text/plain, Size: 69206 bytes --]

#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.31-rc8
# Tue Sep  1 11:59:53 2009
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
# CONFIG_X86_64 is not set
CONFIG_X86=y
CONFIG_OUTPUT_FORMAT="elf32-i386"
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
CONFIG_GENERIC_TIME=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_FAST_CMPXCHG_LOCAL=y
CONFIG_MMU=y
CONFIG_ZONE_DMA=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
# CONFIG_GENERIC_TIME_VSYSCALL is not set
CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HAS_DEFAULT_IDLE=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
CONFIG_HAVE_DYNAMIC_PER_CPU_AREA=y
# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
# CONFIG_ZONE_DMA32 is not set
CONFIG_ARCH_POPULATES_NODE_MAP=y
# CONFIG_AUDIT_ARCH is not set
CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_KTIME_SCALAR=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_CONSTRUCTORS=y

#
# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
# CONFIG_KERNEL_GZIP is not set
# CONFIG_KERNEL_BZIP2 is not set
CONFIG_KERNEL_LZMA=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
CONFIG_AUDIT_TREE=y

#
# RCU Subsystem
#
CONFIG_TREE_RCU=y
# CONFIG_TREE_PREEMPT_RCU is not set
CONFIG_RCU_TRACE=y
CONFIG_RCU_FANOUT=32
CONFIG_RCU_FANOUT_EXACT=y
CONFIG_TREE_RCU_TRACE=y
# CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=20
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_GROUP_SCHED=y
# CONFIG_FAIR_GROUP_SCHED is not set
CONFIG_RT_GROUP_SCHED=y
CONFIG_USER_SCHED=y
# CONFIG_CGROUP_SCHED is not set
# CONFIG_CGROUPS is not set
# CONFIG_SYSFS_DEPRECATED_V2 is not set
CONFIG_RELAY=y
CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set
# CONFIG_IPC_NS is not set
# CONFIG_USER_NS is not set
CONFIG_PID_NS=y
# CONFIG_NET_NS is not set
# CONFIG_BLK_DEV_INITRD is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_EMBEDDED=y
# CONFIG_UID16 is not set
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_KALLSYMS_EXTRA_PASS=y
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
# CONFIG_BUG is not set
CONFIG_ELF_CORE=y
CONFIG_PCSPKR_PLATFORM=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
# CONFIG_EPOLL is not set
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
# CONFIG_EVENTFD is not set
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_HAVE_PERF_COUNTERS=y

#
# Performance Counters
#
CONFIG_PERF_COUNTERS=y
CONFIG_EVENT_PROFILE=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PCI_QUIRKS=y
# CONFIG_SLUB_DEBUG is not set
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
CONFIG_PROFILING=y
CONFIG_TRACEPOINTS=y
CONFIG_MARKERS=y
CONFIG_OPROFILE=m
CONFIG_OPROFILE_EVENT_MULTIPLEX=y
CONFIG_HAVE_OPROFILE=y
CONFIG_KPROBES=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_KRETPROBES=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_ATTRS=y
CONFIG_HAVE_DMA_API_DEBUG=y
CONFIG_HAVE_HW_BREAKPOINT=y

#
# GCOV-based kernel profiling
#
# CONFIG_SLOW_WORK is not set
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_BLOCK=y
CONFIG_LBDAF=y
# CONFIG_BLK_DEV_BSG is not set
CONFIG_BLK_DEV_INTEGRITY=y

#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
# CONFIG_IOSCHED_AS is not set
CONFIG_IOSCHED_DEADLINE=m
# CONFIG_IOSCHED_CFQ is not set
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set
CONFIG_DEFAULT_NOOP=y
CONFIG_DEFAULT_IOSCHED="noop"
CONFIG_PREEMPT_NOTIFIERS=y
CONFIG_FREEZER=y

#
# Processor type and features
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
# CONFIG_SMP is not set
CONFIG_SPARSE_IRQ=y
# CONFIG_X86_MPPARSE is not set
# CONFIG_X86_EXTENDED_PLATFORM is not set
CONFIG_SCHED_OMIT_FRAME_POINTER=y
CONFIG_PARAVIRT_GUEST=y
CONFIG_VMI=y
CONFIG_KVM_CLOCK=y
CONFIG_KVM_GUEST=y
# CONFIG_LGUEST_GUEST is not set
CONFIG_PARAVIRT=y
CONFIG_PARAVIRT_CLOCK=y
CONFIG_PARAVIRT_DEBUG=y
# CONFIG_MEMTEST is not set
# CONFIG_M386 is not set
# CONFIG_M486 is not set
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
# CONFIG_M586MMX is not set
# CONFIG_M686 is not set
# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not set
# CONFIG_MPENTIUMM is not set
# CONFIG_MPENTIUM4 is not set
CONFIG_MK6=y
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
# CONFIG_MCRUSOE is not set
# CONFIG_MEFFICEON is not set
# CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP3D is not set
# CONFIG_MGEODEGX1 is not set
# CONFIG_MGEODE_LX is not set
# CONFIG_MCYRIXIII is not set
# CONFIG_MVIAC3_2 is not set
# CONFIG_MVIAC7 is not set
# CONFIG_MPSC is not set
# CONFIG_MCORE2 is not set
# CONFIG_MATOM is not set
# CONFIG_GENERIC_CPU is not set
# CONFIG_X86_GENERIC is not set
CONFIG_X86_CPU=y
CONFIG_X86_L1_CACHE_BYTES=64
CONFIG_X86_INTERNODE_CACHE_BYTES=64
CONFIG_X86_CMPXCHG=y
CONFIG_X86_L1_CACHE_SHIFT=5
CONFIG_X86_XADD=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_X86_ALIGNMENT_16=y
CONFIG_X86_USE_PPRO_CHECKSUM=y
CONFIG_X86_TSC=y
CONFIG_X86_MINIMUM_CPU_FAMILY=4
CONFIG_PROCESSOR_SELECT=y
CONFIG_CPU_SUP_INTEL=y
# CONFIG_CPU_SUP_CYRIX_32 is not set
CONFIG_CPU_SUP_AMD=y
# CONFIG_CPU_SUP_CENTAUR is not set
# CONFIG_CPU_SUP_TRANSMETA_32 is not set
CONFIG_CPU_SUP_UMC_32=y
# CONFIG_HPET_TIMER is not set
# CONFIG_DMI is not set
# CONFIG_IOMMU_HELPER is not set
CONFIG_IOMMU_API=y
CONFIG_NR_CPUS=1
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
CONFIG_X86_UP_APIC=y
# CONFIG_X86_UP_IOAPIC is not set
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
CONFIG_X86_MCE_AMD=y
CONFIG_X86_ANCIENT_MCE=y
CONFIG_X86_MCE_THRESHOLD=y
CONFIG_X86_MCE_INJECT=m
CONFIG_X86_THERMAL_VECTOR=y
# CONFIG_VM86 is not set
# CONFIG_TOSHIBA is not set
CONFIG_I8K=y
CONFIG_X86_REBOOTFIXUPS=y
CONFIG_MICROCODE=y
# CONFIG_MICROCODE_INTEL is not set
# CONFIG_MICROCODE_AMD is not set
CONFIG_MICROCODE_OLD_INTERFACE=y
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
# CONFIG_X86_CPU_DEBUG is not set
# CONFIG_NOHIGHMEM is not set
CONFIG_HIGHMEM4G=y
# CONFIG_HIGHMEM64G is not set
CONFIG_VMSPLIT_3G=y
# CONFIG_VMSPLIT_3G_OPT is not set
# CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_2G_OPT is not set
# CONFIG_VMSPLIT_1G is not set
CONFIG_PAGE_OFFSET=0xC0000000
CONFIG_HIGHMEM=y
# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
CONFIG_ARCH_FLATMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ILLEGAL_POINTER_VALUE=0
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_SPARSEMEM_STATIC=y
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
CONFIG_HAVE_MLOCK=y
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
CONFIG_MMU_NOTIFIER=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
# CONFIG_HIGHPTE is not set
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
# CONFIG_X86_RESERVE_LOW_64K is not set
# CONFIG_MATH_EMULATION is not set
CONFIG_MTRR=y
CONFIG_MTRR_SANITIZER=y
CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
CONFIG_X86_PAT=y
CONFIG_ARCH_USES_PG_UNCACHED=y
# CONFIG_EFI is not set
CONFIG_SECCOMP=y
CONFIG_CC_STACKPROTECTOR_ALL=y
CONFIG_CC_STACKPROTECTOR=y
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000
CONFIG_SCHED_HRTICK=y
# CONFIG_KEXEC is not set
# CONFIG_CRASH_DUMP is not set
CONFIG_PHYSICAL_START=0x1000000
# CONFIG_RELOCATABLE is not set
CONFIG_PHYSICAL_ALIGN=0x1000000
CONFIG_COMPAT_VDSO=y
# CONFIG_CMDLINE_BOOL is not set
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y

#
# Power management and ACPI options
#
CONFIG_PM=y
CONFIG_PM_DEBUG=y
CONFIG_PM_VERBOSE=y
CONFIG_CAN_PM_TRACE=y
CONFIG_PM_TRACE=y
CONFIG_PM_TRACE_RTC=y
CONFIG_PM_SLEEP=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
CONFIG_HIBERNATION_NVS=y
CONFIG_HIBERNATION=y
CONFIG_PM_STD_PARTITION=""
CONFIG_ACPI=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_PROCFS=y
CONFIG_ACPI_PROCFS_POWER=y
CONFIG_ACPI_SYSFS_POWER=y
# CONFIG_ACPI_PROC_EVENT is not set
CONFIG_ACPI_AC=m
# CONFIG_ACPI_BATTERY is not set
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_VIDEO=m
# CONFIG_ACPI_FAN is not set
CONFIG_ACPI_DOCK=y
# CONFIG_ACPI_PROCESSOR is not set
# CONFIG_ACPI_CUSTOM_DSDT is not set
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
# CONFIG_ACPI_PCI_SLOT is not set
# CONFIG_X86_PM_TIMER is not set
# CONFIG_ACPI_CONTAINER is not set
CONFIG_ACPI_SBS=m
CONFIG_X86_APM_BOOT=y
CONFIG_APM=m
# CONFIG_APM_IGNORE_USER_SUSPEND is not set
CONFIG_APM_DO_ENABLE=y
# CONFIG_APM_CPU_IDLE is not set
CONFIG_APM_DISPLAY_BLANK=y
CONFIG_APM_ALLOW_INTS=y

#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_TABLE=y
CONFIG_CPU_FREQ_DEBUG=y
CONFIG_CPU_FREQ_STAT=m
CONFIG_CPU_FREQ_STAT_DETAILS=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
# 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=y
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
CONFIG_CPU_FREQ_GOV_USERSPACE=y
# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y

#
# CPUFreq processor drivers
#
# CONFIG_X86_POWERNOW_K6 is not set
# CONFIG_X86_POWERNOW_K7 is not set
# CONFIG_X86_GX_SUSPMOD is not set
CONFIG_X86_SPEEDSTEP_CENTRINO=y
CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y
# CONFIG_X86_SPEEDSTEP_ICH is not set
CONFIG_X86_SPEEDSTEP_SMI=m
# CONFIG_X86_P4_CLOCKMOD is not set
# CONFIG_X86_CPUFREQ_NFORCE2 is not set
CONFIG_X86_LONGRUN=m
CONFIG_X86_E_POWERSAVER=y

#
# shared options
#
CONFIG_X86_SPEEDSTEP_LIB=m
CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y

#
# Bus options (PCI etc.)
#
CONFIG_PCI=y
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GOMMCONFIG is not set
# CONFIG_PCI_GODIRECT is not set
# CONFIG_PCI_GOOLPC is not set
CONFIG_PCI_GOANY=y
CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y
CONFIG_PCI_OLPC=y
CONFIG_PCI_DOMAINS=y
CONFIG_DMAR=y
CONFIG_DMAR_DEFAULT_ON=y
CONFIG_DMAR_BROKEN_GFX_WA=y
CONFIG_DMAR_FLOPPY_WA=y
CONFIG_PCIEPORTBUS=y
CONFIG_HOTPLUG_PCI_PCIE=m
# CONFIG_PCIEAER is not set
# CONFIG_PCIEASPM is not set
CONFIG_ARCH_SUPPORTS_MSI=y
CONFIG_PCI_MSI=y
CONFIG_PCI_LEGACY=y
CONFIG_PCI_DEBUG=y
CONFIG_PCI_STUB=y
CONFIG_HT_IRQ=y
CONFIG_PCI_IOV=y
CONFIG_ISA_DMA_API=y
CONFIG_ISA=y
# CONFIG_EISA is not set
CONFIG_MCA=y
CONFIG_MCA_LEGACY=y
CONFIG_MCA_PROC_FS=y
CONFIG_SCx200=y
CONFIG_SCx200HR_TIMER=m
CONFIG_OLPC=y
CONFIG_PCCARD=y
CONFIG_PCMCIA_DEBUG=y
CONFIG_PCMCIA=m
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_PCMCIA_IOCTL=y
CONFIG_CARDBUS=y

#
# PC-card bridges
#
CONFIG_YENTA=y
CONFIG_YENTA_O2=y
CONFIG_YENTA_RICOH=y
# CONFIG_YENTA_TI is not set
CONFIG_YENTA_TOSHIBA=y
# CONFIG_PD6729 is not set
# CONFIG_I82092 is not set
# CONFIG_I82365 is not set
# CONFIG_TCIC is not set
CONFIG_PCMCIA_PROBE=y
CONFIG_PCCARD_NONSTATIC=y
CONFIG_HOTPLUG_PCI=m
CONFIG_HOTPLUG_PCI_FAKE=m
# CONFIG_HOTPLUG_PCI_COMPAQ is not set
# CONFIG_HOTPLUG_PCI_IBM is not set
CONFIG_HOTPLUG_PCI_ACPI=m
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
# CONFIG_HOTPLUG_PCI_CPCI is not set
# CONFIG_HOTPLUG_PCI_SHPC is not set

#
# Executable file formats / Emulations
#
CONFIG_BINFMT_ELF=y
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
CONFIG_HAVE_AOUT=y
# CONFIG_BINFMT_AOUT is not set
CONFIG_BINFMT_MISC=y
CONFIG_HAVE_ATOMIC_IOMAP=y
CONFIG_NET=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
CONFIG_XFRM_USER=y
CONFIG_XFRM_SUB_POLICY=y
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_IPCOMP=m
CONFIG_NET_KEY=m
CONFIG_NET_KEY_MIGRATE=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_ASK_IP_FIB_HASH=y
# CONFIG_IP_FIB_TRIE is not set
CONFIG_IP_FIB_HASH=y
# CONFIG_IP_MULTIPLE_TABLES is not set
# CONFIG_IP_ROUTE_MULTIPATH is not set
# CONFIG_IP_ROUTE_VERBOSE is not set
CONFIG_IP_PNP=y
# CONFIG_IP_PNP_DHCP is not set
CONFIG_IP_PNP_BOOTP=y
# CONFIG_IP_PNP_RARP is not set
CONFIG_NET_IPIP=y
CONFIG_NET_IPGRE=y
# CONFIG_NET_IPGRE_BROADCAST is not set
# CONFIG_IP_MROUTE is not set
CONFIG_ARPD=y
# CONFIG_SYN_COOKIES is not set
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
CONFIG_INET_XFRM_TUNNEL=m
CONFIG_INET_TUNNEL=y
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
CONFIG_INET_XFRM_MODE_TUNNEL=y
CONFIG_INET_XFRM_MODE_BEET=m
CONFIG_INET_LRO=y
# CONFIG_INET_DIAG is not set
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=y
CONFIG_TCP_CONG_CUBIC=y
# CONFIG_TCP_CONG_WESTWOOD is not set
CONFIG_TCP_CONG_HTCP=y
# CONFIG_TCP_CONG_HSTCP is not set
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_VEGAS=m
CONFIG_TCP_CONG_SCALABLE=y
CONFIG_TCP_CONG_LP=m
# CONFIG_TCP_CONG_VENO is not set
# CONFIG_TCP_CONG_YEAH is not set
CONFIG_TCP_CONG_ILLINOIS=m
CONFIG_DEFAULT_BIC=y
# CONFIG_DEFAULT_CUBIC is not set
# CONFIG_DEFAULT_HTCP is not set
# CONFIG_DEFAULT_VEGAS is not set
# CONFIG_DEFAULT_WESTWOOD is not set
# CONFIG_DEFAULT_RENO is not set
CONFIG_DEFAULT_TCP_CONG="bic"
CONFIG_TCP_MD5SIG=y
CONFIG_IPV6=m
CONFIG_IPV6_PRIVACY=y
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y
# CONFIG_IPV6_OPTIMISTIC_DAD is not set
CONFIG_INET6_AH=m
# CONFIG_INET6_ESP is not set
# CONFIG_INET6_IPCOMP is not set
CONFIG_IPV6_MIP6=m
# CONFIG_INET6_XFRM_TUNNEL is not set
CONFIG_INET6_TUNNEL=m
CONFIG_INET6_XFRM_MODE_TRANSPORT=m
CONFIG_INET6_XFRM_MODE_TUNNEL=m
CONFIG_INET6_XFRM_MODE_BEET=m
CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
CONFIG_IPV6_SIT=m
CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=m
# CONFIG_IPV6_MULTIPLE_TABLES is not set
# CONFIG_IPV6_MROUTE is not set
# CONFIG_NETLABEL is not set
CONFIG_NETWORK_SECMARK=y
CONFIG_NETFILTER=y
CONFIG_NETFILTER_DEBUG=y
# CONFIG_NETFILTER_ADVANCED is not set

#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_NETLINK=y
CONFIG_NETFILTER_NETLINK_LOG=y
CONFIG_NF_CONNTRACK=y
# CONFIG_NF_CONNTRACK_SECMARK is not set
# CONFIG_NF_CONNTRACK_FTP is not set
# CONFIG_NF_CONNTRACK_IRC is not set
CONFIG_NF_CONNTRACK_SIP=m
CONFIG_NF_CT_NETLINK=m
CONFIG_NETFILTER_XTABLES=y
CONFIG_NETFILTER_XT_TARGET_MARK=y
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
CONFIG_NETFILTER_XT_TARGET_SECMARK=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
# CONFIG_NETFILTER_XT_MATCH_MARK is not set
CONFIG_NETFILTER_XT_MATCH_POLICY=m
CONFIG_NETFILTER_XT_MATCH_STATE=y
CONFIG_IP_VS=m
CONFIG_IP_VS_IPV6=y
CONFIG_IP_VS_DEBUG=y
CONFIG_IP_VS_TAB_BITS=12

#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
# CONFIG_IP_VS_PROTO_UDP is not set
# CONFIG_IP_VS_PROTO_ESP is not set
# CONFIG_IP_VS_PROTO_AH is not set

#
# IPVS scheduler
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
# CONFIG_IP_VS_WLC is not set
CONFIG_IP_VS_LBLC=m
# CONFIG_IP_VS_LBLCR is not set
# CONFIG_IP_VS_DH is not set
CONFIG_IP_VS_SH=m
# CONFIG_IP_VS_SED is not set
CONFIG_IP_VS_NQ=m

#
# IPVS application helper
#
# CONFIG_IP_VS_FTP is not set

#
# IP: Netfilter Configuration
#
# CONFIG_NF_DEFRAG_IPV4 is not set
# CONFIG_NF_CONNTRACK_IPV4 is not set
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_LOG=y
CONFIG_IP_NF_TARGET_ULOG=m
# CONFIG_IP_NF_MANGLE is not set

#
# IPv6: Netfilter Configuration
#
CONFIG_NF_CONNTRACK_IPV6=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
# CONFIG_IP6_NF_TARGET_LOG is not set
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP_DCCP=y

#
# DCCP CCIDs Configuration (EXPERIMENTAL)
#
CONFIG_IP_DCCP_CCID2_DEBUG=y
# CONFIG_IP_DCCP_CCID3 is not set

#
# DCCP Kernel Hacking
#
CONFIG_IP_DCCP_DEBUG=y
CONFIG_NET_DCCPPROBE=y
CONFIG_IP_SCTP=m
CONFIG_SCTP_DBG_MSG=y
CONFIG_SCTP_DBG_OBJCNT=y
# CONFIG_SCTP_HMAC_NONE is not set
CONFIG_SCTP_HMAC_SHA1=y
# CONFIG_SCTP_HMAC_MD5 is not set
CONFIG_TIPC=m
CONFIG_TIPC_ADVANCED=y
CONFIG_TIPC_ZONES=3
CONFIG_TIPC_CLUSTERS=1
CONFIG_TIPC_NODES=255
CONFIG_TIPC_SLAVE_NODES=0
CONFIG_TIPC_PORTS=8191
CONFIG_TIPC_LOG=0
# CONFIG_TIPC_DEBUG is not set
CONFIG_ATM=m
CONFIG_ATM_CLIP=m
CONFIG_ATM_CLIP_NO_ICMP=y
CONFIG_ATM_LANE=m
CONFIG_ATM_MPOA=m
# CONFIG_ATM_BR2684 is not set
# CONFIG_BRIDGE is not set
CONFIG_NET_DSA=y
CONFIG_NET_DSA_TAG_DSA=y
# CONFIG_NET_DSA_TAG_EDSA is not set
# CONFIG_NET_DSA_TAG_TRAILER is not set
CONFIG_NET_DSA_MV88E6XXX=y
# CONFIG_NET_DSA_MV88E6060 is not set
CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y
CONFIG_NET_DSA_MV88E6131=y
# CONFIG_NET_DSA_MV88E6123_61_65 is not set
CONFIG_VLAN_8021Q=m
# CONFIG_VLAN_8021Q_GVRP is not set
# CONFIG_DECNET is not set
CONFIG_LLC=y
CONFIG_LLC2=y
# CONFIG_IPX is not set
CONFIG_ATALK=m
# CONFIG_DEV_APPLETALK is not set
# CONFIG_X25 is not set
CONFIG_LAPB=y
# CONFIG_ECONET is not set
CONFIG_WAN_ROUTER=y
CONFIG_PHONET=y
CONFIG_IEEE802154=y
CONFIG_NET_SCHED=y

#
# Queueing/Scheduling
#
CONFIG_NET_SCH_CBQ=y
CONFIG_NET_SCH_HTB=y
CONFIG_NET_SCH_HFSC=y
# CONFIG_NET_SCH_ATM is not set
CONFIG_NET_SCH_PRIO=y
CONFIG_NET_SCH_MULTIQ=y
CONFIG_NET_SCH_RED=m
# CONFIG_NET_SCH_SFQ is not set
CONFIG_NET_SCH_TEQL=y
CONFIG_NET_SCH_TBF=y
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=y
# CONFIG_NET_SCH_NETEM is not set
CONFIG_NET_SCH_DRR=m

#
# Classification
#
CONFIG_NET_CLS=y
CONFIG_NET_CLS_BASIC=m
CONFIG_NET_CLS_TCINDEX=m
# CONFIG_NET_CLS_ROUTE4 is not set
CONFIG_NET_CLS_FW=y
CONFIG_NET_CLS_U32=m
CONFIG_CLS_U32_PERF=y
CONFIG_CLS_U32_MARK=y
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_FLOW=m
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
# CONFIG_NET_EMATCH_CMP is not set
CONFIG_NET_EMATCH_NBYTE=m
CONFIG_NET_EMATCH_U32=y
CONFIG_NET_EMATCH_META=m
# CONFIG_NET_EMATCH_TEXT is not set
# CONFIG_NET_CLS_ACT is not set
CONFIG_NET_CLS_IND=y
CONFIG_NET_SCH_FIFO=y
CONFIG_DCB=y

#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
CONFIG_NET_TCPPROBE=m
# CONFIG_NET_DROP_MONITOR is not set
# CONFIG_HAMRADIO is not set
# CONFIG_CAN is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
CONFIG_AF_RXRPC=y
CONFIG_AF_RXRPC_DEBUG=y
# CONFIG_RXKAD is not set
# CONFIG_WIRELESS is not set
CONFIG_WIRELESS_EXT=y
CONFIG_LIB80211=y
CONFIG_LIB80211_CRYPT_WEP=m
CONFIG_LIB80211_CRYPT_CCMP=m
CONFIG_LIB80211_CRYPT_TKIP=m
# CONFIG_WIMAX is not set
# CONFIG_RFKILL is not set

#
# Device Drivers
#

#
# Generic Driver Options
#
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
CONFIG_FIRMWARE_IN_KERNEL=y
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_DEBUG_DRIVER is not set
CONFIG_DEBUG_DEVRES=y
# CONFIG_SYS_HYPERVISOR is not set
CONFIG_CONNECTOR=m
# CONFIG_MTD is not set
CONFIG_PARPORT=y
CONFIG_PARPORT_PC=y
CONFIG_PARPORT_PC_FIFO=y
# CONFIG_PARPORT_PC_SUPERIO is not set
CONFIG_PARPORT_PC_PCMCIA=m
# CONFIG_PARPORT_GSC is not set
CONFIG_PARPORT_AX88796=m
# CONFIG_PARPORT_1284 is not set
CONFIG_PARPORT_NOT_PC=y
CONFIG_PNP=y
# CONFIG_PNP_DEBUG_MESSAGES is not set

#
# Protocols
#
CONFIG_ISAPNP=y
CONFIG_PNPBIOS=y
# CONFIG_PNPBIOS_PROC_FS is not set
CONFIG_PNPACPI=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_XD=m
# CONFIG_PARIDE is not set
CONFIG_BLK_CPQ_DA=y
# CONFIG_BLK_CPQ_CISS_DA is not set
CONFIG_BLK_DEV_DAC960=m
CONFIG_BLK_DEV_UMEM=m
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
CONFIG_BLK_DEV_NBD=y
CONFIG_BLK_DEV_SX8=y
CONFIG_BLK_DEV_UB=m
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
# CONFIG_BLK_DEV_XIP is not set
CONFIG_CDROM_PKTCDVD=y
CONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
CONFIG_ATA_OVER_ETH=m
# CONFIG_VIRTIO_BLK is not set
CONFIG_BLK_DEV_HD=y
# CONFIG_MISC_DEVICES is not set
CONFIG_TIFM_CORE=m
CONFIG_CB710_CORE=y
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set

#
# SCSI device support
#
CONFIG_RAID_ATTRS=y
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
# CONFIG_SCSI_TGT is not set
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set
CONFIG_CHR_DEV_OSST=y
CONFIG_BLK_DEV_SR=y
# CONFIG_BLK_DEV_SR_VENDOR is not set
# CONFIG_CHR_DEV_SG is not set
CONFIG_CHR_DEV_SCH=y
CONFIG_SCSI_MULTI_LUN=y
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y
CONFIG_SCSI_WAIT_SCAN=m

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=y
CONFIG_SCSI_FC_ATTRS=y
CONFIG_SCSI_ISCSI_ATTRS=y
CONFIG_SCSI_SAS_ATTRS=y
CONFIG_SCSI_SAS_LIBSAS=y
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
# CONFIG_SCSI_SRP_ATTRS is not set
CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=y
CONFIG_SCSI_CXGB3_ISCSI=m
CONFIG_BLK_DEV_3W_XXXX_RAID=y
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_7000FASST is not set
CONFIG_SCSI_ACARD=y
# CONFIG_SCSI_AHA152X is not set
# CONFIG_SCSI_AHA1542 is not set
CONFIG_SCSI_AACRAID=m
CONFIG_SCSI_AIC7XXX=y
CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
CONFIG_AIC7XXX_RESET_DELAY_MS=5000
# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
CONFIG_AIC7XXX_DEBUG_MASK=0
CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
CONFIG_SCSI_AIC7XXX_OLD=y
CONFIG_SCSI_AIC79XX=y
CONFIG_AIC79XX_CMDS_PER_DEVICE=32
CONFIG_AIC79XX_RESET_DELAY_MS=5000
# CONFIG_AIC79XX_DEBUG_ENABLE is not set
CONFIG_AIC79XX_DEBUG_MASK=0
CONFIG_AIC79XX_REG_PRETTY_PRINT=y
CONFIG_SCSI_AIC94XX=y
CONFIG_AIC94XX_DEBUG=y
CONFIG_SCSI_MVSAS=y
# CONFIG_SCSI_MVSAS_DEBUG is not set
# CONFIG_SCSI_DPT_I2O is not set
CONFIG_SCSI_ADVANSYS=m
CONFIG_SCSI_IN2000=y
CONFIG_SCSI_ARCMSR=y
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
CONFIG_MEGARAID_SAS=y
# CONFIG_SCSI_MPT2SAS is not set
CONFIG_SCSI_HPTIOP=y
CONFIG_SCSI_BUSLOGIC=m
CONFIG_SCSI_FLASHPOINT=y
CONFIG_LIBFC=y
CONFIG_LIBFCOE=y
# CONFIG_FCOE is not set
CONFIG_FCOE_FNIC=y
CONFIG_SCSI_DMX3191D=y
# CONFIG_SCSI_DTC3280 is not set
CONFIG_SCSI_EATA=m
# CONFIG_SCSI_EATA_TAGGED_QUEUE is not set
# CONFIG_SCSI_EATA_LINKED_COMMANDS is not set
CONFIG_SCSI_EATA_MAX_TAGS=16
CONFIG_SCSI_FUTURE_DOMAIN=y
# CONFIG_SCSI_FD_MCS is not set
# CONFIG_SCSI_GDTH is not set
CONFIG_SCSI_GENERIC_NCR5380=m
CONFIG_SCSI_GENERIC_NCR5380_MMIO=m
# CONFIG_SCSI_GENERIC_NCR53C400 is not set
# CONFIG_SCSI_IBMMCA is not set
CONFIG_SCSI_IPS=m
# CONFIG_SCSI_INITIO is not set
CONFIG_SCSI_INIA100=m
CONFIG_SCSI_PPA=m
CONFIG_SCSI_IMM=m
CONFIG_SCSI_IZIP_EPP16=y
CONFIG_SCSI_IZIP_SLOW_CTR=y
CONFIG_SCSI_NCR53C406A=m
# CONFIG_SCSI_NCR_D700 is not set
CONFIG_SCSI_STEX=y
CONFIG_SCSI_SYM53C8XX_2=m
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
CONFIG_SCSI_SYM53C8XX_MMIO=y
CONFIG_SCSI_IPR=m
CONFIG_SCSI_IPR_TRACE=y
# CONFIG_SCSI_IPR_DUMP is not set
CONFIG_SCSI_NCR_Q720=m
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
CONFIG_SCSI_NCR53C8XX_SYNC=20
CONFIG_SCSI_PAS16=m
# CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
CONFIG_SCSI_QLA_FC=y
CONFIG_SCSI_QLA_ISCSI=y
CONFIG_SCSI_LPFC=y
# CONFIG_SCSI_LPFC_DEBUG_FS is not set
CONFIG_SCSI_SIM710=m
# CONFIG_SCSI_SYM53C416 is not set
CONFIG_SCSI_DC395x=y
# CONFIG_SCSI_DC390T is not set
CONFIG_SCSI_T128=m
CONFIG_SCSI_U14_34F=y
CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y
CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y
CONFIG_SCSI_U14_34F_MAX_TAGS=8
CONFIG_SCSI_ULTRASTOR=y
CONFIG_SCSI_NSP32=m
# CONFIG_SCSI_SRP is not set
CONFIG_SCSI_LOWLEVEL_PCMCIA=y
# CONFIG_PCMCIA_AHA152X is not set
# CONFIG_PCMCIA_FDOMAIN is not set
CONFIG_PCMCIA_NINJA_SCSI=m
CONFIG_PCMCIA_QLOGIC=m
CONFIG_PCMCIA_SYM53C500=m
# CONFIG_SCSI_DH is not set
CONFIG_SCSI_OSD_INITIATOR=m
# CONFIG_SCSI_OSD_ULD is not set
CONFIG_SCSI_OSD_DPRINT_SENSE=1
CONFIG_SCSI_OSD_DEBUG=y
CONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not set
CONFIG_ATA_ACPI=y
CONFIG_SATA_PMP=y
CONFIG_SATA_AHCI=y
# CONFIG_SATA_SIL24 is not set
CONFIG_ATA_SFF=y
# CONFIG_SATA_SVW is not set
CONFIG_ATA_PIIX=y
CONFIG_SATA_MV=m
CONFIG_SATA_NV=y
CONFIG_PDC_ADMA=y
CONFIG_SATA_QSTOR=m
CONFIG_SATA_PROMISE=m
# CONFIG_SATA_SX4 is not set
CONFIG_SATA_SIL=y
# CONFIG_SATA_SIS is not set
CONFIG_SATA_ULI=y
CONFIG_SATA_VIA=y
CONFIG_SATA_VITESSE=y
CONFIG_SATA_INIC162X=y
CONFIG_PATA_ACPI=y
CONFIG_PATA_ALI=m
CONFIG_PATA_AMD=y
# CONFIG_PATA_ARTOP is not set
CONFIG_PATA_ATIIXP=y
CONFIG_PATA_CMD640_PCI=m
# CONFIG_PATA_CMD64X is not set
CONFIG_PATA_CS5520=m
# CONFIG_PATA_CS5530 is not set
CONFIG_PATA_CS5535=m
CONFIG_PATA_CS5536=m
# CONFIG_PATA_CYPRESS is not set
CONFIG_PATA_EFAR=y
CONFIG_ATA_GENERIC=m
# CONFIG_PATA_HPT366 is not set
# CONFIG_PATA_HPT37X is not set
CONFIG_PATA_HPT3X2N=y
# CONFIG_PATA_HPT3X3 is not set
# CONFIG_PATA_ISAPNP is not set
CONFIG_PATA_IT821X=m
CONFIG_PATA_IT8213=y
# CONFIG_PATA_JMICRON is not set
CONFIG_PATA_LEGACY=m
# CONFIG_PATA_TRIFLEX is not set
CONFIG_PATA_MARVELL=y
CONFIG_PATA_MPIIX=y
CONFIG_PATA_OLDPIIX=y
CONFIG_PATA_NETCELL=m
CONFIG_PATA_NINJA32=y
CONFIG_PATA_NS87410=y
# CONFIG_PATA_NS87415 is not set
# CONFIG_PATA_OPTI is not set
# CONFIG_PATA_OPTIDMA is not set
CONFIG_PATA_PCMCIA=m
# CONFIG_PATA_PDC_OLD is not set
# CONFIG_PATA_QDI is not set
CONFIG_PATA_RADISYS=y
# CONFIG_PATA_RZ1000 is not set
# CONFIG_PATA_SC1200 is not set
CONFIG_PATA_SERVERWORKS=m
CONFIG_PATA_PDC2027X=m
CONFIG_PATA_SIL680=y
# CONFIG_PATA_SIS is not set
CONFIG_PATA_VIA=m
# CONFIG_PATA_WINBOND is not set
# CONFIG_PATA_WINBOND_VLB is not set
CONFIG_PATA_PLATFORM=y
CONFIG_PATA_SCH=m
CONFIG_MD=y
CONFIG_BLK_DEV_MD=m
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_RAID0 is not set
CONFIG_MD_RAID1=m
# CONFIG_MD_RAID10 is not set
CONFIG_MD_RAID456=m
CONFIG_MD_RAID6_PQ=m
CONFIG_MD_MULTIPATH=m
# CONFIG_MD_FAULTY is not set
# CONFIG_BLK_DEV_DM is not set
# CONFIG_FUSION is not set

#
# IEEE 1394 (FireWire) support
#

#
# You can enable one or both FireWire driver stacks.
#

#
# See the help texts for more information.
#
CONFIG_FIREWIRE=y
# CONFIG_FIREWIRE_OHCI is not set
# CONFIG_FIREWIRE_SBP2 is not set
# CONFIG_FIREWIRE_NET is not set
CONFIG_IEEE1394=m
CONFIG_IEEE1394_OHCI1394=m
CONFIG_IEEE1394_PCILYNX=m
CONFIG_IEEE1394_SBP2=m
# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
# CONFIG_IEEE1394_ETH1394_ROM_ENTRY is not set
# CONFIG_IEEE1394_ETH1394 is not set
CONFIG_IEEE1394_RAWIO=m
# CONFIG_IEEE1394_VIDEO1394 is not set
CONFIG_IEEE1394_DV1394=m
CONFIG_IEEE1394_VERBOSEDEBUG=y
CONFIG_I2O=m
CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
CONFIG_I2O_EXT_ADAPTEC=y
CONFIG_I2O_CONFIG=m
CONFIG_I2O_CONFIG_OLD_IOCTL=y
CONFIG_I2O_BUS=m
CONFIG_I2O_BLOCK=m
CONFIG_I2O_SCSI=m
# CONFIG_I2O_PROC is not set
CONFIG_MACINTOSH_DRIVERS=y
# CONFIG_MAC_EMUMOUSEBTN is not set
CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
CONFIG_BONDING=m
CONFIG_MACVLAN=y
CONFIG_EQUALIZER=y
# CONFIG_TUN is not set
CONFIG_VETH=y
CONFIG_NET_SB1000=m
CONFIG_ARCNET=y
# CONFIG_ARCNET_1201 is not set
CONFIG_ARCNET_1051=m
# CONFIG_ARCNET_RAW is not set
CONFIG_ARCNET_CAP=y
CONFIG_ARCNET_COM90xx=m
CONFIG_ARCNET_COM90xxIO=m
# CONFIG_ARCNET_RIM_I is not set
CONFIG_ARCNET_COM20020=m
# CONFIG_ARCNET_COM20020_ISA is not set
# CONFIG_ARCNET_COM20020_PCI is not set
CONFIG_PHYLIB=y

#
# MII PHY device drivers
#
CONFIG_MARVELL_PHY=y
# CONFIG_DAVICOM_PHY is not set
# CONFIG_QSEMI_PHY is not set
CONFIG_LXT_PHY=m
CONFIG_CICADA_PHY=y
# CONFIG_VITESSE_PHY is not set
CONFIG_SMSC_PHY=y
# CONFIG_BROADCOM_PHY is not set
CONFIG_ICPLUS_PHY=y
# CONFIG_REALTEK_PHY is not set
# CONFIG_NATIONAL_PHY is not set
CONFIG_STE10XP=y
CONFIG_LSI_ET1011C_PHY=m
CONFIG_FIXED_PHY=y
CONFIG_MDIO_BITBANG=m
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
CONFIG_HAPPYMEAL=y
CONFIG_SUNGEM=m
CONFIG_CASSINI=y
# CONFIG_NET_VENDOR_3COM is not set
CONFIG_LANCE=y
CONFIG_NET_VENDOR_SMC=y
CONFIG_ULTRAMCA=m
# CONFIG_ULTRA is not set
# CONFIG_SMC9194 is not set
CONFIG_ETHOC=m
CONFIG_NET_VENDOR_RACAL=y
# CONFIG_NI5010 is not set
CONFIG_NI52=y
# CONFIG_NI65 is not set
# CONFIG_DNET is not set
# CONFIG_NET_TULIP is not set
CONFIG_AT1700=m
# CONFIG_DEPCA is not set
CONFIG_HP100=m
# CONFIG_NET_ISA is not set
CONFIG_NE2_MCA=y
# CONFIG_IBMLANA is not set
# CONFIG_IBM_NEW_EMAC_ZMII is not set
# CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
CONFIG_NET_PCI=y
CONFIG_PCNET32=m
CONFIG_AMD8111_ETH=y
CONFIG_ADAPTEC_STARFIRE=y
CONFIG_AC3200=m
CONFIG_APRICOT=m
# CONFIG_B44 is not set
CONFIG_FORCEDETH=y
# CONFIG_FORCEDETH_NAPI is not set
CONFIG_CS89x0=y
CONFIG_E100=y
CONFIG_FEALNX=y
# CONFIG_NATSEMI is not set
CONFIG_NE2K_PCI=y
CONFIG_8139CP=m
CONFIG_8139TOO=y
# CONFIG_8139TOO_PIO is not set
# CONFIG_8139TOO_TUNE_TWISTER is not set
CONFIG_8139TOO_8129=y
# CONFIG_8139_OLD_RX_RESET is not set
# CONFIG_R6040 is not set
CONFIG_SIS900=y
CONFIG_EPIC100=m
CONFIG_SMSC9420=y
CONFIG_SUNDANCE=m
# CONFIG_SUNDANCE_MMIO is not set
CONFIG_TLAN=m
# CONFIG_KS8842 is not set
CONFIG_VIA_RHINE=m
# CONFIG_VIA_RHINE_MMIO is not set
CONFIG_SC92031=m
CONFIG_NET_POCKET=y
CONFIG_ATP=y
CONFIG_DE600=y
CONFIG_DE620=m
# CONFIG_ATL2 is not set
CONFIG_NETDEV_1000=y
CONFIG_ACENIC=y
CONFIG_ACENIC_OMIT_TIGON_I=y
CONFIG_DL2K=y
CONFIG_E1000=y
CONFIG_E1000E=y
CONFIG_IP1000=y
CONFIG_IGB=m
CONFIG_IGBVF=y
CONFIG_NS83820=y
CONFIG_HAMACHI=m
CONFIG_YELLOWFIN=y
CONFIG_R8169=y
# CONFIG_R8169_VLAN is not set
CONFIG_SIS190=m
# CONFIG_SKGE is not set
CONFIG_SKY2=m
CONFIG_SKY2_DEBUG=y
# CONFIG_VIA_VELOCITY is not set
CONFIG_TIGON3=y
CONFIG_BNX2=y
CONFIG_QLA3XXX=y
# CONFIG_ATL1 is not set
CONFIG_ATL1E=y
# CONFIG_ATL1C is not set
# CONFIG_JME is not set
CONFIG_NETDEV_10000=y
CONFIG_MDIO=m
# CONFIG_CHELSIO_T1 is not set
CONFIG_CHELSIO_T3_DEPENDS=y
CONFIG_CHELSIO_T3=m
# CONFIG_ENIC is not set
CONFIG_IXGBE=m
CONFIG_IXGBE_DCB=y
CONFIG_IXGB=m
# CONFIG_S2IO is not set
CONFIG_MYRI10GE=y
CONFIG_NIU=m
# CONFIG_MLX4_EN is not set
# CONFIG_MLX4_CORE is not set
CONFIG_TEHUTI=m
# CONFIG_BNX2X is not set
# CONFIG_QLGE is not set
CONFIG_SFC=m
CONFIG_BE2NET=m
# CONFIG_TR is not set

#
# Wireless LAN
#
CONFIG_WLAN_PRE80211=y
CONFIG_STRIP=m
CONFIG_ARLAN=y
CONFIG_WAVELAN=y
CONFIG_PCMCIA_WAVELAN=m
CONFIG_PCMCIA_NETWAVE=m
CONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not set
CONFIG_LIBERTAS=y
CONFIG_LIBERTAS_USB=m
CONFIG_LIBERTAS_CS=m
# CONFIG_LIBERTAS_SDIO is not set
CONFIG_LIBERTAS_DEBUG=y
CONFIG_AIRO=m
# CONFIG_ATMEL is not set
CONFIG_AIRO_CS=m
CONFIG_PCMCIA_WL3501=m
CONFIG_PRISM54=m
# CONFIG_USB_ZD1201 is not set
CONFIG_IPW2100=m
CONFIG_IPW2100_MONITOR=y
# CONFIG_IPW2100_DEBUG is not set
# CONFIG_IPW2200 is not set
CONFIG_LIBIPW=m
# CONFIG_LIBIPW_DEBUG is not set
CONFIG_HOSTAP=m
# CONFIG_HOSTAP_FIRMWARE is not set
# CONFIG_HOSTAP_PLX is not set
CONFIG_HOSTAP_PCI=m
# CONFIG_HOSTAP_CS is not set
CONFIG_HERMES=m
CONFIG_HERMES_CACHE_FW_ON_INIT=y
CONFIG_PLX_HERMES=m
# CONFIG_TMD_HERMES is not set
# CONFIG_NORTEL_HERMES is not set
CONFIG_PCI_HERMES=m
# CONFIG_PCMCIA_HERMES is not set
# CONFIG_PCMCIA_SPECTRUM is not set

#
# Enable WiMAX (Networking options) to see the WiMAX drivers
#

#
# USB Network Adapters
#
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=y
# CONFIG_USB_PEGASUS is not set
CONFIG_USB_RTL8150=m
CONFIG_USB_USBNET=m
# CONFIG_USB_NET_AX8817X is not set
CONFIG_USB_NET_CDCETHER=m
# CONFIG_USB_NET_CDC_EEM is not set
CONFIG_USB_NET_DM9601=m
CONFIG_USB_NET_SMSC95XX=m
# CONFIG_USB_NET_GL620A is not set
# CONFIG_USB_NET_NET1080 is not set
# CONFIG_USB_NET_PLUSB is not set
# CONFIG_USB_NET_MCS7830 is not set
# CONFIG_USB_NET_RNDIS_HOST is not set
CONFIG_USB_NET_CDC_SUBSET=m
CONFIG_USB_ALI_M5632=y
CONFIG_USB_AN2720=y
CONFIG_USB_BELKIN=y
CONFIG_USB_ARMLINUX=y
CONFIG_USB_EPSON2888=y
CONFIG_USB_KC2190=y
CONFIG_USB_NET_ZAURUS=m
# CONFIG_USB_NET_INT51X1 is not set
CONFIG_USB_CDC_PHONET=y
CONFIG_NET_PCMCIA=y
CONFIG_PCMCIA_3C589=m
# CONFIG_PCMCIA_3C574 is not set
# CONFIG_PCMCIA_FMVJ18X is not set
CONFIG_PCMCIA_PCNET=m
CONFIG_PCMCIA_NMCLAN=m
CONFIG_PCMCIA_SMC91C92=m
CONFIG_PCMCIA_XIRC2PS=m
CONFIG_PCMCIA_AXNET=m
CONFIG_ARCNET_COM20020_CS=m
CONFIG_WAN=y
CONFIG_HOSTESS_SV11=m
# CONFIG_COSA is not set
# CONFIG_LANMEDIA is not set
# CONFIG_SEALEVEL_4021 is not set
CONFIG_HDLC=m
CONFIG_HDLC_RAW=m
CONFIG_HDLC_RAW_ETH=m
CONFIG_HDLC_CISCO=m
# CONFIG_HDLC_FR is not set
# CONFIG_HDLC_PPP is not set
CONFIG_HDLC_X25=m
CONFIG_PCI200SYN=m
CONFIG_WANXL=m
# CONFIG_PC300TOO is not set
# CONFIG_N2 is not set
CONFIG_C101=m
# CONFIG_FARSYNC is not set
CONFIG_DSCC4=m
CONFIG_DSCC4_PCISYNC=y
CONFIG_DSCC4_PCI_RST=y
CONFIG_DLCI=m
CONFIG_DLCI_MAX=8
CONFIG_SDLA=m
CONFIG_WAN_ROUTER_DRIVERS=y
# CONFIG_CYCLADES_SYNC is not set
CONFIG_SBNI=y
# CONFIG_SBNI_MULTILINE is not set
# CONFIG_ATM_DRIVERS is not set
# CONFIG_IEEE802154_DRIVERS is not set
# CONFIG_FDDI is not set
CONFIG_HIPPI=y
CONFIG_ROADRUNNER=m
CONFIG_ROADRUNNER_LARGE_RINGS=y
CONFIG_PLIP=y
CONFIG_PPP=y
# CONFIG_PPP_MULTILINK is not set
CONFIG_PPP_FILTER=y
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=y
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_BSDCOMP=m
CONFIG_PPP_MPPE=m
# CONFIG_PPPOE is not set
CONFIG_PPPOATM=m
CONFIG_PPPOL2TP=m
CONFIG_SLIP=y
CONFIG_SLIP_COMPRESSED=y
CONFIG_SLHC=y
# CONFIG_SLIP_SMART is not set
# CONFIG_SLIP_MODE_SLIP6 is not set
CONFIG_NET_FC=y
CONFIG_NETCONSOLE=y
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_NETPOLL_TRAP=y
CONFIG_NET_POLL_CONTROLLER=y
# CONFIG_VIRTIO_NET is not set
# CONFIG_ISDN is not set
CONFIG_PHONE=y

#
# Input device support
#
CONFIG_INPUT=y
CONFIG_INPUT_FF_MEMLESS=y
CONFIG_INPUT_POLLDEV=y

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_JOYDEV=y
CONFIG_INPUT_EVDEV=m
# CONFIG_INPUT_EVBUG is not set

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ATKBD=y
CONFIG_KEYBOARD_LKKBD=y
CONFIG_KEYBOARD_LM8323=m
CONFIG_KEYBOARD_NEWTON=m
CONFIG_KEYBOARD_STOWAWAY=y
CONFIG_KEYBOARD_SUNKBD=m
CONFIG_KEYBOARD_XTKBD=y
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
CONFIG_INPUT_TABLET=y
CONFIG_TABLET_USB_ACECAD=m
# CONFIG_TABLET_USB_AIPTEK is not set
CONFIG_TABLET_USB_GTCO=m
CONFIG_TABLET_USB_KBTAB=y
# CONFIG_TABLET_USB_WACOM is not set
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_AD7879_I2C=m
CONFIG_TOUCHSCREEN_AD7879=m
CONFIG_TOUCHSCREEN_DA9034=y
CONFIG_TOUCHSCREEN_EETI=y
CONFIG_TOUCHSCREEN_FUJITSU=y
CONFIG_TOUCHSCREEN_GUNZE=y
CONFIG_TOUCHSCREEN_ELO=y
CONFIG_TOUCHSCREEN_WACOM_W8001=y
CONFIG_TOUCHSCREEN_MTOUCH=m
CONFIG_TOUCHSCREEN_INEXIO=m
CONFIG_TOUCHSCREEN_MK712=m
CONFIG_TOUCHSCREEN_HTCPEN=y
CONFIG_TOUCHSCREEN_PENMOUNT=m
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
CONFIG_TOUCHSCREEN_USB_EGALAX=y
CONFIG_TOUCHSCREEN_USB_PANJIT=y
# CONFIG_TOUCHSCREEN_USB_3M is not set
CONFIG_TOUCHSCREEN_USB_ITM=y
# CONFIG_TOUCHSCREEN_USB_ETURBO is not set
CONFIG_TOUCHSCREEN_USB_GUNZE=y
# CONFIG_TOUCHSCREEN_USB_DMC_TSC10 is not set
# CONFIG_TOUCHSCREEN_USB_IRTOUCH is not set
CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
CONFIG_TOUCHSCREEN_USB_GOTOP=y
CONFIG_TOUCHSCREEN_TOUCHIT213=y
# CONFIG_TOUCHSCREEN_TSC2007 is not set
# CONFIG_TOUCHSCREEN_W90X900 is not set
# CONFIG_INPUT_MISC is not set

#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=m
# CONFIG_SERIO_CT82C710 is not set
CONFIG_SERIO_PARKBD=m
CONFIG_SERIO_PCIPS2=m
CONFIG_SERIO_LIBPS2=y
CONFIG_SERIO_RAW=m
# CONFIG_GAMEPORT is not set

#
# Character devices
#
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
# CONFIG_DEVKMEM is not set
# CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_NOZOMI=y

#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_FIX_EARLYCON_MEM=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_PNP=m
CONFIG_SERIAL_8250_CS=m
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_FOURPORT=y
CONFIG_SERIAL_8250_ACCENT=y
CONFIG_SERIAL_8250_BOCA=m
CONFIG_SERIAL_8250_EXAR_ST16C554=m
CONFIG_SERIAL_8250_HUB6=m
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_8250_MCA=y

#
# Non-8250 serial port support
#
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_JSM=m
CONFIG_UNIX98_PTYS=y
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
# CONFIG_LEGACY_PTYS is not set
CONFIG_PRINTER=y
CONFIG_LP_CONSOLE=y
CONFIG_PPDEV=m
CONFIG_HVC_DRIVER=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_IPMI_HANDLER=y
CONFIG_IPMI_PANIC_EVENT=y
CONFIG_IPMI_PANIC_STRING=y
CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_SI=m
CONFIG_IPMI_WATCHDOG=y
# CONFIG_IPMI_POWEROFF is not set
CONFIG_HW_RANDOM=m
CONFIG_HW_RANDOM_TIMERIOMEM=m
# CONFIG_HW_RANDOM_INTEL is not set
# CONFIG_HW_RANDOM_AMD is not set
CONFIG_HW_RANDOM_GEODE=m
CONFIG_HW_RANDOM_VIA=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_NVRAM=m
# CONFIG_RTC is not set
CONFIG_GEN_RTC=m
CONFIG_GEN_RTC_X=y
CONFIG_DTLK=m
# CONFIG_R3964 is not set
CONFIG_APPLICOM=y
CONFIG_SONYPI=y

#
# PCMCIA character devices
#
CONFIG_SYNCLINK_CS=m
CONFIG_CARDMAN_4000=m
CONFIG_CARDMAN_4040=m
# CONFIG_IPWIRELESS is not set
CONFIG_MWAVE=y
CONFIG_SCx200_GPIO=m
# CONFIG_PC8736x_GPIO is not set
CONFIG_NSC_GPIO=m
CONFIG_CS5535_GPIO=m
CONFIG_RAW_DRIVER=y
CONFIG_MAX_RAW_DEVS=256
CONFIG_HPET=y
CONFIG_HPET_MMAP=y
# CONFIG_HANGCHECK_TIMER is not set
CONFIG_TCG_TPM=y
CONFIG_TCG_TIS=y
CONFIG_TCG_NSC=m
CONFIG_TCG_ATMEL=y
# CONFIG_TCG_INFINEON is not set
CONFIG_TELCLOCK=m
CONFIG_DEVPORT=y
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_CHARDEV is not set
CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_ALGOBIT=y
CONFIG_I2C_ALGOPCF=m
CONFIG_I2C_ALGOPCA=m

#
# I2C Hardware Bus support
#

#
# PC SMBus host controller drivers
#
# CONFIG_I2C_ALI1535 is not set
CONFIG_I2C_ALI1563=y
CONFIG_I2C_ALI15X3=y
CONFIG_I2C_AMD756=m
# CONFIG_I2C_AMD8111 is not set
CONFIG_I2C_I801=y
CONFIG_I2C_ISCH=m
CONFIG_I2C_PIIX4=m
CONFIG_I2C_NFORCE2=m
# CONFIG_I2C_SIS5595 is not set
CONFIG_I2C_SIS630=m
# CONFIG_I2C_SIS96X is not set
CONFIG_I2C_VIA=m
CONFIG_I2C_VIAPRO=m

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
CONFIG_I2C_OCORES=m
CONFIG_I2C_SIMTEC=y

#
# External I2C/SMBus adapter drivers
#
CONFIG_I2C_PARPORT=y
CONFIG_I2C_PARPORT_LIGHT=m
CONFIG_I2C_TAOS_EVM=m
CONFIG_I2C_TINY_USB=y

#
# Graphics adapter I2C/DDC channel drivers
#
CONFIG_I2C_VOODOO3=m

#
# Other I2C/SMBus bus drivers
#
CONFIG_I2C_ELEKTOR=m
# CONFIG_I2C_PCA_ISA is not set
CONFIG_I2C_PCA_PLATFORM=m
# CONFIG_I2C_STUB is not set
CONFIG_SCx200_I2C=m
CONFIG_SCx200_I2C_SCL=12
CONFIG_SCx200_I2C_SDA=13
CONFIG_SCx200_ACB=m

#
# Miscellaneous I2C Chip support
#
CONFIG_DS1682=y
CONFIG_SENSORS_PCF8574=y
CONFIG_PCF8575=m
CONFIG_SENSORS_PCA9539=m
# CONFIG_SENSORS_TSL2550 is not set
CONFIG_I2C_DEBUG_CORE=y
CONFIG_I2C_DEBUG_ALGO=y
CONFIG_I2C_DEBUG_BUS=y
CONFIG_I2C_DEBUG_CHIP=y
# CONFIG_SPI is not set

#
# PPS support
#
CONFIG_PPS=m
CONFIG_PPS_DEBUG=y
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
# CONFIG_GPIOLIB is not set
CONFIG_W1=y
CONFIG_W1_CON=y

#
# 1-wire Bus Masters
#
CONFIG_W1_MASTER_MATROX=y
CONFIG_W1_MASTER_DS2490=m
CONFIG_W1_MASTER_DS2482=y

#
# 1-wire Slaves
#
CONFIG_W1_SLAVE_THERM=m
# CONFIG_W1_SLAVE_SMEM is not set
# CONFIG_W1_SLAVE_DS2431 is not set
CONFIG_W1_SLAVE_DS2433=m
CONFIG_W1_SLAVE_DS2433_CRC=y
CONFIG_W1_SLAVE_DS2760=y
CONFIG_W1_SLAVE_BQ27000=m
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
CONFIG_BATTERY_DS2760=y
CONFIG_BATTERY_DS2782=y
CONFIG_BATTERY_OLPC=y
# CONFIG_BATTERY_BQ27x00 is not set
CONFIG_BATTERY_DA9030=m
# CONFIG_BATTERY_MAX17040 is not set
# CONFIG_CHARGER_PCF50633 is not set
CONFIG_HWMON=m
CONFIG_HWMON_VID=m
# CONFIG_SENSORS_ABITUGURU is not set
CONFIG_SENSORS_ABITUGURU3=m
CONFIG_SENSORS_AD7414=m
CONFIG_SENSORS_AD7418=m
CONFIG_SENSORS_ADM1021=m
CONFIG_SENSORS_ADM1025=m
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1029 is not set
# CONFIG_SENSORS_ADM1031 is not set
CONFIG_SENSORS_ADM9240=m
CONFIG_SENSORS_ADT7462=m
CONFIG_SENSORS_ADT7470=m
# CONFIG_SENSORS_ADT7473 is not set
# CONFIG_SENSORS_ADT7475 is not set
CONFIG_SENSORS_K8TEMP=m
CONFIG_SENSORS_ASB100=m
CONFIG_SENSORS_ATK0110=m
CONFIG_SENSORS_ATXP1=m
CONFIG_SENSORS_DS1621=m
CONFIG_SENSORS_I5K_AMB=m
CONFIG_SENSORS_F71805F=m
CONFIG_SENSORS_F71882FG=m
CONFIG_SENSORS_F75375S=m
CONFIG_SENSORS_FSCHER=m
CONFIG_SENSORS_FSCPOS=m
CONFIG_SENSORS_FSCHMD=m
CONFIG_SENSORS_G760A=m
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
CONFIG_SENSORS_CORETEMP=m
CONFIG_SENSORS_IBMAEM=m
CONFIG_SENSORS_IBMPEX=m
# CONFIG_SENSORS_IT87 is not set
CONFIG_SENSORS_LM63=m
CONFIG_SENSORS_LM75=m
CONFIG_SENSORS_LM77=m
CONFIG_SENSORS_LM78=m
# CONFIG_SENSORS_LM80 is not set
CONFIG_SENSORS_LM83=m
CONFIG_SENSORS_LM85=m
CONFIG_SENSORS_LM87=m
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_LM93 is not set
CONFIG_SENSORS_LTC4215=m
CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LM95241=m
CONFIG_SENSORS_MAX1619=m
CONFIG_SENSORS_MAX6650=m
# CONFIG_SENSORS_PC87360 is not set
CONFIG_SENSORS_PC87427=m
CONFIG_SENSORS_PCF8591=m
# CONFIG_SENSORS_SIS5595 is not set
# CONFIG_SENSORS_DME1737 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
CONFIG_SENSORS_SMSC47M192=m
CONFIG_SENSORS_SMSC47B397=m
CONFIG_SENSORS_ADS7828=m
CONFIG_SENSORS_THMC50=m
CONFIG_SENSORS_TMP401=m
CONFIG_SENSORS_VIA686A=m
CONFIG_SENSORS_VT1211=m
CONFIG_SENSORS_VT8231=m
CONFIG_SENSORS_W83781D=m
CONFIG_SENSORS_W83791D=m
CONFIG_SENSORS_W83792D=m
# CONFIG_SENSORS_W83793 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
CONFIG_SENSORS_W83627HF=m
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_SENSORS_HDAPS is not set
CONFIG_SENSORS_LIS3LV02D=m
# CONFIG_SENSORS_APPLESMC is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
CONFIG_THERMAL=m
CONFIG_THERMAL_HWMON=y
# CONFIG_WATCHDOG is not set
CONFIG_SSB_POSSIBLE=y

#
# Sonics Silicon Backplane
#
# CONFIG_SSB is not set

#
# Multifunction device drivers
#
# CONFIG_MFD_CORE is not set
CONFIG_MFD_SM501=m
# CONFIG_HTC_PASIC3 is not set
# CONFIG_TWL4030_CORE is not set
# CONFIG_MFD_TMIO is not set
CONFIG_PMIC_DA903X=y
# CONFIG_MFD_WM8400 is not set
CONFIG_MFD_PCF50633=m
CONFIG_PCF50633_ADC=m
CONFIG_PCF50633_GPIO=m
CONFIG_AB3100_CORE=m
CONFIG_REGULATOR=y
CONFIG_REGULATOR_DEBUG=y
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
CONFIG_REGULATOR_USERSPACE_CONSUMER=m
CONFIG_REGULATOR_BQ24022=y
CONFIG_REGULATOR_MAX1586=y
CONFIG_REGULATOR_DA903X=y
CONFIG_REGULATOR_PCF50633=m
CONFIG_REGULATOR_LP3971=m
CONFIG_MEDIA_SUPPORT=m

#
# Multimedia core support
#
CONFIG_VIDEO_DEV=m
CONFIG_VIDEO_V4L2_COMMON=m
# CONFIG_VIDEO_ALLOW_V4L1 is not set
# CONFIG_VIDEO_V4L1_COMPAT is not set
# CONFIG_DVB_CORE is not set
CONFIG_VIDEO_MEDIA=m

#
# Multimedia drivers
#
CONFIG_VIDEO_SAA7146=m
CONFIG_VIDEO_SAA7146_VV=m
CONFIG_MEDIA_ATTACH=y
CONFIG_MEDIA_TUNER=m
CONFIG_MEDIA_TUNER_CUSTOMISE=y
# CONFIG_MEDIA_TUNER_SIMPLE is not set
CONFIG_MEDIA_TUNER_TDA8290=m
CONFIG_MEDIA_TUNER_TDA827X=m
CONFIG_MEDIA_TUNER_TDA18271=m
CONFIG_MEDIA_TUNER_TDA9887=m
CONFIG_MEDIA_TUNER_TEA5761=m
# CONFIG_MEDIA_TUNER_TEA5767 is not set
# CONFIG_MEDIA_TUNER_MT20XX is not set
# CONFIG_MEDIA_TUNER_MT2060 is not set
CONFIG_MEDIA_TUNER_MT2266=m
CONFIG_MEDIA_TUNER_MT2131=m
# CONFIG_MEDIA_TUNER_QT1010 is not set
CONFIG_MEDIA_TUNER_XC2028=m
CONFIG_MEDIA_TUNER_XC5000=m
CONFIG_MEDIA_TUNER_MXL5005S=m
# CONFIG_MEDIA_TUNER_MXL5007T is not set
CONFIG_MEDIA_TUNER_MC44S803=m
CONFIG_VIDEO_V4L2=m
CONFIG_VIDEOBUF_GEN=m
CONFIG_VIDEOBUF_DMA_SG=m
CONFIG_VIDEOBUF_VMALLOC=m
CONFIG_VIDEO_BTCX=m
CONFIG_VIDEO_IR=m
CONFIG_VIDEO_TVEEPROM=m
CONFIG_VIDEO_TUNER=m
CONFIG_VIDEO_CAPTURE_DRIVERS=y
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
CONFIG_VIDEO_IR_I2C=m
CONFIG_VIDEO_TVAUDIO=m
CONFIG_VIDEO_TDA7432=m
CONFIG_VIDEO_MSP3400=m
CONFIG_VIDEO_SAA6588=m
CONFIG_VIDEO_MT9V011=m
CONFIG_VIDEO_SAA711X=m
CONFIG_VIDEO_TVP5150=m
CONFIG_VIDEO_CX25840=m
CONFIG_VIDEO_VIVI=m
CONFIG_VIDEO_BT848=m
CONFIG_VIDEO_SAA5246A=m
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_VIDEO_ZORAN is not set
CONFIG_VIDEO_SAA7134=m
CONFIG_VIDEO_HEXIUM_ORION=m
CONFIG_VIDEO_HEXIUM_GEMINI=m
# CONFIG_VIDEO_IVTV is not set
# CONFIG_VIDEO_CAFE_CCIC is not set
# CONFIG_SOC_CAMERA is not set
CONFIG_V4L_USB_DRIVERS=y
# CONFIG_USB_VIDEO_CLASS is not set
# CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV is not set
CONFIG_USB_GSPCA=m
CONFIG_USB_M5602=m
# CONFIG_USB_STV06XX is not set
CONFIG_USB_GSPCA_CONEX=m
CONFIG_USB_GSPCA_ETOMS=m
CONFIG_USB_GSPCA_FINEPIX=m
CONFIG_USB_GSPCA_MARS=m
CONFIG_USB_GSPCA_MR97310A=m
CONFIG_USB_GSPCA_OV519=m
CONFIG_USB_GSPCA_OV534=m
CONFIG_USB_GSPCA_PAC207=m
CONFIG_USB_GSPCA_PAC7311=m
CONFIG_USB_GSPCA_SN9C20X=m
CONFIG_USB_GSPCA_SN9C20X_EVDEV=y
# CONFIG_USB_GSPCA_SONIXB is not set
CONFIG_USB_GSPCA_SONIXJ=m
CONFIG_USB_GSPCA_SPCA500=m
CONFIG_USB_GSPCA_SPCA501=m
CONFIG_USB_GSPCA_SPCA505=m
CONFIG_USB_GSPCA_SPCA506=m
# CONFIG_USB_GSPCA_SPCA508 is not set
CONFIG_USB_GSPCA_SPCA561=m
CONFIG_USB_GSPCA_SQ905=m
CONFIG_USB_GSPCA_SQ905C=m
CONFIG_USB_GSPCA_STK014=m
CONFIG_USB_GSPCA_SUNPLUS=m
CONFIG_USB_GSPCA_T613=m
# CONFIG_USB_GSPCA_TV8532 is not set
CONFIG_USB_GSPCA_VC032X=m
CONFIG_USB_GSPCA_ZC3XX=m
# CONFIG_VIDEO_PVRUSB2 is not set
CONFIG_VIDEO_HDPVR=m
CONFIG_VIDEO_EM28XX=m
CONFIG_VIDEO_CX231XX=m
# CONFIG_VIDEO_USBVISION is not set
CONFIG_USB_ET61X251=m
CONFIG_USB_SN9C102=m
CONFIG_USB_ZC0301=m
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_USB_ZR364XX=m
# CONFIG_USB_STKWEBCAM is not set
CONFIG_USB_S2255=m
CONFIG_RADIO_ADAPTERS=y
CONFIG_RADIO_CADET=m
# CONFIG_RADIO_RTRACK2 is not set
# CONFIG_RADIO_AZTECH is not set
CONFIG_RADIO_GEMTEK=m
CONFIG_RADIO_GEMTEK_PCI=m
# CONFIG_RADIO_MAXIRADIO is not set
CONFIG_RADIO_MAESTRO=m
CONFIG_RADIO_SF16FMI=m
CONFIG_RADIO_SF16FMR2=m
CONFIG_RADIO_TERRATEC=m
CONFIG_RADIO_TRUST=m
CONFIG_RADIO_TYPHOON=m
CONFIG_RADIO_TYPHOON_PROC_FS=y
CONFIG_RADIO_ZOLTRIX=m
CONFIG_USB_DSBR=m
# CONFIG_USB_SI470X is not set
# CONFIG_USB_MR800 is not set
CONFIG_RADIO_TEA5764=m
# CONFIG_DAB is not set

#
# Graphics support
#
CONFIG_AGP=m
CONFIG_AGP_ALI=m
# CONFIG_AGP_ATI is not set
CONFIG_AGP_AMD=m
# CONFIG_AGP_AMD64 is not set
CONFIG_AGP_INTEL=m
# CONFIG_AGP_NVIDIA is not set
CONFIG_AGP_SIS=m
CONFIG_AGP_SWORKS=m
# CONFIG_AGP_VIA is not set
CONFIG_AGP_EFFICEON=m
CONFIG_DRM=m
CONFIG_DRM_TDFX=m
CONFIG_DRM_R128=m
CONFIG_DRM_RADEON=m
# CONFIG_DRM_I810 is not set
# CONFIG_DRM_I830 is not set
# CONFIG_DRM_I915 is not set
CONFIG_DRM_MGA=m
CONFIG_DRM_SIS=m
CONFIG_DRM_VIA=m
CONFIG_DRM_SAVAGE=m
CONFIG_VGASTATE=y
CONFIG_VIDEO_OUTPUT_CONTROL=m
CONFIG_FB=y
CONFIG_FIRMWARE_EDID=y
CONFIG_FB_DDC=y
CONFIG_FB_BOOT_VESA_SUPPORT=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
CONFIG_FB_SYS_FILLRECT=y
CONFIG_FB_SYS_COPYAREA=y
CONFIG_FB_SYS_IMAGEBLIT=y
# CONFIG_FB_FOREIGN_ENDIAN is not set
CONFIG_FB_SYS_FOPS=y
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_SVGALIB=y
# CONFIG_FB_MACMODES is not set
CONFIG_FB_BACKLIGHT=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y

#
# Frame buffer hardware drivers
#
# CONFIG_FB_CIRRUS is not set
# CONFIG_FB_PM2 is not set
CONFIG_FB_CYBER2000=m
CONFIG_FB_ARC=m
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_VGA16 is not set
# CONFIG_FB_UVESA is not set
# CONFIG_FB_VESA is not set
# CONFIG_FB_N411 is not set
# CONFIG_FB_HGA is not set
CONFIG_FB_S1D13XXX=y
CONFIG_FB_NVIDIA=y
CONFIG_FB_NVIDIA_I2C=y
# CONFIG_FB_NVIDIA_DEBUG is not set
CONFIG_FB_NVIDIA_BACKLIGHT=y
CONFIG_FB_RIVA=y
# CONFIG_FB_RIVA_I2C is not set
CONFIG_FB_RIVA_DEBUG=y
# CONFIG_FB_RIVA_BACKLIGHT is not set
CONFIG_FB_I810=m
CONFIG_FB_I810_GTF=y
CONFIG_FB_I810_I2C=y
CONFIG_FB_LE80578=m
CONFIG_FB_CARILLO_RANCH=m
CONFIG_FB_INTEL=m
# CONFIG_FB_INTEL_DEBUG is not set
CONFIG_FB_INTEL_I2C=y
CONFIG_FB_MATROX=y
# CONFIG_FB_MATROX_MILLENIUM is not set
CONFIG_FB_MATROX_MYSTIQUE=y
CONFIG_FB_MATROX_G=y
CONFIG_FB_MATROX_I2C=y
CONFIG_FB_MATROX_MAVEN=m
CONFIG_FB_MATROX_MULTIHEAD=y
# CONFIG_FB_RADEON is not set
CONFIG_FB_ATY128=m
CONFIG_FB_ATY128_BACKLIGHT=y
CONFIG_FB_ATY=y
CONFIG_FB_ATY_CT=y
# CONFIG_FB_ATY_GENERIC_LCD is not set
CONFIG_FB_ATY_GX=y
# CONFIG_FB_ATY_BACKLIGHT is not set
# CONFIG_FB_S3 is not set
CONFIG_FB_SAVAGE=m
# CONFIG_FB_SAVAGE_I2C is not set
CONFIG_FB_SAVAGE_ACCEL=y
CONFIG_FB_SIS=y
# CONFIG_FB_SIS_300 is not set
CONFIG_FB_SIS_315=y
CONFIG_FB_VIA=y
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
CONFIG_FB_VT8623=y
CONFIG_FB_TRIDENT=y
# CONFIG_FB_ARK is not set
# CONFIG_FB_PM3 is not set
# CONFIG_FB_CARMINE is not set
CONFIG_FB_GEODE=y
CONFIG_FB_GEODE_LX=m
CONFIG_FB_GEODE_GX=y
CONFIG_FB_GEODE_GX1=y
CONFIG_FB_SM501=m
# CONFIG_FB_VIRTUAL is not set
CONFIG_FB_METRONOME=y
CONFIG_FB_MB862XX=m
# CONFIG_FB_MB862XX_PCI_GDC is not set
CONFIG_FB_BROADSHEET=m
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=m
# CONFIG_LCD_ILI9320 is not set
# CONFIG_LCD_PLATFORM is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_GENERIC=y
# CONFIG_BACKLIGHT_PROGEAR is not set
# CONFIG_BACKLIGHT_CARILLO_RANCH is not set
CONFIG_BACKLIGHT_DA903X=y
# CONFIG_BACKLIGHT_MBP_NVIDIA is not set
# CONFIG_BACKLIGHT_SAHARA is not set

#
# Display device support
#
CONFIG_DISPLAY_SUPPORT=y

#
# Display hardware drivers
#

#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
# CONFIG_VGACON_SOFT_SCROLLBACK is not set
# CONFIG_MDA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE is not set
CONFIG_FONT_8x16=y
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
# CONFIG_SOUND is not set
# CONFIG_HID_SUPPORT is not set
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
CONFIG_USB=y
CONFIG_USB_DEBUG=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y

#
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
CONFIG_USB_DEVICE_CLASS=y
CONFIG_USB_DYNAMIC_MINORS=y
# CONFIG_USB_SUSPEND is not set
# CONFIG_USB_OTG is not set
CONFIG_USB_OTG_WHITELIST=y
CONFIG_USB_OTG_BLACKLIST_HUB=y
CONFIG_USB_MON=y
CONFIG_USB_WUSB=y
CONFIG_USB_WUSB_CBAF=m
CONFIG_USB_WUSB_CBAF_DEBUG=y

#
# USB Host Controller Drivers
#
CONFIG_USB_C67X00_HCD=y
# CONFIG_USB_XHCI_HCD is not set
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_ROOT_HUB_TT=y
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
# CONFIG_USB_OXU210HP_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_ISP1760_HCD=m
CONFIG_USB_OHCI_HCD=y
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_UHCI_HCD=y
# CONFIG_USB_U132_HCD is not set
# CONFIG_USB_SL811_HCD is not set
CONFIG_USB_R8A66597_HCD=m
CONFIG_USB_HWA_HCD=y

#
# USB Device Class drivers
#
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
# CONFIG_USB_WDM is not set
# CONFIG_USB_TMC is not set

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#

#
# also be needed; see USB_STORAGE Help for more info
#
# CONFIG_USB_STORAGE is not set
CONFIG_USB_LIBUSUAL=y

#
# USB Imaging devices
#
CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=y

#
# USB port drivers
#
CONFIG_USB_USS720=y
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_CONSOLE=y
CONFIG_USB_EZUSB=y
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_AIRCABLE=m
# CONFIG_USB_SERIAL_ARK3116 is not set
CONFIG_USB_SERIAL_BELKIN=m
CONFIG_USB_SERIAL_CH341=y
# CONFIG_USB_SERIAL_WHITEHEAT is not set
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=y
# CONFIG_USB_SERIAL_CP210X is not set
CONFIG_USB_SERIAL_CYPRESS_M8=m
CONFIG_USB_SERIAL_EMPEG=y
CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL_FUNSOFT=y
CONFIG_USB_SERIAL_VISOR=m
# CONFIG_USB_SERIAL_IPAQ is not set
# CONFIG_USB_SERIAL_IR is not set
CONFIG_USB_SERIAL_EDGEPORT=m
CONFIG_USB_SERIAL_EDGEPORT_TI=y
# CONFIG_USB_SERIAL_GARMIN is not set
CONFIG_USB_SERIAL_IPW=y
CONFIG_USB_SERIAL_IUU=m
CONFIG_USB_SERIAL_KEYSPAN_PDA=m
CONFIG_USB_SERIAL_KEYSPAN=m
# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
CONFIG_USB_SERIAL_KEYSPAN_USA19=y
# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=y
CONFIG_USB_SERIAL_MCT_U232=y
# CONFIG_USB_SERIAL_MOS7720 is not set
# CONFIG_USB_SERIAL_MOS7840 is not set
# CONFIG_USB_SERIAL_MOTOROLA is not set
CONFIG_USB_SERIAL_NAVMAN=y
CONFIG_USB_SERIAL_PL2303=y
CONFIG_USB_SERIAL_OTI6858=m
CONFIG_USB_SERIAL_QUALCOMM=y
CONFIG_USB_SERIAL_SPCP8X5=m
CONFIG_USB_SERIAL_HP4X=y
CONFIG_USB_SERIAL_SAFE=m
CONFIG_USB_SERIAL_SAFE_PADDED=y
CONFIG_USB_SERIAL_SIEMENS_MPI=m
CONFIG_USB_SERIAL_SIERRAWIRELESS=y
CONFIG_USB_SERIAL_SYMBOL=m
CONFIG_USB_SERIAL_TI=y
# CONFIG_USB_SERIAL_CYBERJACK is not set
CONFIG_USB_SERIAL_XIRCOM=m
CONFIG_USB_SERIAL_OPTION=y
CONFIG_USB_SERIAL_OMNINET=y
CONFIG_USB_SERIAL_OPTICON=y
CONFIG_USB_SERIAL_DEBUG=m

#
# USB Miscellaneous drivers
#
CONFIG_USB_EMI62=y
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_ADUTUX is not set
CONFIG_USB_SEVSEG=y
CONFIG_USB_RIO500=y
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
CONFIG_USB_BERRY_CHARGE=m
# CONFIG_USB_LED is not set
CONFIG_USB_CYPRESS_CY7C63=m
CONFIG_USB_CYTHERM=y
# CONFIG_USB_IDMOUSE is not set
CONFIG_USB_FTDI_ELAN=y
# CONFIG_USB_APPLEDISPLAY is not set
CONFIG_USB_SISUSBVGA=y
CONFIG_USB_SISUSBVGA_CON=y
CONFIG_USB_LD=y
CONFIG_USB_TRANCEVIBRATOR=m
CONFIG_USB_IOWARRIOR=y
# CONFIG_USB_TEST is not set
# CONFIG_USB_ISIGHTFW is not set
# CONFIG_USB_VST is not set
CONFIG_USB_ATM=m
CONFIG_USB_SPEEDTOUCH=m
# CONFIG_USB_CXACRU is not set
CONFIG_USB_UEAGLEATM=m
CONFIG_USB_XUSBATM=m

#
# OTG and related infrastructure
#
CONFIG_USB_OTG_UTILS=y
CONFIG_NOP_USB_XCEIV=y
CONFIG_UWB=y
CONFIG_UWB_HWA=y
CONFIG_UWB_WHCI=y
CONFIG_UWB_WLP=m
CONFIG_UWB_I1480U=y
CONFIG_UWB_I1480U_WLP=m
CONFIG_MMC=y
CONFIG_MMC_DEBUG=y
# CONFIG_MMC_UNSAFE_RESUME is not set

#
# MMC/SD/SDIO Card Drivers
#
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_SDIO_UART=m
CONFIG_MMC_TEST=y

#
# MMC/SD/SDIO Host Controller Drivers
#
CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_PCI=m
# CONFIG_MMC_RICOH_MMC is not set
# CONFIG_MMC_SDHCI_PLTFM is not set
# CONFIG_MMC_WBSD is not set
CONFIG_MMC_TIFM_SD=m
CONFIG_MMC_SDRICOH_CS=m
CONFIG_MMC_CB710=y
CONFIG_MMC_VIA_SDMMC=y
# CONFIG_MEMSTICK is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y

#
# LED drivers
#
# CONFIG_LEDS_NET48XX is not set
CONFIG_LEDS_WRAP=m
CONFIG_LEDS_ALIX2=m
CONFIG_LEDS_PCA9532=y
CONFIG_LEDS_LP3944=y
# CONFIG_LEDS_PCA955X is not set
CONFIG_LEDS_DA903X=y
CONFIG_LEDS_BD2802=m

#
# LED Triggers
#
# CONFIG_LEDS_TRIGGERS is not set
# CONFIG_ACCESSIBILITY is not set
CONFIG_INFINIBAND=y
CONFIG_INFINIBAND_USER_MAD=y
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MEM=y
CONFIG_INFINIBAND_MTHCA=y
# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
# CONFIG_INFINIBAND_AMSO1100 is not set
# CONFIG_INFINIBAND_CXGB3 is not set
# CONFIG_MLX4_INFINIBAND is not set
CONFIG_INFINIBAND_NES=y
CONFIG_INFINIBAND_NES_DEBUG=y
CONFIG_INFINIBAND_IPOIB=m
# CONFIG_INFINIBAND_IPOIB_CM is not set
# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
# CONFIG_INFINIBAND_SRP is not set
CONFIG_EDAC=y

#
# Reporting subsystems
#
CONFIG_EDAC_DEBUG=y
# CONFIG_EDAC_DEBUG_VERBOSE is not set
# CONFIG_EDAC_MM_EDAC is not set
# CONFIG_RTC_CLASS is not set
# CONFIG_DMADEVICES is not set
CONFIG_AUXDISPLAY=y
CONFIG_KS0108=y
CONFIG_KS0108_PORT=0x378
CONFIG_KS0108_DELAY=2
CONFIG_CFAG12864B=y
CONFIG_CFAG12864B_RATE=20
CONFIG_UIO=m
# CONFIG_UIO_CIF is not set
# CONFIG_UIO_PDRV is not set
CONFIG_UIO_PDRV_GENIRQ=m
CONFIG_UIO_SMX=m
# CONFIG_UIO_AEC is not set
CONFIG_UIO_SERCOS3=m

#
# TI VLYNQ
#
# CONFIG_STAGING is not set
# CONFIG_X86_PLATFORM_DEVICES is not set

#
# Firmware Drivers
#
CONFIG_EDD=m
# CONFIG_EDD_OFF is not set
# CONFIG_FIRMWARE_MEMMAP is not set
# CONFIG_DELL_RBU is not set
CONFIG_DCDBAS=y
CONFIG_ISCSI_IBFT_FIND=y
CONFIG_ISCSI_IBFT=m

#
# File systems
#
CONFIG_EXT2_FS=m
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_DEFAULTS_TO_ORDERED=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
# CONFIG_EXT4_FS is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_JBD2=y
CONFIG_JBD2_DEBUG=y
CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=m
CONFIG_REISERFS_CHECK=y
CONFIG_REISERFS_PROC_INFO=y
CONFIG_REISERFS_FS_XATTR=y
# CONFIG_REISERFS_FS_POSIX_ACL is not set
# CONFIG_REISERFS_FS_SECURITY is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_FS=y
# CONFIG_XFS_QUOTA is not set
# CONFIG_XFS_POSIX_ACL is not set
CONFIG_XFS_RT=y
CONFIG_XFS_DEBUG=y
# CONFIG_GFS2_FS is not set
CONFIG_OCFS2_FS=y
CONFIG_OCFS2_FS_O2CB=y
# CONFIG_OCFS2_FS_USERSPACE_CLUSTER is not set
CONFIG_OCFS2_FS_STATS=y
CONFIG_OCFS2_DEBUG_MASKLOG=y
# CONFIG_OCFS2_DEBUG_FS is not set
CONFIG_OCFS2_FS_POSIX_ACL=y
CONFIG_BTRFS_FS=y
# CONFIG_BTRFS_FS_POSIX_ACL is not set
CONFIG_FILE_LOCKING=y
CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_PRINT_QUOTA_WARNING=y
CONFIG_QUOTA_TREE=y
CONFIG_QFMT_V1=y
CONFIG_QFMT_V2=y
CONFIG_QUOTACTL=y
CONFIG_AUTOFS_FS=y
# CONFIG_AUTOFS4_FS is not set
CONFIG_FUSE_FS=y
# CONFIG_CUSE is not set
CONFIG_GENERIC_ACL=y

#
# Caches
#
# CONFIG_FSCACHE is not set

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
# CONFIG_UDF_FS is not set

#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
# CONFIG_VFAT_FS is not set
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_NTFS_FS=m
CONFIG_NTFS_DEBUG=y
CONFIG_NTFS_RW=y

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
# CONFIG_HUGETLBFS is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_CONFIGFS_FS=y
CONFIG_MISC_FILESYSTEMS=y
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_ECRYPT_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
CONFIG_BEFS_FS=m
# CONFIG_BEFS_DEBUG is not set
CONFIG_BFS_FS=y
CONFIG_EFS_FS=y
CONFIG_CRAMFS=y
CONFIG_SQUASHFS=m
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
# CONFIG_VXFS_FS is not set
CONFIG_MINIX_FS=y
CONFIG_OMFS_FS=m
CONFIG_HPFS_FS=y
CONFIG_QNX4FS_FS=m
# CONFIG_ROMFS_FS is not set
CONFIG_SYSV_FS=y
# CONFIG_UFS_FS is not set
CONFIG_NILFS2_FS=m
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
# CONFIG_NFS_V4 is not set
CONFIG_ROOT_NFS=y
CONFIG_NFSD=m
# CONFIG_NFSD_V3 is not set
# CONFIG_NFSD_V4 is not set
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=y
CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=m
CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
CONFIG_CIFS=m
CONFIG_CIFS_STATS=y
# CONFIG_CIFS_STATS2 is not set
CONFIG_CIFS_WEAK_PW_HASH=y
CONFIG_CIFS_UPCALL=y
# CONFIG_CIFS_XATTR is not set
CONFIG_CIFS_DEBUG2=y
CONFIG_CIFS_DFS_UPCALL=y
CONFIG_CIFS_EXPERIMENTAL=y
# CONFIG_NCP_FS is not set
CONFIG_CODA_FS=y
CONFIG_AFS_FS=y
CONFIG_AFS_DEBUG=y

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
CONFIG_OSF_PARTITION=y
CONFIG_AMIGA_PARTITION=y
CONFIG_ATARI_PARTITION=y
# CONFIG_MAC_PARTITION is not set
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
CONFIG_MINIX_SUBPARTITION=y
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
CONFIG_LDM_PARTITION=y
CONFIG_LDM_DEBUG=y
CONFIG_SGI_PARTITION=y
CONFIG_ULTRIX_PARTITION=y
CONFIG_SUN_PARTITION=y
CONFIG_KARMA_PARTITION=y
# CONFIG_EFI_PARTITION is not set
CONFIG_SYSV68_PARTITION=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
CONFIG_NLS_CODEPAGE_775=y
CONFIG_NLS_CODEPAGE_850=y
CONFIG_NLS_CODEPAGE_852=m
# CONFIG_NLS_CODEPAGE_855 is not set
CONFIG_NLS_CODEPAGE_857=m
CONFIG_NLS_CODEPAGE_860=m
# CONFIG_NLS_CODEPAGE_861 is not set
CONFIG_NLS_CODEPAGE_862=m
CONFIG_NLS_CODEPAGE_863=y
CONFIG_NLS_CODEPAGE_864=m
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
CONFIG_NLS_CODEPAGE_936=m
CONFIG_NLS_CODEPAGE_950=y
# CONFIG_NLS_CODEPAGE_932 is not set
CONFIG_NLS_CODEPAGE_949=m
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
CONFIG_NLS_CODEPAGE_1251=y
# CONFIG_NLS_ASCII is not set
# CONFIG_NLS_ISO8859_1 is not set
CONFIG_NLS_ISO8859_2=m
CONFIG_NLS_ISO8859_3=y
CONFIG_NLS_ISO8859_4=m
CONFIG_NLS_ISO8859_5=y
CONFIG_NLS_ISO8859_6=y
CONFIG_NLS_ISO8859_7=m
# CONFIG_NLS_ISO8859_9 is not set
CONFIG_NLS_ISO8859_13=y
CONFIG_NLS_ISO8859_14=m
CONFIG_NLS_ISO8859_15=y
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=y
CONFIG_DLM=m
CONFIG_DLM_DEBUG=y

#
# Kernel hacking
#
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_PRINTK_TIME=y
CONFIG_ALLOW_WARNINGS=y
CONFIG_ENABLE_WARN_DEPRECATED=y
# CONFIG_ENABLE_MUST_CHECK is not set
CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y
CONFIG_UNUSED_SYMBOLS=y
CONFIG_DEBUG_FS=y
CONFIG_HEADERS_CHECK=y
# CONFIG_DEBUG_SECTION_MISMATCH is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_SHIRQ=y
CONFIG_DETECT_SOFTLOCKUP=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1
CONFIG_DETECT_HUNG_TASK=y
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=1
# CONFIG_SCHED_DEBUG is not set
CONFIG_SCHEDSTATS=y
# CONFIG_TIMER_STATS is not set
CONFIG_DEBUG_OBJECTS=y
CONFIG_DEBUG_OBJECTS_SELFTEST=y
CONFIG_DEBUG_OBJECTS_FREE=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
CONFIG_DEBUG_KMEMLEAK=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=400
CONFIG_DEBUG_KMEMLEAK_TEST=y
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_PI_LIST=y
CONFIG_RT_MUTEX_TESTER=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_PROVE_LOCKING=y
CONFIG_LOCKDEP=y
CONFIG_LOCK_STAT=y
CONFIG_DEBUG_LOCKDEP=y
CONFIG_TRACE_IRQFLAGS=y
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
CONFIG_STACKTRACE=y
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_HIGHMEM is not set
# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_VM is not set
CONFIG_DEBUG_VIRTUAL=y
CONFIG_DEBUG_WRITECOUNT=y
# CONFIG_DEBUG_MEMORY_INIT is not set
# CONFIG_DEBUG_LIST is not set
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_NOTIFIERS=y
CONFIG_ARCH_WANT_FRAME_POINTERS=y
CONFIG_FRAME_POINTER=y
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_RCU_TORTURE_TEST=m
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_KPROBES_SANITY_TEST is not set
CONFIG_BACKTRACE_SELF_TEST=y
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
CONFIG_LKDTM=m
CONFIG_FAULT_INJECTION=y
CONFIG_FAILSLAB=y
CONFIG_FAIL_PAGE_ALLOC=y
# CONFIG_FAIL_MAKE_REQUEST is not set
# CONFIG_FAIL_IO_TIMEOUT is not set
CONFIG_FAULT_INJECTION_DEBUG_FS=y
CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
# CONFIG_LATENCYTOP is not set
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
CONFIG_DEBUG_PAGEALLOC=y
CONFIG_USER_STACKTRACE_SUPPORT=y
CONFIG_NOP_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_RING_BUFFER=y
CONFIG_EVENT_TRACING=y
CONFIG_CONTEXT_SWITCH_TRACER=y
CONFIG_TRACING=y
CONFIG_TRACING_SUPPORT=y
# CONFIG_FTRACE is not set
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
# CONFIG_BUILD_DOCSRC is not set
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DMA_API_DEBUG=y
CONFIG_SAMPLES=y
# CONFIG_SAMPLE_MARKERS is not set
CONFIG_SAMPLE_TRACEPOINTS=m
# CONFIG_SAMPLE_TRACE_EVENTS is not set
CONFIG_SAMPLE_KOBJECT=m
CONFIG_SAMPLE_KPROBES=m
CONFIG_SAMPLE_KRETPROBES=m
CONFIG_SAMPLE_HW_BREAKPOINT=m
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_KGDB=y
# CONFIG_KGDB_SERIAL_CONSOLE is not set
# CONFIG_KGDB_TESTS is not set
CONFIG_HAVE_ARCH_KMEMCHECK=y
CONFIG_STRICT_DEVMEM=y
# CONFIG_X86_VERBOSE_BOOTUP is not set
CONFIG_EARLY_PRINTK=y
CONFIG_EARLY_PRINTK_DBGP=y
# CONFIG_DEBUG_STACKOVERFLOW is not set
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_X86_PTDUMP=y
# CONFIG_DEBUG_RODATA is not set
CONFIG_DEBUG_NX_TEST=m
# CONFIG_4KSTACKS is not set
CONFIG_DOUBLEFAULT=y
# CONFIG_IOMMU_STRESS is not set
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
CONFIG_IO_DELAY_TYPE_0X80=0
CONFIG_IO_DELAY_TYPE_0XED=1
CONFIG_IO_DELAY_TYPE_UDELAY=2
CONFIG_IO_DELAY_TYPE_NONE=3
# CONFIG_IO_DELAY_0X80 is not set
CONFIG_IO_DELAY_0XED=y
# CONFIG_IO_DELAY_UDELAY is not set
# CONFIG_IO_DELAY_NONE is not set
CONFIG_DEFAULT_IO_DELAY_TYPE=1
CONFIG_DEBUG_BOOT_PARAMS=y
CONFIG_CPA_DEBUG=y
CONFIG_OPTIMIZE_INLINING=y

#
# Security options
#
CONFIG_KEYS=y
# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
CONFIG_SECURITY_NETWORK_XFRM=y
CONFIG_SECURITY_PATH=y
CONFIG_SECURITY_FILE_CAPABILITIES=y
# CONFIG_SECURITY_ROOTPLUG is not set
CONFIG_LSM_MMAP_MIN_ADDR=65536
CONFIG_SECURITY_SELINUX=y
# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set
# CONFIG_SECURITY_SELINUX_DISABLE is not set
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
CONFIG_SECURITY_TOMOYO=y
CONFIG_IMA=y
CONFIG_IMA_MEASURE_PCR_IDX=10
CONFIG_IMA_AUDIT=y
CONFIG_IMA_LSM_RULES=y
CONFIG_XOR_BLOCKS=m
CONFIG_ASYNC_CORE=m
CONFIG_ASYNC_MEMCPY=m
CONFIG_ASYNC_XOR=m
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_FIPS=y
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=y
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_PCOMP=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
CONFIG_CRYPTO_GF128MUL=m
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_WORKQUEUE=y
CONFIG_CRYPTO_CRYPTD=m
CONFIG_CRYPTO_AUTHENC=m
CONFIG_CRYPTO_TEST=m

#
# Authenticated Encryption with Associated Data
#
# CONFIG_CRYPTO_CCM is not set
CONFIG_CRYPTO_GCM=m
CONFIG_CRYPTO_SEQIV=y

#
# Block modes
#
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=m
CONFIG_CRYPTO_ECB=m
# CONFIG_CRYPTO_LRW is not set
# CONFIG_CRYPTO_PCBC is not set
CONFIG_CRYPTO_XTS=m

#
# Hash modes
#
CONFIG_CRYPTO_HMAC=y
# CONFIG_CRYPTO_XCBC is not set

#
# Digest
#
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32C_INTEL=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=y
# CONFIG_CRYPTO_RMD128 is not set
CONFIG_CRYPTO_RMD160=y
# CONFIG_CRYPTO_RMD256 is not set
CONFIG_CRYPTO_RMD320=y
CONFIG_CRYPTO_SHA1=y
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
CONFIG_CRYPTO_TGR192=m
CONFIG_CRYPTO_WP512=y

#
# Ciphers
#
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_AES_586=y
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_CAMELLIA=m
CONFIG_CRYPTO_CAST5=y
# CONFIG_CRYPTO_CAST6 is not set
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_FCRYPT=y
# CONFIG_CRYPTO_KHAZAD is not set
CONFIG_CRYPTO_SALSA20=m
CONFIG_CRYPTO_SALSA20_586=m
CONFIG_CRYPTO_SEED=y
CONFIG_CRYPTO_SERPENT=y
CONFIG_CRYPTO_TEA=y
CONFIG_CRYPTO_TWOFISH=m
CONFIG_CRYPTO_TWOFISH_COMMON=y
CONFIG_CRYPTO_TWOFISH_586=y

#
# Compression
#
CONFIG_CRYPTO_DEFLATE=y
CONFIG_CRYPTO_ZLIB=y
CONFIG_CRYPTO_LZO=m

#
# Random Number Generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
# CONFIG_CRYPTO_HW is not set
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_VIRTUALIZATION=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_KVM_AMD=m
CONFIG_KVM_TRACE=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_RING=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_BINARY_PRINTF=y

#
# Library routines
#
CONFIG_BITREVERSE=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
CONFIG_GENERIC_FIND_LAST_BIT=y
CONFIG_CRC_CCITT=m
CONFIG_CRC16=y
CONFIG_CRC_T10DIF=y
CONFIG_CRC_ITU_T=y
CONFIG_CRC32=y
CONFIG_CRC7=m
CONFIG_LIBCRC32C=y
CONFIG_AUDIT_GENERIC=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=m
CONFIG_LZO_DECOMPRESS=m
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_NLATTR=y

[-- Attachment #3: crash.log --]
[-- Type: text/plain, Size: 16615 bytes --]

[    0.000000] Linux version 2.6.31-rc8-tip-01272-gcfc796e-dirty (mingo@sirius) (gcc version 4.3.2 20081105 (Red Hat 4.3.2-7) (GCC) ) #9056 Tue Sep 1 09:32:44 CEST 2009
[    0.000000] console [earlyser0] enabled
[    0.000000] debug: ignoring loglevel setting.
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   UMC UMC UMC UMC
[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 000000003fff0000 (usable)
[    0.000000]  BIOS-e820: 000000003fff0000 - 000000003fff3000 (ACPI NVS)
[    0.000000]  BIOS-e820: 000000003fff3000 - 0000000040000000 (ACPI data)
[    0.000000]  BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
[    0.000000]  BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
[    0.000000] MPS support code is not built-in.
[    0.000000] Using acpi=off or acpi=noirq or pci=noacpi may have problem
[    0.000000] last_pfn = 0x3fff0 max_arch_pfn = 0x100000
[    0.000000] MTRR default type: uncachable
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-C7FFF write-protect
[    0.000000]   C8000-FFFFF uncachable
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 0000000000 mask FFC0000000 write-back
[    0.000000]   1 disabled
[    0.000000]   2 disabled
[    0.000000]   3 disabled
[    0.000000]   4 disabled
[    0.000000]   5 disabled
[    0.000000]   6 disabled
[    0.000000]   7 disabled
[    0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
[    0.000000] only 135MB highmem pages available, ignoring highmem size of 512MB!
[    0.000000] e820 update range: 0000000000001000 - 0000000000010000 (usable) ==> (reserved)
[    0.000000] Scanning 1 areas for low memory corruption
[    0.000000] modified physical RAM map:
[    0.000000]  modified: 0000000000000000 - 0000000000001000 (usable)
[    0.000000]  modified: 0000000000001000 - 0000000000010000 (reserved)
[    0.000000]  modified: 0000000000010000 - 000000000009f800 (usable)
[    0.000000]  modified: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  modified: 00000000000f0000 - 0000000000100000 (reserved)
[    0.000000]  modified: 0000000000100000 - 000000003fff0000 (usable)
[    0.000000]  modified: 000000003fff0000 - 000000003fff3000 (ACPI NVS)
[    0.000000]  modified: 000000003fff3000 - 0000000040000000 (ACPI data)
[    0.000000]  modified: 00000000e0000000 - 00000000f0000000 (reserved)
[    0.000000]  modified: 00000000fec00000 - 0000000100000000 (reserved)
[    0.000000] initial memory mapped : 0 - 02800000
[    0.000000] init_memory_mapping: 0000000000000000-00000000377fe000
[    0.000000]  0000000000 - 00377fe000 page 4k
[    0.000000] kernel direct mapping tables up to 377fe000 @ 100000-1e1000
[    0.000000] 135MB HIGHMEM available.
[    0.000000] 887MB LOWMEM available.
[    0.000000]   mapped low ram: 0 - 377fe000
[    0.000000]   low ram: 0 - 377fe000
[    0.000000]   node 0 low ram: 00000000 - 377fe000
[    0.000000]   node 0 bootmap 00010000 - 00016f00
[    0.000000] (6 early reservations) ==> bootmem [0000000000 - 00377fe000]
[    0.000000]   #0 [0000000000 - 0000001000]   BIOS data page ==> [0000000000 - 0000001000]
[    0.000000]   #1 [0001000000 - 00024fadd8]    TEXT DATA BSS ==> [0001000000 - 00024fadd8]
[    0.000000]   #2 [000009f800 - 0000100000]    BIOS reserved ==> [000009f800 - 0000100000]
[    0.000000]   #3 [00024fb000 - 0002505000]              BRK ==> [00024fb000 - 0002505000]
[    0.000000]   #4 [0000100000 - 00001d4000]          PGTABLE ==> [0000100000 - 00001d4000]
[    0.000000]   #5 [0000010000 - 0000017000]          BOOTMAP ==> [0000010000 - 0000017000]
[    0.000000] Zone PFN ranges:
[    0.000000]   DMA      0x00000000 -> 0x00001000
[    0.000000]   Normal   0x00001000 -> 0x000377fe
[    0.000000]   HighMem  0x000377fe -> 0x0003fff0
[    0.000000] Movable zone start PFN for each node
[    0.000000] early_node_map[3] active PFN ranges
[    0.000000]     0: 0x00000000 -> 0x00000001
[    0.000000]     0: 0x00000010 -> 0x0000009f
[    0.000000]     0: 0x00000100 -> 0x0003fff0
[    0.000000] On node 0 totalpages: 262016
[    0.000000] free_area_init_node: node 0, pgdat c1d32484, node_mem_map c2506000
[    0.000000]   DMA zone: 32 pages used for memmap
[    0.000000]   DMA zone: 0 pages reserved
[    0.000000]   DMA zone: 3952 pages, LIFO batch:0
[    0.000000]   Normal zone: 1744 pages used for memmap
[    0.000000]   Normal zone: 221486 pages, LIFO batch:31
[    0.000000]   HighMem zone: 272 pages used for memmap
[    0.000000]   HighMem zone: 34530 pages, LIFO batch:7
[    0.000000] Using APIC driver default
[    0.000000] Nvidia board detected. Ignoring ACPI timer override.
[    0.000000] If you got timer trouble try acpi_use_timer_override
[    0.000000] APIC: disable apic facility
[    0.000000] nr_irqs_gsi: 16
[    0.000000] PM: Registered nosave memory: 0000000000001000 - 0000000000010000
[    0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000
[    0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000f0000
[    0.000000] PM: Registered nosave memory: 00000000000f0000 - 0000000000100000
[    0.000000] Allocating PCI resources starting at 40000000 (gap: 40000000:a0000000)
[    0.000000] Booting paravirtualized kernel on bare hardware
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 259968
[    0.000000] Kernel command line: root=/dev/sda1 earlyprintk=serial,ttyS0,115200,keep console=tty debug initcall_debug enforcing=0 apic=verbose ignore_loglevel sysrq_always_enabled selinux=0 nmi_watchdog=0 3 panic=1 3 maxcpus=1 no_hz=off nmi_watchdog=0 noapic lapic hpet=disable idle=mwait highmem=512m acpi=off pci=nomsi
[    0.000000] debug: sysrq always enabled.
[    0.000000] PID hash table entries: 4096 (order: 12, 16384 bytes)
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Enabling fast FPU save and restore... done.
[    0.000000] Enabling unmasked SIMD FPU exception support... done.
[    0.000000] Initializing CPU#0
[    0.000000] Initializing HighMem for node 0 (000377fe:0003fff0)
[    0.000000] Memory: 1016324k/1048512k available (8212k kernel code, 31428k reserved, 5350k data, 448k init, 139208k highmem)
[    0.000000] virtual kernel memory layout:
[    0.000000]     fixmap  : 0xfffa3000 - 0xfffff000   ( 368 kB)
[    0.000000]     pkmap   : 0xff800000 - 0xffc00000   (4096 kB)
[    0.000000]     vmalloc : 0xf7ffe000 - 0xff7fe000   ( 120 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xf77fe000   ( 887 MB)
[    0.000000]       .init : 0xc1d3f000 - 0xc1daf000   ( 448 kB)
[    0.000000]       .data : 0xc180537e - 0xc1d3ebd4   (5350 kB)
[    0.000000]       .text : 0xc1000000 - 0xc180537e   (8212 kB)
[    0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok.
[    0.000000] SLUB: Genslabs=13, HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] Hierarchical RCU implementation.
[    0.000000] NR_IRQS:2304 nr_irqs:256
[    0.000000] spurious 8259A interrupt: IRQ7.
[    0.000000] Console: colour VGA+ 80x25
[    0.000000] console [tty0] enabled
[    0.000000] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[    0.000000] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.000000] ... MAX_LOCK_DEPTH:          48
[    0.000000] ... MAX_LOCKDEP_KEYS:        8191
[    0.000000] ... CLASSHASH_SIZE:          4096
[    0.000000] ... MAX_LOCKDEP_ENTRIES:     16384
[    0.000000] ... MAX_LOCKDEP_CHAINS:      32768
[    0.000000] ... CHAINHASH_SIZE:          16384
[    0.000000]  memory used by lock dependency info: 3823 kB
[    0.000000]  per task-struct memory footprint: 1920 bytes
[    0.000000] ODEBUG: 10 of 10 active objects replaced
[    0.000000] ODEBUG: selftest passed
[    0.000000] Fast TSC calibration using PIT
[    0.000000] Detected 2010.574 MHz processor.
[    0.003038] Calibrating delay loop (skipped), value calculated using timer frequency.. 4021.14 BogoMIPS (lpj=2010574)
[    0.005058] Security Framework initialized
[    0.006016] SELinux:  Initializing.
[    0.007085] SELinux:  Starting in permissive mode
[    0.008045] Mount-cache hash table entries: 512
[    0.012632] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
[    0.013004] CPU: L2 Cache: 512K (64 bytes/line)
[    0.014004] mce: CPU supports 5 MCE banks
[    0.015033] Performance Counters: AMD PMU driver.
[    0.017028] ... version:                 0
[    0.018002] ... bit width:               48
[    0.019002] ... generic counters:        4
[    0.020002] ... value mask:              0000ffffffffffff
[    0.021002] ... max period:              00007fffffffffff
[    0.022002] ... fixed-purpose counters:  0
[    0.023002] ... counter mask:            000000000000000f
[    0.024001] CPU: AMD Athlon(tm) 64 X2 Dual Core Processor 3800+ stepping 02
[    0.027010] Checking 'hlt' instruction... OK.
[    0.034023] calling  spawn_ksoftirqd+0x0/0x48 @ 1
[    0.035025] BUG: unable to handle kernel NULL pointer dereference at (null)
[    0.035994] IP: [<c102c79a>] try_to_wake_up+0x2f/0x174
[    0.035994] *pde = 00000000 
[    0.035994] Oops: 0000 [#1] DEBUG_PAGEALLOC
[    0.035994] last sysfs file: 
[    0.035994] Modules linked in:
[    0.035994] 
[    0.035994] Pid: 1, comm: swapper Not tainted (2.6.31-rc8-tip-01272-gcfc796e-dirty #9056) 
[    0.035994] EIP: 0060:[<c102c79a>] EFLAGS: 00010046 CPU: 0
[    0.035994] EIP is at try_to_wake_up+0x2f/0x174
[    0.035994] EAX: e7775505 EBX: 0000000f ECX: 00000000 EDX: 00000000
[    0.035994] ESI: 00000000 EDI: 00000000 EBP: f7051f20 ESP: f7051efc
[    0.035994]  DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068
[    0.035994] Process swapper (pid: 1, ti=f7050000 task=f7048000 task.ti=f7050000)
[    0.035994] Stack:
[    0.035994]  00000246 c104920f 00000000 c1b95fbc 00000246 e7775505 c1a46b24 00000000
[    0.035994] <0> c1d50f2a f7051f2c c102c954 e7775505 f7051f84 c1049219 c1035c95 00000000
[    0.035994] <0> c1a3c54f 00000000 00000001 dead4ead ffffffff ffffffff c1ec1e18 00000000
[    0.035994] Call Trace:
[    0.035994]  [<c104920f>] ? kthread_create+0x63/0xdc
[    0.035994]  [<c1d50f2a>] ? spawn_ksoftirqd+0x0/0x48
[    0.035994]  [<c102c954>] ? wake_up_process+0x1b/0x2e
[    0.035994]  [<c1049219>] ? kthread_create+0x6d/0xdc
[    0.035994]  [<c1035c95>] ? ksoftirqd+0x0/0xb3
[    0.035994]  [<c1d837a8>] ? cpu_callback+0x3e/0x94
[    0.035994]  [<c1035c95>] ? ksoftirqd+0x0/0xb3
[    0.035994]  [<c1d50f4c>] ? spawn_ksoftirqd+0x22/0x48
[    0.035994]  [<c100113e>] ? _stext+0x56/0x15a
[    0.035994]  [<c1d3f30c>] ? kernel_init+0x42/0xec
[    0.035994]  [<c1d3f2ca>] ? kernel_init+0x0/0xec
[    0.035994]  [<c10037c7>] ? kernel_thread_helper+0x7/0x58
[    0.035994] Code: 56 89 c7 53 89 d3 83 ec 18 89 4d e4 65 a1 14 00 00 00 89 45 f0 31 c0 8d 55 ec 89 f8 e8 34 d3 ff ff 89 45 e8 31 f6 e8 3d f5 ff ff <8b> 07 85 c3 0f 84 15 01 00 00 31 f6 83 7f 48 00 0f 85 c8 00 00 
[    0.035994] EIP: [<c102c79a>] try_to_wake_up+0x2f/0x174 SS:ESP 0068:f7051efc
[    0.035994] CR2: 0000000000000000
[    0.035994] ---[ end trace a7919e7f17c0a725 ]---
[    0.035994] Kernel panic - not syncing: Fatal exception
[    0.035994] Rebooting in 1 seconds..
[    0.035994] BUG: unable to handle kernel NULL pointer dereference at 0000008c
[    0.035994] IP: [<c17c8b24>] klist_next+0x1b/0xaf
[    0.035994] *pde = 00000000 
[    0.035994] Oops: 0000 [#2] DEBUG_PAGEALLOC
[    0.035994] last sysfs file: 
[    0.035994] Modules linked in:
[    0.035994] 
[    0.035994] Pid: 1, comm: swapper Tainted: G      D    (2.6.31-rc8-tip-01272-gcfc796e-dirty #9056) 
[    0.035994] EIP: 0060:[<c17c8b24>] EFLAGS: 00010046 CPU: 0
[    0.035994] EIP is at klist_next+0x1b/0xaf
[    0.035994] EAX: 0000005c EBX: f7051cc0 ECX: 00000000 EDX: f7051cc0
[    0.035994] ESI: f7051cc0 EDI: 00000000 EBP: f7051cb4 ESP: f7051ca0
[    0.035994]  DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068
[    0.035994] Process swapper (pid: 1, ti=f7050000 task=f7048000 task.ti=f7050000)
[    0.035994] Stack:
[    0.035994]  f7051cb4 e7775505 f7051cc0 f7051cc0 c133e1b4 f7051cd8 c140909d 00000000
[    0.035994] <0> 0000005c 00000000 e7775505 00000000 00001078 00000100 f7051cec c133f054
[    0.035994] <0> c133e1b4 e7775505 00000000 f7051d10 c1344864 00000000 ffffffff ffffffff
[    0.035994] Call Trace:
[    0.035994]  [<c133e1b4>] ? find_anything+0x0/0x26
[    0.035994]  [<c140909d>] ? bus_find_device+0x5f/0x91
[    0.035994]  [<c133f054>] ? no_pci_devices+0x25/0x4d
[    0.035994]  [<c133e1b4>] ? find_anything+0x0/0x26
[    0.035994]  [<c1344864>] ? pci_get_subsys+0x2c/0x85
[    0.035994]  [<c13448db>] ? pci_get_device+0x1e/0x34
[    0.035994]  [<c10198ab>] ? mach_reboot_fixups+0x35/0x5c
[    0.035994]  [<c1015455>] ? native_machine_emergency_restart+0x94/0x14f
[    0.035994]  [<c10151a4>] ? machine_emergency_restart+0x21/0x34
[    0.035994]  [<c10433b8>] ? emergency_restart+0x16/0x29
[    0.035994]  [<c17fe634>] ? panic+0xb2/0xde
[    0.035994]  [<c1801978>] ? oops_end+0x84/0xa3
[    0.035994]  [<c101d399>] ? no_context+0x119/0x134
[    0.035994]  [<c101d510>] ? __bad_area_nosemaphore+0x15c/0x175
[    0.035994]  [<c1029af4>] ? task_rq_lock+0x30/0x48
[    0.035994]  [<c10491eb>] ? kthread_create+0x3f/0xdc
[    0.035994]  [<c107b679>] ? rcu_bh_qs+0x4f/0x6c
[    0.035994]  [<c101d546>] ? bad_area_nosemaphore+0x1d/0x34
[    0.035994]  [<c1802e1b>] ? do_page_fault+0x18f/0x2db
[    0.035994]  [<c1802c8c>] ? do_page_fault+0x0/0x2db
[    0.035994]  [<c1800ff0>] ? error_code+0x70/0x80
[    0.035994]  [<c102c79a>] ? try_to_wake_up+0x2f/0x174
[    0.035994]  [<c104920f>] ? kthread_create+0x63/0xdc
[    0.035994]  [<c1d50f2a>] ? spawn_ksoftirqd+0x0/0x48
[    0.035994]  [<c102c954>] ? wake_up_process+0x1b/0x2e
[    0.035994]  [<c1049219>] ? kthread_create+0x6d/0xdc
[    0.035994]  [<c1035c95>] ? ksoftirqd+0x0/0xb3
[    0.035994]  [<c1d837a8>] ? cpu_callback+0x3e/0x94
[    0.035994]  [<c1035c95>] ? ksoftirqd+0x0/0xb3
[    0.035994]  [<c1d50f4c>] ? spawn_ksoftirqd+0x22/0x48
[    0.035994]  [<c100113e>] ? _stext+0x56/0x15a
[    0.035994]  [<c1d3f30c>] ? kernel_init+0x42/0xec
[    0.035994]  [<c1d3f2ca>] ? kernel_init+0x0/0xec
[    0.035994]  [<c10037c7>] ? kernel_thread_helper+0x7/0x58
[    0.035994] Code: 65 33 05 14 00 00 00 74 05 e8 d4 75 86 ff c9 c3 55 89 e5 57 56 89 c6 53 83 ec 08 65 a1 14 00 00 00 89 45 f0 31 c0 8b 06 8b 7e 04 <8b> 50 30 89 55 ec e8 f0 7d 03 00 85 ff 74 22 8b 47 04 ba 97 8c 
[    0.035994] EIP: [<c17c8b24>] klist_next+0x1b/0xaf SS:ESP 0068:f7051ca0
[    0.035994] CR2: 000000000000008c
[    0.035994] ---[ end trace a7919e7f17c0a726 ]---
[    0.035994] Kernel panic - not syncing: Fatal exception
[    0.035994] Rebooting in 1 seconds..
[    0.035994] BUG: unable to handle kernel NULL pointer dereference at 0000008c
[    0.035994] IP: [<c17c8b24>] klist_next+0x1b/0xaf
[    0.035994] *pde = 00000000 
[    0.035994] Oops: 0000 [#3] DEBUG_PAGEALLOC
[    0.035994] last sysfs file: 
[    0.035994] Modules linked in:
[    0.035994] 
[    0.035994] Pid: 1, comm: swapper Tainted: G      D    (2.6.31-rc8-tip-01272-gcfc796e-dirty #9056) 
[    0.035994] EIP: 0060:[<c17c8b24>] EFLAGS: 00010046 CPU: 0
[    0.035994] EIP is at klist_next+0x1b/0xaf
[    0.035994] EAX: 0000005c EBX: f7051a64 ECX: 00000000 EDX: f7051a64
[    0.035994] ESI: f7051a64 EDI: 00000000 EBP: f7051a58 ESP: f7051a44
[    0.035994]  DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068
[    0.035994] Process swapper (pid: 1, ti=f7050000 task=f7048000 task.ti=f7050000)
[    0.035994] Stack:
[    0.035994]  f7051a58 e7775505 f7051a64 f7051a64 c133e1b4 f7051a7c c140909d 00000000
[    0.035994] <0> 0000005c 00000000 e7775505 00000000 00001078 00000100 f7051a90 c133f054
[    0.035994] <0> c133e1b4 e7775505 00000000 f7051ab4 c1344864 00000000 ffffffff ffffffff
[    0.035994] Call Trace:
[    0.035994]  [<c133e1b4>] ? find_anything+0x0/0x26
[    0.035994]  [<c140909d>] ? bus_find_device+0x5f/0x91
[    0.035994]  [<c133f054>] ? no_pci_devices+0x25/0x4d
[    0.035994]  [<c133e1b4>] ? find_anything+0x0/0x26
[    0.035994]  [<c1344864>] ? pci_get_subsys+0x2c/0x85
[    0.035994]  [<c13448db>] ? pci_get_device+0x1e/0x34

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH] kthreads: Fix startup synchronization boot crash
  2009-09-01 10:03   ` Ingo Molnar
@ 2009-09-01 11:39     ` Ingo Molnar
  2009-09-01 13:04       ` Oleg Nesterov
  0 siblings, 1 reply; 30+ messages in thread
From: Ingo Molnar @ 2009-09-01 11:39 UTC (permalink / raw)
  To: arjan, jeremy, mschmidt, mingo, hpa, linux-kernel, tj, tglx,
	Linus Torvalds, Andrew Morton, Oleg Nesterov
  Cc: linux-tip-commits


* Ingo Molnar <mingo@elte.hu> wrote:

> FYI, -tip testing found a nasty bootup crash:
> 
> [    0.027010] Checking 'hlt' instruction... OK.
> [    0.034023] calling  spawn_ksoftirqd+0x0/0x48 @ 1
> [    0.035025] BUG: unable to handle kernel NULL pointer dereference at (null)
> [    0.035994] IP: [<c102c79a>] try_to_wake_up+0x2f/0x174
> [    0.035994] *pde = 00000000 
> [    0.035994] Oops: 0000 [#1] DEBUG_PAGEALLOC
> [    0.035994] last sysfs file: 
> 
> and i bisected it down to this commit. The crash was probably 
> pre-existing - stackprotector was not enabled in this type of 
> cross-build i did.

here's another crashlog:

[    0.025010] Checking 'hlt' instruction... OK.
[    0.032017] calling  spawn_ksoftirqd+0x0/0x48 @ 1
[    0.033024] BUG: unable to handle kernel NULL pointer dereference at (null)
[    0.033994] IP: [<c102b00d>] try_to_wake_up+0x2f/0x174
[    0.033994] *pde = 00000000 
[    0.033994] Oops: 0000 [#1] DEBUG_PAGEALLOC
[    0.033994] last sysfs file: 
[    0.033994] Modules linked in:
[    0.033994] 
[    0.033994] Pid: 1, comm: swapper Not tainted (2.6.31-rc6-00024-g23386d6-dirty #9074) 
[    0.033994] EIP: 0060:[<c102b00d>] EFLAGS: 00010046 CPU: 0
[    0.033994] EIP is at try_to_wake_up+0x2f/0x174
[    0.033994] EAX: 0935b29c EBX: 0000000f ECX: 00000000 EDX: 00000000
[    0.033994] ESI: 00000000 EDI: 00000000 EBP: f7051edc ESP: f7051eb8
[    0.033994]  DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068
[    0.033994] Process swapper (pid: 1, ti=f7050000 task=f7048000 task.ti=f7050000)
[    0.033994] Stack:
[    0.033994]  00000246 c1045384 00000000 c1b8800c 00000246 0935b29c c1a3b088 00000000
[    0.033994] <0> 00000000 f7051ee8 c102b1c7 0935b29c f7051f40 c104538e c1034aed 00000000
[    0.033994] <0> c1a30e5f 00000000 00000001 dead4ead ffffffff ffffffff c1eb1e04 00000000
[    0.033994] Call Trace:
[    0.033994]  [<c1045384>] ? kthread_create+0x63/0xdb
[    0.033994]  [<c102b1c7>] ? wake_up_process+0x1b/0x2e
[    0.033994]  [<c104538e>] ? kthread_create+0x6d/0xdb
[    0.033994]  [<c1034aed>] ? ksoftirqd+0x0/0xb8
[    0.033994]  [<c1048dc8>] ? ktime_get_ts+0x4e/0x64
[    0.033994]  [<c1d7446b>] ? cpu_callback+0x3e/0x94
[    0.033994]  [<c1034aed>] ? ksoftirqd+0x0/0xb8
[    0.033994]  [<c1d41f3c>] ? spawn_ksoftirqd+0x22/0x48
[    0.033994]  [<c100113c>] ? _stext+0x54/0x135
[    0.033994]  [<c1d41f1a>] ? spawn_ksoftirqd+0x0/0x48
[    0.033994]  [<c1002e75>] ? restore_all_notrace+0x0/0x18
[    0.033994]  [<c1055ce9>] ? trace_hardirqs_on_caller+0xb9/0xf2
[    0.033994]  [<c13294ec>] ? trace_hardirqs_on_thunk+0xc/0x10
[    0.033994]  [<c1002e75>] ? restore_all_notrace+0x0/0x18
[    0.033994]  [<c1d302ab>] ? kernel_init+0x0/0xec
[    0.033994]  [<c1d302ed>] ? kernel_init+0x42/0xec
[    0.033994]  [<c1d302ab>] ? kernel_init+0x0/0xec
[    0.033994]  [<c10037a7>] ? kernel_thread_helper+0x7/0x58
[    0.033994] Code: 56 89 c7 53 89 d3 83 ec 18 89 4d e4 65 a1 14 00 00 00 89 45 f0 31 c0 8d 55 ec 89 f8 e8 88 d3 ff ff 89 45 e8 31 f6 e8 8e f5 ff ff <8b> 07 85 c3 0f 84 15 01 00 00 31 f6 83 7f 48 00 0f 85 c8 00 00 
[    0.033994] EIP: [<c102b00d>] try_to_wake_up+0x2f/0x174 SS:ESP 0068:f7051eb8

here's the disassembly of try_to_wake_up():

c102afde <try_to_wake_up>:
c102afde:	55                   	push   %ebp
c102afdf:	89 e5                	mov    %esp,%ebp
c102afe1:	57                   	push   %edi
c102afe2:	56                   	push   %esi
c102afe3:	89 c7                	mov    %eax,%edi
c102afe5:	53                   	push   %ebx
c102afe6:	89 d3                	mov    %edx,%ebx
c102afe8:	83 ec 18             	sub    $0x18,%esp
c102afeb:	89 4d e4             	mov    %ecx,-0x1c(%ebp)
c102afee:	65 a1 14 00 00 00    	mov    %gs:0x14,%eax
c102aff4:	89 45 f0             	mov    %eax,-0x10(%ebp)
c102aff7:	31 c0                	xor    %eax,%eax
c102aff9:	8d 55 ec             	lea    -0x14(%ebp),%edx
c102affc:	89 f8                	mov    %edi,%eax
c102affe:	e8 88 d3 ff ff       	call   c102838b <task_rq_lock>
c102b003:	89 45 e8             	mov    %eax,-0x18(%ebp)
c102b006:	31 f6                	xor    %esi,%esi
c102b008:	e8 8e f5 ff ff       	call   c102a59b <update_rq_clock>
c102b00d:	8b 07                	mov    (%edi),%eax
c102b00f:	85 c3                	test   %eax,%ebx
c102b011:	0f 84 15 01 00 00    	je     c102b12c <try_to_wake_up+0x14e>
c102b017:	31 f6                	xor    %esi,%esi
c102b019:	83 7f 48 00          	cmpl   $0x0,0x48(%edi)
c102b01d:	0f 85 c8 00 00 00    	jne    c102b0eb <try_to_wake_up+0x10d>
c102b023:	83 87 1c 01 00 00 01 	addl   $0x1,0x11c(%edi)
c102b02a:	83 97 20 01 00 00 00 	adcl   $0x0,0x120(%edi)
c102b031:	83 7d e4 00          	cmpl   $0x0,-0x1c(%ebp)
c102b035:	74 0e                	je     c102b045 <try_to_wake_up+0x67>
c102b037:	83 87 24 01 00 00 01 	addl   $0x1,0x124(%edi)
c102b03e:	83 97 28 01 00 00 00 	adcl   $0x0,0x128(%edi)
c102b045:	83 87 34 01 00 00 01 	addl   $0x1,0x134(%edi)
c102b04c:	83 97 38 01 00 00 00 	adcl   $0x0,0x138(%edi)
c102b053:	8b 45 e8             	mov    -0x18(%ebp),%eax
c102b056:	89 fa                	mov    %edi,%edx
c102b058:	b9 01 00 00 00       	mov    $0x1,%ecx
c102b05d:	be 01 00 00 00       	mov    $0x1,%esi
c102b062:	e8 04 8e ff ff       	call   c1023e6b <activate_task>
c102b067:	89 e0                	mov    %esp,%eax
c102b069:	25 00 e0 ff ff       	and    $0xffffe000,%eax
c102b06e:	f7 40 14 00 ff ff 07 	testl  $0x7ffff00,0x14(%eax)
c102b075:	75 74                	jne    c102b0eb <try_to_wake_up+0x10d>
c102b077:	8b 35 40 2b b8 c1    	mov    0xc1b82b40,%esi
c102b07d:	8b 56 54             	mov    0x54(%esi),%edx
c102b080:	8b 4e 58             	mov    0x58(%esi),%ecx
c102b083:	89 55 dc             	mov    %edx,-0x24(%ebp)
c102b086:	89 4d e0             	mov    %ecx,-0x20(%ebp)
c102b089:	8b 56 70             	mov    0x70(%esi),%edx
c102b08c:	8b 46 6c             	mov    0x6c(%esi),%eax
c102b08f:	89 d1                	mov    %edx,%ecx
c102b091:	09 c1                	or     %eax,%ecx
c102b093:	74 0c                	je     c102b0a1 <try_to_wake_up+0xc3>
c102b095:	8b 4d dc             	mov    -0x24(%ebp),%ecx
c102b098:	8b 5d e0             	mov    -0x20(%ebp),%ebx
c102b09b:	29 c1                	sub    %eax,%ecx
c102b09d:	19 d3                	sbb    %edx,%ebx
c102b09f:	eb 12                	jmp    c102b0b3 <try_to_wake_up+0xd5>
c102b0a1:	8b 4d dc             	mov    -0x24(%ebp),%ecx
c102b0a4:	8b 5d e0             	mov    -0x20(%ebp),%ebx
c102b0a7:	2b 8e 84 00 00 00    	sub    0x84(%esi),%ecx
c102b0ad:	1b 9e 88 00 00 00    	sbb    0x88(%esi),%ebx
c102b0b3:	8b 86 8c 00 00 00    	mov    0x8c(%esi),%eax
c102b0b9:	8b 96 90 00 00 00    	mov    0x90(%esi),%edx
c102b0bf:	29 c1                	sub    %eax,%ecx
c102b0c1:	19 d3                	sbb    %edx,%ebx
c102b0c3:	0f ac d9 03          	shrd   $0x3,%ebx,%ecx
c102b0c7:	c1 fb 03             	sar    $0x3,%ebx
c102b0ca:	01 c1                	add    %eax,%ecx
c102b0cc:	11 d3                	adc    %edx,%ebx
c102b0ce:	8b 46 54             	mov    0x54(%esi),%eax
c102b0d1:	8b 56 58             	mov    0x58(%esi),%edx
c102b0d4:	89 8e 8c 00 00 00    	mov    %ecx,0x8c(%esi)
c102b0da:	89 9e 90 00 00 00    	mov    %ebx,0x90(%esi)
c102b0e0:	89 46 6c             	mov    %eax,0x6c(%esi)
c102b0e3:	89 56 70             	mov    %edx,0x70(%esi)
c102b0e6:	be 01 00 00 00       	mov    $0x1,%esi
c102b0eb:	83 3d 24 79 d2 c1 00 	cmpl   $0x0,0xc1d27924
c102b0f2:	74 1b                	je     c102b10f <try_to_wake_up+0x131>
c102b0f4:	8b 1d 28 79 d2 c1    	mov    0xc1d27928,%ebx
c102b0fa:	85 db                	test   %ebx,%ebx
c102b0fc:	74 11                	je     c102b10f <try_to_wake_up+0x131>
c102b0fe:	89 f1                	mov    %esi,%ecx
c102b100:	89 fa                	mov    %edi,%edx
c102b102:	8b 45 e8             	mov    -0x18(%ebp),%eax
c102b105:	ff 13                	call   *(%ebx)
c102b107:	83 c3 04             	add    $0x4,%ebx
c102b10a:	83 3b 00             	cmpl   $0x0,(%ebx)
c102b10d:	eb ed                	jmp    c102b0fc <try_to_wake_up+0x11e>
c102b10f:	8b 55 e8             	mov    -0x18(%ebp),%edx
c102b112:	8b 4d e4             	mov    -0x1c(%ebp),%ecx
c102b115:	8b 82 34 04 00 00    	mov    0x434(%edx),%eax
c102b11b:	89 fa                	mov    %edi,%edx
c102b11d:	8b 58 28             	mov    0x28(%eax),%ebx
c102b120:	8b 45 e8             	mov    -0x18(%ebp),%eax
c102b123:	ff 53 10             	call   *0x10(%ebx)
c102b126:	c7 07 00 00 00 00    	movl   $0x0,(%edi)
c102b12c:	8b 45 e8             	mov    -0x18(%ebp),%eax
c102b12f:	8b 55 ec             	mov    -0x14(%ebp),%edx
c102b132:	e8 61 e7 7c 00       	call   c17f9898 <_spin_unlock_irqrestore>
c102b137:	8b 4d f0             	mov    -0x10(%ebp),%ecx
c102b13a:	65 33 0d 14 00 00 00 	xor    %gs:0x14,%ecx
c102b141:	89 f0                	mov    %esi,%eax
c102b143:	74 05                	je     c102b14a <try_to_wake_up+0x16c>
c102b145:	e8 59 3f 00 00       	call   c102f0a3 <__stack_chk_fail>
c102b14a:	83 c4 18             	add    $0x18,%esp
c102b14d:	5b                   	pop    %ebx
c102b14e:	5e                   	pop    %esi
c102b14f:	5f                   	pop    %edi
c102b150:	c9                   	leave  
c102b151:	c3                   	ret    

we crash straight after the call to update_rq_clock:

c102b008:	e8 8e f5 ff ff       	call   c102a59b <update_rq_clock>
c102b00d:	8b 07                	mov    (%edi),%eax

EDI got zero:

[    0.035994] EAX: e7775505 EBX: 0000000f ECX: 00000000 EDX: 00000000
[    0.035994] ESI: 00000000 EDI: 00000000 EBP: f7051f20 ESP: f7051efc

update_rq_clock() looks like this:

c102a59b <update_rq_clock>:
c102a59b:	55                   	push   %ebp
c102a59c:	89 e5                	mov    %esp,%ebp
c102a59e:	53                   	push   %ebx
c102a59f:	89 c3                	mov    %eax,%ebx
c102a5a1:	83 ec 04             	sub    $0x4,%esp
c102a5a4:	65 a1 14 00 00 00    	mov    %gs:0x14,%eax
c102a5aa:	89 45 f8             	mov    %eax,-0x8(%ebp)
c102a5ad:	31 c0                	xor    %eax,%eax
c102a5af:	e8 25 03 02 00       	call   c104a8d9 <sched_clock_cpu>
c102a5b4:	89 83 44 04 00 00    	mov    %eax,0x444(%ebx)
c102a5ba:	8b 45 f8             	mov    -0x8(%ebp),%eax
c102a5bd:	65 33 05 14 00 00 00 	xor    %gs:0x14,%eax
c102a5c4:	89 93 48 04 00 00    	mov    %edx,0x448(%ebx)
c102a5ca:	74 05                	je     c102a5d1 <update_rq_clock+0x36>
c102a5cc:	e8 d2 4a 00 00       	call   c102f0a3 <__stack_chk_fail>
c102a5d1:	58                   	pop    %eax
c102a5d2:	5b                   	pop    %ebx
c102a5d3:	c9                   	leave  
c102a5d4:	c3                   	ret    

and sched_clock_cpu() looks like this:

c104a8d9 <sched_clock_cpu>:
c104a8d9:	55                   	push   %ebp
c104a8da:	89 e5                	mov    %esp,%ebp
c104a8dc:	57                   	push   %edi
c104a8dd:	56                   	push   %esi
c104a8de:	89 c6                	mov    %eax,%esi
c104a8e0:	53                   	push   %ebx
c104a8e1:	83 ec 24             	sub    $0x24,%esp
c104a8e4:	65 a1 14 00 00 00    	mov    %gs:0x14,%eax
c104a8ea:	89 45 f0             	mov    %eax,-0x10(%ebp)
c104a8ed:	31 c0                	xor    %eax,%eax
c104a8ef:	83 3d f8 da d2 c1 00 	cmpl   $0x0,0xc1d2daf8
c104a8f6:	74 0e                	je     c104a906 <sched_clock_cpu+0x2d>
c104a8f8:	e8 5a c4 fb ff       	call   c1006d57 <sched_clock>
c104a8fd:	89 c1                	mov    %eax,%ecx
c104a8ff:	89 d3                	mov    %edx,%ebx
c104a901:	e9 19 02 00 00       	jmp    c104ab1f <sched_clock_cpu+0x246>
c104a906:	89 e0                	mov    %esp,%eax
c104a908:	25 00 e0 ff ff       	and    $0xffffe000,%eax
c104a90d:	f6 40 17 04          	testb  $0x4,0x17(%eax)
c104a911:	74 11                	je     c104a924 <sched_clock_cpu+0x4b>
c104a913:	8b 0d c0 a9 b8 c1    	mov    0xc1b8a9c0,%ecx
c104a919:	8b 1d c4 a9 b8 c1    	mov    0xc1b8a9c4,%ebx
c104a91f:	e9 fb 01 00 00       	jmp    c104ab1f <sched_clock_cpu+0x246>
c104a924:	31 c9                	xor    %ecx,%ecx
c104a926:	31 db                	xor    %ebx,%ebx
c104a928:	83 3d f4 da d2 c1 00 	cmpl   $0x0,0xc1d2daf4
c104a92f:	0f 84 ea 01 00 00    	je     c104ab1f <sched_clock_cpu+0x246>
c104a935:	ff 15 10 73 b8 c1    	call   *0xc1b87310
c104a93b:	f6 c4 02             	test   $0x2,%ah
c104a93e:	74 13                	je     c104a953 <sched_clock_cpu+0x7a>
c104a940:	83 3d c0 1e eb c1 00 	cmpl   $0x0,0xc1eb1ec0
c104a947:	75 0a                	jne    c104a953 <sched_clock_cpu+0x7a>
c104a949:	c7 05 c0 1e eb c1 01 	movl   $0x1,0xc1eb1ec0
c104a950:	00 00 00 
c104a953:	e8 ff c3 fb ff       	call   c1006d57 <sched_clock>
c104a958:	85 f6                	test   %esi,%esi
c104a95a:	0f 84 e7 00 00 00    	je     c104aa47 <sched_clock_cpu+0x16e>
c104a960:	2b 05 b0 a9 b8 c1    	sub    0xc1b8a9b0,%eax
c104a966:	c7 05 ac a9 b8 c1 00 	movl   $0x0,0xc1b8a9ac
c104a96d:	00 00 00 
c104a970:	1b 15 b4 a9 b8 c1    	sbb    0xc1b8a9b4,%edx
c104a976:	c7 05 ac a9 b8 c1 00 	movl   $0x0,0xc1b8a9ac
c104a97d:	00 00 00 
c104a980:	8b 35 b8 a9 b8 c1    	mov    0xc1b8a9b8,%esi
c104a986:	8b 3d bc a9 b8 c1    	mov    0xc1b8a9bc,%edi
c104a98c:	85 d2                	test   %edx,%edx
c104a98e:	79 04                	jns    c104a994 <sched_clock_cpu+0xbb>
c104a990:	31 c0                	xor    %eax,%eax
c104a992:	31 d2                	xor    %edx,%edx
c104a994:	89 c1                	mov    %eax,%ecx
c104a996:	a1 c0 a9 b8 c1       	mov    0xc1b8a9c0,%eax
c104a99b:	89 d3                	mov    %edx,%ebx
c104a99d:	8b 15 c4 a9 b8 c1    	mov    0xc1b8a9c4,%edx
c104a9a3:	01 f1                	add    %esi,%ecx
c104a9a5:	89 45 d0             	mov    %eax,-0x30(%ebp)
c104a9a8:	89 f0                	mov    %esi,%eax
c104a9aa:	89 55 d4             	mov    %edx,-0x2c(%ebp)
c104a9ad:	11 fb                	adc    %edi,%ebx
c104a9af:	89 fa                	mov    %edi,%edx
c104a9b1:	2b 45 d0             	sub    -0x30(%ebp),%eax
c104a9b4:	1b 55 d4             	sbb    -0x2c(%ebp),%edx
c104a9b7:	83 fa 00             	cmp    $0x0,%edx
c104a9ba:	7f 15                	jg     c104a9d1 <sched_clock_cpu+0xf8>
c104a9bc:	7c 05                	jl     c104a9c3 <sched_clock_cpu+0xea>
c104a9be:	83 f8 00             	cmp    $0x0,%eax
c104a9c1:	77 0e                	ja     c104a9d1 <sched_clock_cpu+0xf8>
c104a9c3:	8b 45 d0             	mov    -0x30(%ebp),%eax
c104a9c6:	8b 55 d4             	mov    -0x2c(%ebp),%edx
c104a9c9:	89 45 d8             	mov    %eax,-0x28(%ebp)
c104a9cc:	89 55 dc             	mov    %edx,-0x24(%ebp)
c104a9cf:	eb 06                	jmp    c104a9d7 <sched_clock_cpu+0xfe>
c104a9d1:	89 75 d8             	mov    %esi,-0x28(%ebp)
c104a9d4:	89 7d dc             	mov    %edi,-0x24(%ebp)
c104a9d7:	8b 45 d0             	mov    -0x30(%ebp),%eax
c104a9da:	81 c6 a8 41 0f 00    	add    $0xf41a8,%esi
c104a9e0:	8b 55 d4             	mov    -0x2c(%ebp),%edx
c104a9e3:	83 d7 00             	adc    $0x0,%edi
c104a9e6:	29 f0                	sub    %esi,%eax
c104a9e8:	19 fa                	sbb    %edi,%edx
c104a9ea:	83 fa 00             	cmp    $0x0,%edx
c104a9ed:	7f 0d                	jg     c104a9fc <sched_clock_cpu+0x123>
c104a9ef:	7c 05                	jl     c104a9f6 <sched_clock_cpu+0x11d>
c104a9f1:	83 f8 00             	cmp    $0x0,%eax
c104a9f4:	77 06                	ja     c104a9fc <sched_clock_cpu+0x123>
c104a9f6:	89 75 d0             	mov    %esi,-0x30(%ebp)
c104a9f9:	89 7d d4             	mov    %edi,-0x2c(%ebp)
c104a9fc:	89 c8                	mov    %ecx,%eax
c104a9fe:	89 da                	mov    %ebx,%edx
c104aa00:	2b 45 d8             	sub    -0x28(%ebp),%eax
c104aa03:	1b 55 dc             	sbb    -0x24(%ebp),%edx
c104aa06:	83 fa 00             	cmp    $0x0,%edx
c104aa09:	7f 0d                	jg     c104aa18 <sched_clock_cpu+0x13f>
c104aa0b:	7c 05                	jl     c104aa12 <sched_clock_cpu+0x139>
c104aa0d:	83 f8 00             	cmp    $0x0,%eax
c104aa10:	77 06                	ja     c104aa18 <sched_clock_cpu+0x13f>
c104aa12:	8b 4d d8             	mov    -0x28(%ebp),%ecx
c104aa15:	8b 5d dc             	mov    -0x24(%ebp),%ebx
c104aa18:	89 c8                	mov    %ecx,%eax
c104aa1a:	89 da                	mov    %ebx,%edx
c104aa1c:	2b 45 d0             	sub    -0x30(%ebp),%eax
c104aa1f:	1b 55 d4             	sbb    -0x2c(%ebp),%edx
c104aa22:	85 d2                	test   %edx,%edx
c104aa24:	78 06                	js     c104aa2c <sched_clock_cpu+0x153>
c104aa26:	8b 4d d0             	mov    -0x30(%ebp),%ecx
c104aa29:	8b 5d d4             	mov    -0x2c(%ebp),%ebx
c104aa2c:	89 0d c0 a9 b8 c1    	mov    %ecx,0xc1b8a9c0
c104aa32:	89 1d c4 a9 b8 c1    	mov    %ebx,0xc1b8a9c4
c104aa38:	c7 05 ac a9 b8 c1 01 	movl   $0x1,0xc1b8a9ac
c104aa3f:	00 00 00 
c104aa42:	e9 ce 00 00 00       	jmp    c104ab15 <sched_clock_cpu+0x23c>
c104aa47:	2b 05 b0 a9 b8 c1    	sub    0xc1b8a9b0,%eax
c104aa4d:	c7 05 ac a9 b8 c1 00 	movl   $0x0,0xc1b8a9ac
c104aa54:	00 00 00 
c104aa57:	1b 15 b4 a9 b8 c1    	sbb    0xc1b8a9b4,%edx
c104aa5d:	8b 35 b8 a9 b8 c1    	mov    0xc1b8a9b8,%esi
c104aa63:	8b 3d bc a9 b8 c1    	mov    0xc1b8a9bc,%edi
c104aa69:	85 d2                	test   %edx,%edx
c104aa6b:	79 04                	jns    c104aa71 <sched_clock_cpu+0x198>
c104aa6d:	31 c0                	xor    %eax,%eax
c104aa6f:	31 d2                	xor    %edx,%edx
c104aa71:	89 c1                	mov    %eax,%ecx
c104aa73:	a1 c0 a9 b8 c1       	mov    0xc1b8a9c0,%eax
c104aa78:	89 d3                	mov    %edx,%ebx
c104aa7a:	8b 15 c4 a9 b8 c1    	mov    0xc1b8a9c4,%edx
c104aa80:	01 f1                	add    %esi,%ecx
c104aa82:	89 45 e0             	mov    %eax,-0x20(%ebp)
c104aa85:	89 f0                	mov    %esi,%eax
c104aa87:	89 55 e4             	mov    %edx,-0x1c(%ebp)
c104aa8a:	11 fb                	adc    %edi,%ebx
c104aa8c:	89 fa                	mov    %edi,%edx
c104aa8e:	2b 45 e0             	sub    -0x20(%ebp),%eax
c104aa91:	1b 55 e4             	sbb    -0x1c(%ebp),%edx
c104aa94:	83 fa 00             	cmp    $0x0,%edx
c104aa97:	7f 15                	jg     c104aaae <sched_clock_cpu+0x1d5>
c104aa99:	7c 05                	jl     c104aaa0 <sched_clock_cpu+0x1c7>
c104aa9b:	83 f8 00             	cmp    $0x0,%eax
c104aa9e:	77 0e                	ja     c104aaae <sched_clock_cpu+0x1d5>
c104aaa0:	8b 45 e0             	mov    -0x20(%ebp),%eax
c104aaa3:	8b 55 e4             	mov    -0x1c(%ebp),%edx
c104aaa6:	89 45 e8             	mov    %eax,-0x18(%ebp)
c104aaa9:	89 55 ec             	mov    %edx,-0x14(%ebp)
c104aaac:	eb 06                	jmp    c104aab4 <sched_clock_cpu+0x1db>
c104aaae:	89 75 e8             	mov    %esi,-0x18(%ebp)
c104aab1:	89 7d ec             	mov    %edi,-0x14(%ebp)
c104aab4:	8b 45 e0             	mov    -0x20(%ebp),%eax
c104aab7:	81 c6 a8 41 0f 00    	add    $0xf41a8,%esi
c104aabd:	8b 55 e4             	mov    -0x1c(%ebp),%edx
c104aac0:	83 d7 00             	adc    $0x0,%edi
c104aac3:	29 f0                	sub    %esi,%eax
c104aac5:	19 fa                	sbb    %edi,%edx
c104aac7:	83 fa 00             	cmp    $0x0,%edx
c104aaca:	7f 0d                	jg     c104aad9 <sched_clock_cpu+0x200>
c104aacc:	7c 05                	jl     c104aad3 <sched_clock_cpu+0x1fa>
c104aace:	83 f8 00             	cmp    $0x0,%eax
c104aad1:	77 06                	ja     c104aad9 <sched_clock_cpu+0x200>
c104aad3:	89 75 e0             	mov    %esi,-0x20(%ebp)
c104aad6:	89 7d e4             	mov    %edi,-0x1c(%ebp)
c104aad9:	89 c8                	mov    %ecx,%eax
c104aadb:	89 da                	mov    %ebx,%edx
c104aadd:	2b 45 e8             	sub    -0x18(%ebp),%eax
c104aae0:	1b 55 ec             	sbb    -0x14(%ebp),%edx
c104aae3:	83 fa 00             	cmp    $0x0,%edx
c104aae6:	7f 0d                	jg     c104aaf5 <sched_clock_cpu+0x21c>
c104aae8:	7c 05                	jl     c104aaef <sched_clock_cpu+0x216>
c104aaea:	83 f8 00             	cmp    $0x0,%eax
c104aaed:	77 06                	ja     c104aaf5 <sched_clock_cpu+0x21c>
c104aaef:	8b 4d e8             	mov    -0x18(%ebp),%ecx
c104aaf2:	8b 5d ec             	mov    -0x14(%ebp),%ebx
c104aaf5:	89 c8                	mov    %ecx,%eax
c104aaf7:	89 da                	mov    %ebx,%edx
c104aaf9:	2b 45 e0             	sub    -0x20(%ebp),%eax
c104aafc:	1b 55 e4             	sbb    -0x1c(%ebp),%edx
c104aaff:	85 d2                	test   %edx,%edx
c104ab01:	78 06                	js     c104ab09 <sched_clock_cpu+0x230>
c104ab03:	8b 4d e0             	mov    -0x20(%ebp),%ecx
c104ab06:	8b 5d e4             	mov    -0x1c(%ebp),%ebx
c104ab09:	89 0d c0 a9 b8 c1    	mov    %ecx,0xc1b8a9c0
c104ab0f:	89 1d c4 a9 b8 c1    	mov    %ebx,0xc1b8a9c4
c104ab15:	c7 05 ac a9 b8 c1 01 	movl   $0x1,0xc1b8a9ac
c104ab1c:	00 00 00 
c104ab1f:	89 c8                	mov    %ecx,%eax
c104ab21:	89 da                	mov    %ebx,%edx
c104ab23:	8b 4d f0             	mov    -0x10(%ebp),%ecx
c104ab26:	65 33 0d 14 00 00 00 	xor    %gs:0x14,%ecx
c104ab2d:	74 05                	je     c104ab34 <sched_clock_cpu+0x25b>
c104ab2f:	e8 6f 45 fe ff       	call   c102f0a3 <__stack_chk_fail>
c104ab34:	83 c4 24             	add    $0x24,%esp
c104ab37:	5b                   	pop    %ebx
c104ab38:	5e                   	pop    %esi
c104ab39:	5f                   	pop    %edi
c104ab3a:	c9                   	leave  
c104ab3b:	c3                   	ret    

and ... to make things murkier, we also have:

 CONFIG_PARAVIRT_GUEST=y
 CONFIG_PARAVIRT=y
 CONFIG_PARAVIRT_CLOCK=y
 CONFIG_PARAVIRT_DEBUG=y

SMP is disabled though.

Based on the disassembly i see no pathway for EDI to become 
corrupted, so the theory of stack-protector somehow corrupting it 
can be excluded in the first round of analysis.

Looking further up in the call chain and the assembly, in this UP 
build, try_to_wake() up could be called with NULL (%eax == 0) and 
survive up to this point of crash. The caller was wake_up_process() 
c102b1c7, which just passed through %eax from the call-site which is 
kthread_create():

c1045384:       a1 00 1e eb c1          mov    0xc1eb1e00,%eax
c1045389:       e8 1e 5e fe ff          call   c102b1ac <wake_up_process>
c104538e:       8d 45 bc                lea    -0x44(%ebp),%eax

so the question is, what value is within 0xc1eb1e00 at the point of 
crash? It's the following variable:

   c1eb1e00 B kthreadd_task

I've hacked the die handler to print out kthreadd_task, and it 
gives:

[    0.033994] kthreadd_task: (null)

so we've got a NULL there.

In fact i dont see any proper serialization here: there appears to 
be a race between the initial task and the init task (which are not 
one and the same). The race is possibly timing dependent as well, 
hence the (in hindsight, false) dependency on the stackprotector 
commit.

The fix below solves the problem. I think the bug was introduced 
via:

  cdd140b: kthreads: simplify the startup synchronization

and i've put a -stable backport tag on it as well, as it could 
trigger anywhere.

	Ingo

--------------------->
>From 43446f77df71e2a316087252485ad7db604fd4b6 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo@elte.hu>
Date: Tue, 1 Sep 2009 13:36:34 +0200
Subject: [PATCH] kthreads: Fix startup synchronization boot crash

-tip testing found this bootup crash:

[    0.025010] Checking 'hlt' instruction... OK.
[    0.032017] calling  spawn_ksoftirqd+0x0/0x48 @ 1
[    0.033024] BUG: unable to handle kernel NULL pointer dereference at (null)
[    0.033994] IP: [<c102b00d>] try_to_wake_up+0x2f/0x174
[    0.033994] *pde = 00000000
[    0.033994] Oops: 0000 [#1] DEBUG_PAGEALLOC
[    0.033994] last sysfs file:
[    0.033994] Modules linked in:
[    0.033994]
[    0.033994] Pid: 1, comm: swapper Not tainted (2.6.31-rc6-00024-g23386d6-dirty #9074)
[    0.033994] EIP: 0060:[<c102b00d>] EFLAGS: 00010046 CPU: 0
[    0.033994] EIP is at try_to_wake_up+0x2f/0x174
[    0.033994] EAX: 0935b29c EBX: 0000000f ECX: 00000000 EDX: 00000000
[    0.033994] ESI: 00000000 EDI: 00000000 EBP: f7051edc ESP: f7051eb8
[    0.033994]  DS: 007b ES: 007b FS: 0000 GS: 00e0 SS: 0068
[    0.033994] Process swapper (pid: 1, ti=f7050000 task=f7048000 task.ti=f7050000)
[    0.033994] Stack:
[    0.033994]  00000246 c1045384 00000000 c1b8800c 00000246 0935b29c c1a3b088 00000000
[    0.033994] <0> 00000000 f7051ee8 c102b1c7 0935b29c f7051f40 c104538e c1034aed 00000000
[    0.033994] <0> c1a30e5f 00000000 00000001 dead4ead ffffffff ffffffff c1eb1e04 00000000
[    0.033994] Call Trace:
[    0.033994]  [<c1045384>] ? kthread_create+0x63/0xdb
[    0.033994]  [<c102b1c7>] ? wake_up_process+0x1b/0x2e
[    0.033994]  [<c104538e>] ? kthread_create+0x6d/0xdb
[    0.033994]  [<c1034aed>] ? ksoftirqd+0x0/0xb8
[    0.033994]  [<c1048dc8>] ? ktime_get_ts+0x4e/0x64
[    0.033994]  [<c1d7446b>] ? cpu_callback+0x3e/0x94
[    0.033994]  [<c1034aed>] ? ksoftirqd+0x0/0xb8
[    0.033994]  [<c1d41f3c>] ? spawn_ksoftirqd+0x22/0x48
[    0.033994]  [<c100113c>] ? _stext+0x54/0x135
[    0.033994]  [<c1d41f1a>] ? spawn_ksoftirqd+0x0/0x48
[    0.033994]  [<c1002e75>] ? restore_all_notrace+0x0/0x18
[    0.033994]  [<c1055ce9>] ? trace_hardirqs_on_caller+0xb9/0xf2
[    0.033994]  [<c13294ec>] ? trace_hardirqs_on_thunk+0xc/0x10
[    0.033994]  [<c1002e75>] ? restore_all_notrace+0x0/0x18
[    0.033994]  [<c1d302ab>] ? kernel_init+0x0/0xec
[    0.033994]  [<c1d302ed>] ? kernel_init+0x42/0xec
[    0.033994]  [<c1d302ab>] ? kernel_init+0x0/0xec
[    0.033994]  [<c10037a7>] ? kernel_thread_helper+0x7/0x58

Which is caused by kthreadd_task being NULL.

The modification of that variable is protected by the BKL, but
the _ordering_ of the initial task (which becomes the idle
thread of CPU0) and the init task (which is spawned by the
initial task) is not synchronized.

So we can occasionally end up init running sooner than
rest_init(), and the ksoftirqd creation failing in
kthread_create() due to the NULL kthreadd_task value.

Add a completion to serialize this - made dependent on the
kthreadd_task pointer value. (which will serialize fine right
now as both are accessed via the BKL.)

(I think this code could be cleaned up further to have less
open-coded serialization, the fix here is the minimal change to
fix the regression.)

I think a side-effect of this recent commit might have opened
that race:

  cdd140b: kthreads: simplify the startup synchronization

But it needs certain timing sequences to trigger.

c: Oleg Nesterov <oleg@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: <stable@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 include/linux/kthread.h |    1 +
 init/main.c             |    2 ++
 kernel/kthread.c        |    5 +++++
 3 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/include/linux/kthread.h b/include/linux/kthread.h
index aabc8a1..1ca19fa 100644
--- a/include/linux/kthread.h
+++ b/include/linux/kthread.h
@@ -33,5 +33,6 @@ int kthread_should_stop(void);
 
 int kthreadd(void *unused);
 extern struct task_struct *kthreadd_task;
+extern struct completion kthreadd_task_init_done;
 
 #endif /* _LINUX_KTHREAD_H */
diff --git a/init/main.c b/init/main.c
index 11f4f14..6c1b10b 100644
--- a/init/main.c
+++ b/init/main.c
@@ -455,6 +455,8 @@ static noinline void __init_refok rest_init(void)
 	numa_default_policy();
 	pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
 	kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
+	complete(&kthreadd_task_init_done);
+
 	unlock_kernel();
 
 	/*
diff --git a/kernel/kthread.c b/kernel/kthread.c
index eb8751a..6ec4643 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -20,7 +20,9 @@
 
 static DEFINE_SPINLOCK(kthread_create_lock);
 static LIST_HEAD(kthread_create_list);
+
 struct task_struct *kthreadd_task;
+DECLARE_COMPLETION(kthreadd_task_init_done);
 
 struct kthread_create_info
 {
@@ -129,6 +131,9 @@ struct task_struct *kthread_create(int (*threadfn)(void *data),
 	list_add_tail(&create.list, &kthread_create_list);
 	spin_unlock(&kthread_create_lock);
 
+	if (unlikely(!kthreadd_task))
+		wait_for_completion(&kthreadd_task_init_done);
+
 	wake_up_process(kthreadd_task);
 	wait_for_completion(&create.done);
 

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* Re: [PATCH] kthreads: Fix startup synchronization boot crash
  2009-09-01 11:39     ` [PATCH] kthreads: Fix startup synchronization boot crash Ingo Molnar
@ 2009-09-01 13:04       ` Oleg Nesterov
  2009-09-01 13:14         ` Ingo Molnar
  0 siblings, 1 reply; 30+ messages in thread
From: Oleg Nesterov @ 2009-09-01 13:04 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: arjan, jeremy, mschmidt, mingo, hpa, linux-kernel, tj, tglx,
	Linus Torvalds, Andrew Morton, linux-tip-commits

On 09/01, Ingo Molnar wrote:
>
> In fact i dont see any proper serialization here: there appears to
> be a race between the initial task and the init task (which are not
> one and the same). The race is possibly timing dependent as well,
> hence the (in hindsight, false) dependency on the stackprotector
> commit.

Yes, this looks racy, and I think this was always racy.

> I think the bug was introduced
> via:
>
>   cdd140b: kthreads: simplify the startup synchronization

Cough ;) No, I don't think this patch introduced this bug. With or without
this patch, kthread_create() assumes kthreadd_task != NULL, otherwise
wake_up_process(kthreadd_task) is obviously can crash.

>  static DEFINE_SPINLOCK(kthread_create_lock);
>  static LIST_HEAD(kthread_create_list);
> +
>  struct task_struct *kthreadd_task;
> +DECLARE_COMPLETION(kthreadd_task_init_done);
>
>  struct kthread_create_info
>  {
> @@ -129,6 +131,9 @@ struct task_struct *kthread_create(int (*threadfn)(void *data),
>  	list_add_tail(&create.list, &kthread_create_list);
>  	spin_unlock(&kthread_create_lock);
>
> +	if (unlikely(!kthreadd_task))
> +		wait_for_completion(&kthreadd_task_init_done);
> +

Yes, this should work. But I _think_ we can make the better fix...

I'll try to make the patch soon. Afaics we don't need kthreadd_task_init_done.

Oleg.


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH] kthreads: Fix startup synchronization boot crash
  2009-09-01 13:04       ` Oleg Nesterov
@ 2009-09-01 13:14         ` Ingo Molnar
  2009-09-01 13:37           ` Oleg Nesterov
  0 siblings, 1 reply; 30+ messages in thread
From: Ingo Molnar @ 2009-09-01 13:14 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: arjan, jeremy, mschmidt, mingo, hpa, linux-kernel, tj, tglx,
	Linus Torvalds, Andrew Morton, linux-tip-commits


* Oleg Nesterov <oleg@redhat.com> wrote:

> On 09/01, Ingo Molnar wrote:
> >
> > In fact i dont see any proper serialization here: there appears to
> > be a race between the initial task and the init task (which are not
> > one and the same). The race is possibly timing dependent as well,
> > hence the (in hindsight, false) dependency on the stackprotector
> > commit.
> 
> Yes, this looks racy, and I think this was always racy.
> 
> > I think the bug was introduced
> > via:
> >
> >   cdd140b: kthreads: simplify the startup synchronization
> 
> Cough ;) No, I don't think this patch introduced this bug. With or 
> without this patch, kthread_create() assumes kthreadd_task != 
> NULL, otherwise wake_up_process(kthreadd_task) is obviously can 
> crash.

yeah - was just a guess.

> >  static DEFINE_SPINLOCK(kthread_create_lock);
> >  static LIST_HEAD(kthread_create_list);
> > +
> >  struct task_struct *kthreadd_task;
> > +DECLARE_COMPLETION(kthreadd_task_init_done);
> >
> >  struct kthread_create_info
> >  {
> > @@ -129,6 +131,9 @@ struct task_struct *kthread_create(int (*threadfn)(void *data),
> >  	list_add_tail(&create.list, &kthread_create_list);
> >  	spin_unlock(&kthread_create_lock);
> >
> > +	if (unlikely(!kthreadd_task))
> > +		wait_for_completion(&kthreadd_task_init_done);
> > +
> 
> Yes, this should work. But I _think_ we can make the better fix...
> 
> I'll try to make the patch soon. Afaics we don't need 
> kthreadd_task_init_done.

ok.

	Ingo

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH] kthreads: Fix startup synchronization boot crash
  2009-09-01 13:14         ` Ingo Molnar
@ 2009-09-01 13:37           ` Oleg Nesterov
  2009-09-01 13:59             ` Ingo Molnar
  2009-09-01 15:08             ` [PATCH] kthreads: Fix startup synchronization boot crash Américo Wang
  0 siblings, 2 replies; 30+ messages in thread
From: Oleg Nesterov @ 2009-09-01 13:37 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: arjan, jeremy, mschmidt, mingo, hpa, linux-kernel, tj, tglx,
	Linus Torvalds, Andrew Morton, linux-tip-commits

On 09/01, Ingo Molnar wrote:
>
> * Oleg Nesterov <oleg@redhat.com> wrote:
>
> > Yes, this should work. But I _think_ we can make the better fix...
> >
> > I'll try to make the patch soon. Afaics we don't need
> > kthreadd_task_init_done.
>
> ok.

Just in case, the patch is ready. I need to re-check my thinking
and test it somehow...

- remove kthreadd_task initialization from rest_init()

- change kthreadd() to initialize kthreadd_task = current

- change the main loop in kthreadd() to take kthread_create_lock
  before the first schedule() (just shift schedule() down)

This way, if kthreadd_task needs the wakeup, kthread_create()
must see kthreadd_task != NULL after unlock(kthread_create_lock).

If kthread_create() sees kthreadd_task == NULL we can just sleep
on create.done, kthreadd() must notice the new request before
it calls schedule().

Note that with this change it is possible to use kthread_create()
at any time, but the caller will sleep until rest_init() creates
kthreadd.

Oleg.

 init/main.c      |    5 +----
 kernel/kthread.c |   30 ++++++++++++++++++------------
 2 files changed, 19 insertions(+), 16 deletions(-)


--- a/init/main.c
+++ b/init/main.c
@@ -449,12 +449,9 @@ static void __init setup_command_line(ch
 static noinline void __init_refok rest_init(void)
 	__releases(kernel_lock)
 {
-	int pid;
-
 	kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
 	numa_default_policy();
-	pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
-	kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
+	kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
 	unlock_kernel();
 
 	/*
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -128,8 +128,14 @@ struct task_struct *kthread_create(int (
 	spin_lock(&kthread_create_lock);
 	list_add_tail(&create.list, &kthread_create_list);
 	spin_unlock(&kthread_create_lock);
-
-	wake_up_process(kthreadd_task);
+	/*
+	 * If kthreadd was not created yet, kthreadd() must see the result
+	 * of list_add_tail() later, it takes kthread_create_lock before the
+	 * first schedule(). If kthreadd() locked kthread_create_lock at
+	 * least once, we must see kthreadd_task != NULL.
+	 */
+	if (likely(kthreadd_task))
+		wake_up_process(kthreadd_task);
 	wait_for_completion(&create.done);
 
 	if (!IS_ERR(create.result)) {
@@ -216,23 +222,18 @@ EXPORT_SYMBOL(kthread_stop);
 
 int kthreadd(void *unused)
 {
-	struct task_struct *tsk = current;
+	kthreadd_task = current;
 
 	/* Setup a clean context for our children to inherit. */
-	set_task_comm(tsk, "kthreadd");
-	ignore_signals(tsk);
-	set_user_nice(tsk, KTHREAD_NICE_LEVEL);
-	set_cpus_allowed_ptr(tsk, cpu_all_mask);
+	set_task_comm(kthreadd_task, "kthreadd");
+	ignore_signals(kthreadd_task);
+	set_user_nice(kthreadd_task, KTHREAD_NICE_LEVEL);
+	set_cpus_allowed_ptr(kthreadd_task, cpu_all_mask);
 	set_mems_allowed(node_possible_map);
 
 	current->flags |= PF_NOFREEZE | PF_FREEZER_NOSIG;
 
 	for (;;) {
-		set_current_state(TASK_INTERRUPTIBLE);
-		if (list_empty(&kthread_create_list))
-			schedule();
-		__set_current_state(TASK_RUNNING);
-
 		spin_lock(&kthread_create_lock);
 		while (!list_empty(&kthread_create_list)) {
 			struct kthread_create_info *create;
@@ -247,6 +248,11 @@ int kthreadd(void *unused)
 			spin_lock(&kthread_create_lock);
 		}
 		spin_unlock(&kthread_create_lock);
+
+		set_current_state(TASK_INTERRUPTIBLE);
+		if (list_empty(&kthread_create_list))
+			schedule();
+		__set_current_state(TASK_RUNNING);
 	}
 
 	return 0;


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH] kthreads: Fix startup synchronization boot crash
  2009-09-01 13:37           ` Oleg Nesterov
@ 2009-09-01 13:59             ` Ingo Molnar
  2009-09-01 14:55               ` Oleg Nesterov
  2009-09-01 15:08             ` [PATCH] kthreads: Fix startup synchronization boot crash Américo Wang
  1 sibling, 1 reply; 30+ messages in thread
From: Ingo Molnar @ 2009-09-01 13:59 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: arjan, jeremy, mschmidt, mingo, hpa, linux-kernel, tj, tglx,
	Linus Torvalds, Andrew Morton, linux-tip-commits


* Oleg Nesterov <oleg@redhat.com> wrote:

> On 09/01, Ingo Molnar wrote:
> >
> > * Oleg Nesterov <oleg@redhat.com> wrote:
> >
> > > Yes, this should work. But I _think_ we can make the better fix...
> > >
> > > I'll try to make the patch soon. Afaics we don't need
> > > kthreadd_task_init_done.
> >
> > ok.
> 
> Just in case, the patch is ready. [...]

yes - that's roughly the cleanup i referred to in the commit log.

way too late for -rc8 though - the minimal fix i did _might_ be 
eligible.

agreed?

	Ingo

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH] kthreads: Fix startup synchronization boot crash
  2009-09-01 13:59             ` Ingo Molnar
@ 2009-09-01 14:55               ` Oleg Nesterov
  2009-09-01 15:54                 ` Ingo Molnar
  2009-09-01 16:52                 ` [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done Oleg Nesterov
  0 siblings, 2 replies; 30+ messages in thread
From: Oleg Nesterov @ 2009-09-01 14:55 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: arjan, jeremy, mschmidt, mingo, hpa, linux-kernel, tj, tglx,
	Linus Torvalds, Andrew Morton, linux-tip-commits

On 09/01, Ingo Molnar wrote:
>
> * Oleg Nesterov <oleg@redhat.com> wrote:
>
> > On 09/01, Ingo Molnar wrote:
> > >
> > > * Oleg Nesterov <oleg@redhat.com> wrote:
> > >
> > > > Yes, this should work. But I _think_ we can make the better fix...
> > > >
> > > > I'll try to make the patch soon. Afaics we don't need
> > > > kthreadd_task_init_done.
> > >
> > > ok.
> >
> > Just in case, the patch is ready. [...]
>
> yes - that's roughly the cleanup i referred to in the commit log.
>
> way too late for -rc8 though - the minimal fix i did _might_ be
> eligible.
>
> agreed?

Agreed. Then I will sent the patch on top of this change.

But. May be your minimal patch needs a small tweak ?

rest_init()->complete(&kthreadd_task_init_done) assumes that exactly
_one_ caller of kthread_create() can race with kernel_thread(kthreadd).
Perhap we need complete_all() ?


But I must admit, now I don't understand what happens,

	The modification of that variable is protected by the BKL, but
	the _ordering_ of the initial task (which becomes the idle
	thread of CPU0) and the init task (which is spawned by the
	initial task) is not synchronized.

	So we can occasionally end up init running sooner than
	rest_init()

How? rest_init() can't be preempted and it holds BKL. And kernel_init()
takes BKL before anything else. Confused...

Oleg.


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH] kthreads: Fix startup synchronization boot crash
  2009-09-01 13:37           ` Oleg Nesterov
  2009-09-01 13:59             ` Ingo Molnar
@ 2009-09-01 15:08             ` Américo Wang
  2009-09-01 15:19               ` Oleg Nesterov
  1 sibling, 1 reply; 30+ messages in thread
From: Américo Wang @ 2009-09-01 15:08 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: Ingo Molnar, arjan, jeremy, mschmidt, mingo, hpa, linux-kernel,
	tj, tglx, Linus Torvalds, Andrew Morton, linux-tip-commits

On Tue, Sep 01, 2009 at 03:37:09PM +0200, Oleg Nesterov wrote:
>On 09/01, Ingo Molnar wrote:
>>
>> * Oleg Nesterov <oleg@redhat.com> wrote:
>>
>> > Yes, this should work. But I _think_ we can make the better fix...
>> >
>> > I'll try to make the patch soon. Afaics we don't need
>> > kthreadd_task_init_done.
>>
>> ok.
>
>Just in case, the patch is ready. I need to re-check my thinking
>and test it somehow...
>
>- remove kthreadd_task initialization from rest_init()
>
>- change kthreadd() to initialize kthreadd_task = current
>
>- change the main loop in kthreadd() to take kthread_create_lock
>  before the first schedule() (just shift schedule() down)


This is the only part that I can't understand, why moving it down?


>
>This way, if kthreadd_task needs the wakeup, kthread_create()
>must see kthreadd_task != NULL after unlock(kthread_create_lock).
>
>If kthread_create() sees kthreadd_task == NULL we can just sleep
>on create.done, kthreadd() must notice the new request before
>it calls schedule().
>
>Note that with this change it is possible to use kthread_create()
>at any time, but the caller will sleep until rest_init() creates
>kthreadd.
>


What a nice patch!

Thanks!

>Oleg.
>
> init/main.c      |    5 +----
> kernel/kthread.c |   30 ++++++++++++++++++------------
> 2 files changed, 19 insertions(+), 16 deletions(-)
>
>
>--- a/init/main.c
>+++ b/init/main.c
>@@ -449,12 +449,9 @@ static void __init setup_command_line(ch
> static noinline void __init_refok rest_init(void)
> 	__releases(kernel_lock)
> {
>-	int pid;
>-
> 	kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
> 	numa_default_policy();
>-	pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
>-	kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
>+	kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
> 	unlock_kernel();
> 
> 	/*
>--- a/kernel/kthread.c
>+++ b/kernel/kthread.c
>@@ -128,8 +128,14 @@ struct task_struct *kthread_create(int (
> 	spin_lock(&kthread_create_lock);
> 	list_add_tail(&create.list, &kthread_create_list);
> 	spin_unlock(&kthread_create_lock);
>-
>-	wake_up_process(kthreadd_task);
>+	/*
>+	 * If kthreadd was not created yet, kthreadd() must see the result
>+	 * of list_add_tail() later, it takes kthread_create_lock before the
>+	 * first schedule(). If kthreadd() locked kthread_create_lock at
>+	 * least once, we must see kthreadd_task != NULL.
>+	 */
>+	if (likely(kthreadd_task))
>+		wake_up_process(kthreadd_task);
> 	wait_for_completion(&create.done);
> 
> 	if (!IS_ERR(create.result)) {
>@@ -216,23 +222,18 @@ EXPORT_SYMBOL(kthread_stop);
> 
> int kthreadd(void *unused)
> {
>-	struct task_struct *tsk = current;
>+	kthreadd_task = current;
> 
> 	/* Setup a clean context for our children to inherit. */
>-	set_task_comm(tsk, "kthreadd");
>-	ignore_signals(tsk);
>-	set_user_nice(tsk, KTHREAD_NICE_LEVEL);
>-	set_cpus_allowed_ptr(tsk, cpu_all_mask);
>+	set_task_comm(kthreadd_task, "kthreadd");
>+	ignore_signals(kthreadd_task);
>+	set_user_nice(kthreadd_task, KTHREAD_NICE_LEVEL);
>+	set_cpus_allowed_ptr(kthreadd_task, cpu_all_mask);
> 	set_mems_allowed(node_possible_map);
> 
> 	current->flags |= PF_NOFREEZE | PF_FREEZER_NOSIG;
> 
> 	for (;;) {
>-		set_current_state(TASK_INTERRUPTIBLE);
>-		if (list_empty(&kthread_create_list))
>-			schedule();
>-		__set_current_state(TASK_RUNNING);
>-
> 		spin_lock(&kthread_create_lock);
> 		while (!list_empty(&kthread_create_list)) {
> 			struct kthread_create_info *create;
>@@ -247,6 +248,11 @@ int kthreadd(void *unused)
> 			spin_lock(&kthread_create_lock);
> 		}
> 		spin_unlock(&kthread_create_lock);
>+
>+		set_current_state(TASK_INTERRUPTIBLE);
>+		if (list_empty(&kthread_create_list))
>+			schedule();
>+		__set_current_state(TASK_RUNNING);
> 	}
> 
> 	return 0;
>
>--
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at  http://www.tux.org/lkml/

-- 
Live like a child, think like the god.
 

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH] kthreads: Fix startup synchronization boot crash
  2009-09-01 15:08             ` [PATCH] kthreads: Fix startup synchronization boot crash Américo Wang
@ 2009-09-01 15:19               ` Oleg Nesterov
  0 siblings, 0 replies; 30+ messages in thread
From: Oleg Nesterov @ 2009-09-01 15:19 UTC (permalink / raw)
  To: Américo Wang
  Cc: Ingo Molnar, arjan, jeremy, mschmidt, mingo, hpa, linux-kernel,
	tj, tglx, Linus Torvalds, Andrew Morton, linux-tip-commits

On 09/01, Américo Wang wrote:
>
> On Tue, Sep 01, 2009 at 03:37:09PM +0200, Oleg Nesterov wrote:
> >On 09/01, Ingo Molnar wrote:
> >>
> >> * Oleg Nesterov <oleg@redhat.com> wrote:
> >>
> >> > Yes, this should work. But I _think_ we can make the better fix...
> >> >
> >> > I'll try to make the patch soon. Afaics we don't need
> >> > kthreadd_task_init_done.
> >>
> >> ok.
> >
> >Just in case, the patch is ready. I need to re-check my thinking
> >and test it somehow...
> >
> >- remove kthreadd_task initialization from rest_init()
> >
> >- change kthreadd() to initialize kthreadd_task = current
> >
> >- change the main loop in kthreadd() to take kthread_create_lock
> >  before the first schedule() (just shift schedule() down)
>
> This is the only part that I can't understand, why moving it down?

This way kthreadd() always takes kthread_create_lock before it
schedules.

IOW. Before the patch, kthreadd() does

	for (;;) {
		if (list_empty(kthread_create_list))
			schedule();

		lock(kthread_create_lock);
		while (!list_empty(&kthread_create_list))
			... create kthreads ...
		unlock(kthread_create_lock);
	}

This means kthread_create() can't do

	if (!kthreadd_task)
		wake_up_process(kthreadd_task);

we can read kthreadd_task before kthreadd() sets kthreadd_task = current,
and it is possible that kthreadd() has already checked list_empty() == T.

But if we shift schedule() down, so that kthreadd() does

	for (;;) {
		lock(kthread_create_lock);
		while (!list_empty(&kthread_create_list))
			... create kthreads ...
		unlock(kthread_create_lock);

		if (list_empty(kthread_create_list))
			schedule();
	}

Then we can rely on kthread_create_lock: either kthreadd must see the
addition to create_list, or kthreadd() must see kthreadd_task != NULL.

Because both checks, !kthreadd_task and list_empty(), are done after
lock+unlock of the same lock. The 2nd task which takes the lock must
see the changes which were done by the 1st task which locked this lock.

Do you see any holes?

Oleg.


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH] kthreads: Fix startup synchronization boot crash
  2009-09-01 14:55               ` Oleg Nesterov
@ 2009-09-01 15:54                 ` Ingo Molnar
  2009-09-01 16:00                   ` Oleg Nesterov
  2009-09-01 16:52                 ` [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done Oleg Nesterov
  1 sibling, 1 reply; 30+ messages in thread
From: Ingo Molnar @ 2009-09-01 15:54 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: arjan, jeremy, mschmidt, mingo, hpa, linux-kernel, tj, tglx,
	Linus Torvalds, Andrew Morton, linux-tip-commits


* Oleg Nesterov <oleg@redhat.com> wrote:

> On 09/01, Ingo Molnar wrote:
> >
> > * Oleg Nesterov <oleg@redhat.com> wrote:
> >
> > > On 09/01, Ingo Molnar wrote:
> > > >
> > > > * Oleg Nesterov <oleg@redhat.com> wrote:
> > > >
> > > > > Yes, this should work. But I _think_ we can make the better fix...
> > > > >
> > > > > I'll try to make the patch soon. Afaics we don't need
> > > > > kthreadd_task_init_done.
> > > >
> > > > ok.
> > >
> > > Just in case, the patch is ready. [...]
> >
> > yes - that's roughly the cleanup i referred to in the commit log.
> >
> > way too late for -rc8 though - the minimal fix i did _might_ be
> > eligible.
> >
> > agreed?
> 
> Agreed. Then I will sent the patch on top of this change.
> 
> But. May be your minimal patch needs a small tweak ?
> 
> rest_init()->complete(&kthreadd_task_init_done) assumes that exactly
> _one_ caller of kthread_create() can race with kernel_thread(kthreadd).
> Perhap we need complete_all() ?
> 
> 
> But I must admit, now I don't understand what happens,
> 
> 	The modification of that variable is protected by the BKL, but
> 	the _ordering_ of the initial task (which becomes the idle
> 	thread of CPU0) and the init task (which is spawned by the
> 	initial task) is not synchronized.
> 
> 	So we can occasionally end up init running sooner than
> 	rest_init()
> 
> How? rest_init() can't be preempted and it holds BKL. And 
> kernel_init() takes BKL before anything else. Confused...

it cannot be preempted but it can schedule anywhere - and the BKL 
will be dropped silently.

This is one of the biggest dangers of the BKL - rescheduling 
_somewhere_ in a huge codepath might change timings and 'breaks up 
the critical path' - breaking ancient assumptions.

	Ingo

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH] kthreads: Fix startup synchronization boot crash
  2009-09-01 15:54                 ` Ingo Molnar
@ 2009-09-01 16:00                   ` Oleg Nesterov
  2009-09-02 13:06                     ` Ingo Molnar
  0 siblings, 1 reply; 30+ messages in thread
From: Oleg Nesterov @ 2009-09-01 16:00 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: arjan, jeremy, mschmidt, mingo, hpa, linux-kernel, tj, tglx,
	Linus Torvalds, Andrew Morton, linux-tip-commits

On 09/01, Ingo Molnar wrote:
>
> * Oleg Nesterov <oleg@redhat.com> wrote:
>
> > But I must admit, now I don't understand what happens,
> >
> > 	The modification of that variable is protected by the BKL, but
> > 	the _ordering_ of the initial task (which becomes the idle
> > 	thread of CPU0) and the init task (which is spawned by the
> > 	initial task) is not synchronized.
> >
> > 	So we can occasionally end up init running sooner than
> > 	rest_init()
> >
> > How? rest_init() can't be preempted and it holds BKL. And
> > kernel_init() takes BKL before anything else. Confused...
>
> it cannot be preempted but it can schedule anywhere - and the BKL
> will be dropped silently.
>
> This is one of the biggest dangers of the BKL

Yes I see. But rest_init() runs under preempt_disable(). If it was
rescheduled, schedule_debug() should complain. No?

Oleg.


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-01 14:55               ` Oleg Nesterov
  2009-09-01 15:54                 ` Ingo Molnar
@ 2009-09-01 16:52                 ` Oleg Nesterov
  2009-09-01 16:53                   ` [PATCH 1/1] " Oleg Nesterov
  2009-09-01 23:22                   ` [PATCH 0/1] " Eric W. Biederman
  1 sibling, 2 replies; 30+ messages in thread
From: Oleg Nesterov @ 2009-09-01 16:52 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: arjan, jeremy, mschmidt, mingo, hpa, linux-kernel, tj, tglx,
	Linus Torvalds, Andrew Morton, linux-tip-commits,
	Eric W. Biederman, Rusty Russell

On 09/01, Oleg Nesterov wrote:
>
> On 09/01, Ingo Molnar wrote:
> >
> > * Oleg Nesterov <oleg@redhat.com> wrote:
> >
> > > On 09/01, Ingo Molnar wrote:
> > > >
> > > > * Oleg Nesterov <oleg@redhat.com> wrote:
> > > >
> > > > > Yes, this should work. But I _think_ we can make the better fix...
> > > > >
> > > > > I'll try to make the patch soon. Afaics we don't need
> > > > > kthreadd_task_init_done.
> > > >
> > > > ok.
> > >
> > > Just in case, the patch is ready. [...]
> >
> > yes - that's roughly the cleanup i referred to in the commit log.
> >
> > way too late for -rc8 though - the minimal fix i did _might_ be
> > eligible.
> >
> > agreed?
>
> Agreed. Then I will sent the patch on top of this change.

OK, I am sending the patch on top of your fix. Not sure how to really
test it, but at least the kernel works when I apply the debugging patch
below on top.

Oleg.

--- WAIT/init/main.c~DBG	2009-09-01 15:49:36.000000000 +0200
+++ WAIT/init/main.c	2009-09-01 17:53:28.000000000 +0200
@@ -455,7 +455,6 @@ static noinline void __init_refok rest_i
 {
 	kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
 	numa_default_policy();
-	kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
 	unlock_kernel();
 
 	/*
@@ -466,6 +465,12 @@ static noinline void __init_refok rest_i
 	rcu_scheduler_starting();
 	preempt_enable_no_resched();
 	schedule();
+
+	printk(KERN_INFO "XXX rest_init - sleeeeep\n");
+//	schedule_timeout_interruptible(HZ);
+	kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
+	printk(KERN_INFO "XXX rest_init - kthreadd started\n");
+
 	preempt_disable();
 
 	/* Call into cpu_idle with preempt disabled */
@@ -877,10 +882,18 @@ static noinline int init_post(void)
 	panic("No init found.  Try passing init= option to kernel.");
 }
 
+int ktfunc(void *arg)
+{
+	printk(KERN_INFO "XXX ktfunc - alive!\n");
+	return 0;
+}
+
 static int __init kernel_init(void * unused)
 {
 	lock_kernel();
 
+	printk(KERN_INFO "XXX kernel_init - call kthread_run, kthreadd=%p\n", kthreadd_task);
+	kthread_run(ktfunc, NULL, "xxx");
 	/*
 	 * init can allocate pages on any node
 	 */


^ permalink raw reply	[flat|nested] 30+ messages in thread

* [PATCH 1/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-01 16:52                 ` [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done Oleg Nesterov
@ 2009-09-01 16:53                   ` Oleg Nesterov
  2009-09-01 23:22                   ` [PATCH 0/1] " Eric W. Biederman
  1 sibling, 0 replies; 30+ messages in thread
From: Oleg Nesterov @ 2009-09-01 16:53 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: arjan, jeremy, mschmidt, mingo, hpa, linux-kernel, tj, tglx,
	Linus Torvalds, Andrew Morton, linux-tip-commits,
	Eric W. Biederman, Rusty Russell

Revert "[PATCH] kthreads: Fix startup synchronization boot crash", it was
the minimal fix for stable.

Then:
	- change kthread_create() to check kthreadd_task != NULL before
	  wake_up_process(kthreadd_task)

	- remove kthreadd_task initialization from rest_init()

	- change kthreadd() to initialize kthreadd_task = current

	- change the main loop in kthreadd() to take kthread_create_lock
	  before the first schedule() (just shift schedule() down)

This way, if kthreadd_task needs the wakeup, kthread_create() must see
kthreadd_task != NULL after unlock(kthread_create_lock).

If kthread_create() sees kthreadd_task == NULL we can just sleep on .done,
kthreadd() must notice the new request before it calls schedule().

IOW both checks, !kthreadd_task and list_empty(), are done after
lock+unlock of the same lock. The 2nd task which takes the lock must
see the changes which were done by the 1st task which locked this lock.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---

 include/linux/kthread.h |    1 -
 init/main.c             |    7 +------
 kernel/kthread.c        |   35 ++++++++++++++++++-----------------
 3 files changed, 19 insertions(+), 24 deletions(-)

--- WAIT/include/linux/kthread.h~KT_KTHREADD_NULL_FIX	2009-09-01 18:25:50.000000000 +0200
+++ WAIT/include/linux/kthread.h	2009-09-01 18:31:39.000000000 +0200
@@ -33,6 +33,5 @@ int kthread_should_stop(void);
 
 int kthreadd(void *unused);
 extern struct task_struct *kthreadd_task;
-extern struct completion kthreadd_task_init_done;
 
 #endif /* _LINUX_KTHREAD_H */
--- WAIT/init/main.c~KT_KTHREADD_NULL_FIX	2009-09-01 18:25:50.000000000 +0200
+++ WAIT/init/main.c	2009-09-01 18:32:05.000000000 +0200
@@ -453,14 +453,9 @@ static void __init setup_command_line(ch
 static noinline void __init_refok rest_init(void)
 	__releases(kernel_lock)
 {
-	int pid;
-
 	kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
 	numa_default_policy();
-	pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
-	kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
-	complete(&kthreadd_task_init_done);
-
+	kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
 	unlock_kernel();
 
 	/*
--- WAIT/kernel/kthread.c~KT_KTHREADD_NULL_FIX	2009-09-01 18:25:50.000000000 +0200
+++ WAIT/kernel/kthread.c	2009-09-01 18:32:05.000000000 +0200
@@ -20,9 +20,7 @@
 
 static DEFINE_SPINLOCK(kthread_create_lock);
 static LIST_HEAD(kthread_create_list);
-
 struct task_struct *kthreadd_task;
-DECLARE_COMPLETION(kthreadd_task_init_done);
 
 struct kthread_create_info
 {
@@ -130,11 +128,14 @@ struct task_struct *kthread_create(int (
 	spin_lock(&kthread_create_lock);
 	list_add_tail(&create.list, &kthread_create_list);
 	spin_unlock(&kthread_create_lock);
-
-	if (unlikely(!kthreadd_task))
-		wait_for_completion(&kthreadd_task_init_done);
-
-	wake_up_process(kthreadd_task);
+	/*
+	 * If kthreadd was not created yet, kthreadd() must see the result
+	 * of list_add_tail() later, it takes kthread_create_lock before the
+	 * first schedule(). If kthreadd() locked kthread_create_lock at
+	 * least once, we must see kthreadd_task != NULL.
+	 */
+	if (likely(kthreadd_task))
+		wake_up_process(kthreadd_task);
 	wait_for_completion(&create.done);
 
 	if (!IS_ERR(create.result)) {
@@ -219,23 +220,18 @@ EXPORT_SYMBOL(kthread_stop);
 
 int kthreadd(void *unused)
 {
-	struct task_struct *tsk = current;
+	kthreadd_task = current;
 
 	/* Setup a clean context for our children to inherit. */
-	set_task_comm(tsk, "kthreadd");
-	ignore_signals(tsk);
-	set_user_nice(tsk, KTHREAD_NICE_LEVEL);
-	set_cpus_allowed_ptr(tsk, cpu_all_mask);
+	set_task_comm(kthreadd_task, "kthreadd");
+	ignore_signals(kthreadd_task);
+	set_user_nice(kthreadd_task, KTHREAD_NICE_LEVEL);
+	set_cpus_allowed_ptr(kthreadd_task, cpu_all_mask);
 	set_mems_allowed(node_possible_map);
 
 	current->flags |= PF_NOFREEZE | PF_FREEZER_NOSIG;
 
 	for (;;) {
-		set_current_state(TASK_INTERRUPTIBLE);
-		if (list_empty(&kthread_create_list))
-			schedule();
-		__set_current_state(TASK_RUNNING);
-
 		spin_lock(&kthread_create_lock);
 		while (!list_empty(&kthread_create_list)) {
 			struct kthread_create_info *create;
@@ -250,6 +246,11 @@ int kthreadd(void *unused)
 			spin_lock(&kthread_create_lock);
 		}
 		spin_unlock(&kthread_create_lock);
+
+		set_current_state(TASK_INTERRUPTIBLE);
+		if (list_empty(&kthread_create_list))
+			schedule();
+		__set_current_state(TASK_RUNNING);
 	}
 
 	return 0;


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-01 16:52                 ` [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done Oleg Nesterov
  2009-09-01 16:53                   ` [PATCH 1/1] " Oleg Nesterov
@ 2009-09-01 23:22                   ` Eric W. Biederman
  2009-09-02  9:13                     ` Oleg Nesterov
  1 sibling, 1 reply; 30+ messages in thread
From: Eric W. Biederman @ 2009-09-01 23:22 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: Ingo Molnar, arjan, jeremy, mschmidt, mingo, hpa, linux-kernel,
	tj, tglx, Linus Torvalds, Andrew Morton, linux-tip-commits,
	Rusty Russell

Oleg Nesterov <oleg@redhat.com> writes:

> On 09/01, Oleg Nesterov wrote:
>>
>> On 09/01, Ingo Molnar wrote:
>> >
>> > * Oleg Nesterov <oleg@redhat.com> wrote:
>> >
>> > > On 09/01, Ingo Molnar wrote:
>> > > >
>> > > > * Oleg Nesterov <oleg@redhat.com> wrote:
>> > > >
>> > > > > Yes, this should work. But I _think_ we can make the better fix...
>> > > > >
>> > > > > I'll try to make the patch soon. Afaics we don't need
>> > > > > kthreadd_task_init_done.
>> > > >
>> > > > ok.
>> > >
>> > > Just in case, the patch is ready. [...]
>> >
>> > yes - that's roughly the cleanup i referred to in the commit log.
>> >
>> > way too late for -rc8 though - the minimal fix i did _might_ be
>> > eligible.
>> >
>> > agreed?
>>
>> Agreed. Then I will sent the patch on top of this change.
>
> OK, I am sending the patch on top of your fix. Not sure how to really
> test it, but at least the kernel works when I apply the debugging patch
> below on top.

Stupid question.  How is it that we wind up trying to start kernel threads
before it is safe to do so?

Races should be impossible because the scheduler isn't running until a few
lines later.

Eric

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-01 23:22                   ` [PATCH 0/1] " Eric W. Biederman
@ 2009-09-02  9:13                     ` Oleg Nesterov
  2009-09-04  7:37                       ` Ingo Molnar
  0 siblings, 1 reply; 30+ messages in thread
From: Oleg Nesterov @ 2009-09-02  9:13 UTC (permalink / raw)
  To: Eric W. Biederman
  Cc: Ingo Molnar, arjan, jeremy, mschmidt, mingo, hpa, linux-kernel,
	tj, tglx, Linus Torvalds, Andrew Morton, linux-tip-commits,
	Rusty Russell

On 09/01, Eric W. Biederman wrote:
>
> Oleg Nesterov <oleg@redhat.com> writes:
>
> > On 09/01, Oleg Nesterov wrote:
> >>
> >> On 09/01, Ingo Molnar wrote:
> >> >
> >> > * Oleg Nesterov <oleg@redhat.com> wrote:
> >> >
> >> > > On 09/01, Ingo Molnar wrote:
> >> > > >
> >> > > > * Oleg Nesterov <oleg@redhat.com> wrote:
> >> > > >
> >> > > > > Yes, this should work. But I _think_ we can make the better fix...
> >> > > > >
> >> > > > > I'll try to make the patch soon. Afaics we don't need
> >> > > > > kthreadd_task_init_done.
> >> > > >
> >> > > > ok.
> >> > >
> >> > > Just in case, the patch is ready. [...]
> >> >
> >> > yes - that's roughly the cleanup i referred to in the commit log.
> >> >
> >> > way too late for -rc8 though - the minimal fix i did _might_ be
> >> > eligible.
> >> >
> >> > agreed?
> >>
> >> Agreed. Then I will sent the patch on top of this change.
> >
> > OK, I am sending the patch on top of your fix. Not sure how to really
> > test it, but at least the kernel works when I apply the debugging patch
> > below on top.
>
> Stupid question.  How is it that we wind up trying to start kernel threads
> before it is safe to do so?
>
> Races should be impossible because the scheduler isn't running until a few
> lines later.

Yes, I am confused too.

At first I thought I understand the race, now I don't. Please see the whole
thread: http://marc.info/?t=125180592500005

Oleg.


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH] kthreads: Fix startup synchronization boot crash
  2009-09-01 16:00                   ` Oleg Nesterov
@ 2009-09-02 13:06                     ` Ingo Molnar
  0 siblings, 0 replies; 30+ messages in thread
From: Ingo Molnar @ 2009-09-02 13:06 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: arjan, jeremy, mschmidt, mingo, hpa, linux-kernel, tj, tglx,
	Linus Torvalds, Andrew Morton, linux-tip-commits


* Oleg Nesterov <oleg@redhat.com> wrote:

> On 09/01, Ingo Molnar wrote:
> >
> > * Oleg Nesterov <oleg@redhat.com> wrote:
> >
> > > But I must admit, now I don't understand what happens,
> > >
> > > 	The modification of that variable is protected by the BKL, but
> > > 	the _ordering_ of the initial task (which becomes the idle
> > > 	thread of CPU0) and the init task (which is spawned by the
> > > 	initial task) is not synchronized.
> > >
> > > 	So we can occasionally end up init running sooner than
> > > 	rest_init()
> > >
> > > How? rest_init() can't be preempted and it holds BKL. And
> > > kernel_init() takes BKL before anything else. Confused...
> >
> > it cannot be preempted but it can schedule anywhere - and the BKL
> > will be dropped silently.
> >
> > This is one of the biggest dangers of the BKL
> 
> Yes I see. But rest_init() runs under preempt_disable(). If it was 
> rescheduled, schedule_debug() should complain. No?

hm, either something is broken, or some other codepath learned to do 
preempt_enable() in early init ... [which i'd call broken too]

Weird.

	Ingo

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-02  9:13                     ` Oleg Nesterov
@ 2009-09-04  7:37                       ` Ingo Molnar
  2009-09-18 16:32                         ` Wu Fei
  0 siblings, 1 reply; 30+ messages in thread
From: Ingo Molnar @ 2009-09-04  7:37 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: Eric W. Biederman, arjan, jeremy, mschmidt, mingo, hpa,
	linux-kernel, tj, tglx, Linus Torvalds, Andrew Morton,
	linux-tip-commits, Rusty Russell


* Oleg Nesterov <oleg@redhat.com> wrote:

> On 09/01, Eric W. Biederman wrote:
> >
> > Oleg Nesterov <oleg@redhat.com> writes:
> >
> > > On 09/01, Oleg Nesterov wrote:
> > >>
> > >> On 09/01, Ingo Molnar wrote:
> > >> >
> > >> > * Oleg Nesterov <oleg@redhat.com> wrote:
> > >> >
> > >> > > On 09/01, Ingo Molnar wrote:
> > >> > > >
> > >> > > > * Oleg Nesterov <oleg@redhat.com> wrote:
> > >> > > >
> > >> > > > > Yes, this should work. But I _think_ we can make the better fix...
> > >> > > > >
> > >> > > > > I'll try to make the patch soon. Afaics we don't need
> > >> > > > > kthreadd_task_init_done.
> > >> > > >
> > >> > > > ok.
> > >> > >
> > >> > > Just in case, the patch is ready. [...]
> > >> >
> > >> > yes - that's roughly the cleanup i referred to in the commit log.
> > >> >
> > >> > way too late for -rc8 though - the minimal fix i did _might_ be
> > >> > eligible.
> > >> >
> > >> > agreed?
> > >>
> > >> Agreed. Then I will sent the patch on top of this change.
> > >
> > > OK, I am sending the patch on top of your fix. Not sure how to really
> > > test it, but at least the kernel works when I apply the debugging patch
> > > below on top.
> >
> > Stupid question.  How is it that we wind up trying to start kernel threads
> > before it is safe to do so?
> >
> > Races should be impossible because the scheduler isn't running until a few
> > lines later.
> 
> Yes, I am confused too.
> 
> At first I thought I understand the race, now I don't. Please see 
> the whole thread: http://marc.info/?t=125180592500005

I dont understand it either - and the .config being !SMP excludes 
any sort of SMP race as well.

Lets delay this until i can debug it more fully.

	Ingo

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-04  7:37                       ` Ingo Molnar
@ 2009-09-18 16:32                         ` Wu Fei
  2009-09-18 18:54                           ` Oleg Nesterov
  0 siblings, 1 reply; 30+ messages in thread
From: Wu Fei @ 2009-09-18 16:32 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Oleg Nesterov, Eric W. Biederman, arjan, jeremy, mschmidt, mingo,
	hpa, linux-kernel, tj, tglx, Linus Torvalds, Andrew Morton,
	linux-tip-commits, Rusty Russell

On Fri, Sep 04, 2009 at 09:37:49AM +0200, Ingo Molnar wrote:
> 
> * Oleg Nesterov <oleg@redhat.com> wrote:
> 
> > On 09/01, Eric W. Biederman wrote:
> > >
> > > Oleg Nesterov <oleg@redhat.com> writes:
> > >
> > > > On 09/01, Oleg Nesterov wrote:
> > > >>
> > > >> On 09/01, Ingo Molnar wrote:
> > > >> >
> > > >> > * Oleg Nesterov <oleg@redhat.com> wrote:
> > > >> >
> > > >> > > On 09/01, Ingo Molnar wrote:
> > > >> > > >
> > > >> > > > * Oleg Nesterov <oleg@redhat.com> wrote:
> > > >> > > >
> > > >> > > > > Yes, this should work. But I _think_ we can make the better fix...
> > > >> > > > >
> > > >> > > > > I'll try to make the patch soon. Afaics we don't need
> > > >> > > > > kthreadd_task_init_done.
> > > >> > > >
> > > >> > > > ok.
> > > >> > >
> > > >> > > Just in case, the patch is ready. [...]
> > > >> >
> > > >> > yes - that's roughly the cleanup i referred to in the commit log.
> > > >> >
> > > >> > way too late for -rc8 though - the minimal fix i did _might_ be
> > > >> > eligible.
> > > >> >
> > > >> > agreed?
> > > >>
> > > >> Agreed. Then I will sent the patch on top of this change.
> > > >
> > > > OK, I am sending the patch on top of your fix. Not sure how to really
> > > > test it, but at least the kernel works when I apply the debugging patch
> > > > below on top.
> > >
> > > Stupid question.  How is it that we wind up trying to start kernel threads
> > > before it is safe to do so?
> > >
> > > Races should be impossible because the scheduler isn't running until a few
> > > lines later.
> > 
> > Yes, I am confused too.
> > 
> > At first I thought I understand the race, now I don't. Please see 
> > the whole thread: http://marc.info/?t=125180592500005
> 
> I dont understand it either - and the .config being !SMP excludes 
> any sort of SMP race as well.
> 
> Lets delay this until i can debug it more fully.
> 
CONFIG_PREEMPT_VOLUNTARY looks like the key of this problem,
might_resched becomes _cond_resched, and since d86ee480 changes 
it not to check SYSTEM_RUNNING, this function may call schedule().
And might_resched may be called even from do_fork(), so this is a
scenario:

kernel_thread(kernel_init, ...)
pid = kernel_thread(kthreadd, ...)
	-- switch to thread kernel_init, which refers to  kthreadd_task
           and NULL reference happens.  Note, because of
	   !CONFIG_LOCK_KERNEL,  lock_kernel() is nop.

What about just creating kthreadd before kernel_init as the following,
it works for me?


diff --git a/init/main.c b/init/main.c
index b34fd8e..ae86699 100644
--- a/init/main.c
+++ b/init/main.c
@@ -452,10 +452,10 @@ static noinline void __init_refok rest_init(void)
 	int pid;
 
 	rcu_scheduler_starting();
-	kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
-	numa_default_policy();
 	pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
 	kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
+	kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
+	numa_default_policy();
 	unlock_kernel();
 
 	/*

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* Re: [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-18 16:32                         ` Wu Fei
@ 2009-09-18 18:54                           ` Oleg Nesterov
  2009-09-18 19:17                             ` Linus Torvalds
  0 siblings, 1 reply; 30+ messages in thread
From: Oleg Nesterov @ 2009-09-18 18:54 UTC (permalink / raw)
  To: Wu Fei
  Cc: Ingo Molnar, Eric W. Biederman, arjan, jeremy, mschmidt, mingo,
	hpa, linux-kernel, tj, tglx, Linus Torvalds, Andrew Morton,
	linux-tip-commits, Rusty Russell

On 09/19, Wu Fei wrote:
>
> On Fri, Sep 04, 2009 at 09:37:49AM +0200, Ingo Molnar wrote:
> >
> > Lets delay this until i can debug it more fully.
> >
> CONFIG_PREEMPT_VOLUNTARY looks like the key of this problem,
> might_resched becomes _cond_resched, and since d86ee480 changes
> it not to check SYSTEM_RUNNING,

... and should_resched() is true under preempt_disable()

> --- a/init/main.c
> +++ b/init/main.c
> @@ -452,10 +452,10 @@ static noinline void __init_refok rest_init(void)
>  	int pid;
>
>  	rcu_scheduler_starting();
> -	kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
> -	numa_default_policy();
>  	pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
>  	kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
> +	kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);

We can't do this. kernel_init() should run with ->pid == 1, we are
going to exec /sbin/init.

Oleg.


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-18 18:54                           ` Oleg Nesterov
@ 2009-09-18 19:17                             ` Linus Torvalds
  2009-09-18 21:12                               ` Oleg Nesterov
  0 siblings, 1 reply; 30+ messages in thread
From: Linus Torvalds @ 2009-09-18 19:17 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: Wu Fei, Ingo Molnar, Eric W. Biederman, arjan, jeremy, mschmidt,
	mingo, hpa, linux-kernel, tj, tglx, Andrew Morton,
	linux-tip-commits, Rusty Russell



On Fri, 18 Sep 2009, Oleg Nesterov wrote:
> >  	rcu_scheduler_starting();
> > -	kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
> > -	numa_default_policy();
> >  	pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
> >  	kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
> > +	kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
> 
> We can't do this. kernel_init() should run with ->pid == 1, we are
> going to exec /sbin/init.

Umm - why not just add CLONE_PID to the 'kthreadd' creation, then?

		Linus

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-18 19:17                             ` Linus Torvalds
@ 2009-09-18 21:12                               ` Oleg Nesterov
  2009-09-18 21:15                                 ` Oleg Nesterov
  2009-09-18 22:06                                 ` Linus Torvalds
  0 siblings, 2 replies; 30+ messages in thread
From: Oleg Nesterov @ 2009-09-18 21:12 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Wu Fei, Ingo Molnar, Eric W. Biederman, arjan, jeremy, mschmidt,
	mingo, hpa, linux-kernel, tj, tglx, Andrew Morton,
	linux-tip-commits, Rusty Russell

On 09/18, Linus Torvalds wrote:
>
> On Fri, 18 Sep 2009, Oleg Nesterov wrote:
> > >  	rcu_scheduler_starting();
> > > -	kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
> > > -	numa_default_policy();
> > >  	pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
> > >  	kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
> > > +	kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
> >
> > We can't do this. kernel_init() should run with ->pid == 1, we are
> > going to exec /sbin/init.
>
> Umm - why not just add CLONE_PID to the 'kthreadd' creation, then?

Not sure I understand... We don't have CLONE_PID, and kthreadd()
shouldn't have pid == 0 anyway.

But this is not needed. We can do alloc_pid() before 'kthreadd' creation,
then free_pid() before kernel_thread(kernel_init).

However, I am not sure we should do something like this. The patch
I sent is very simple, in essence it is one-liner which only does

	-       wake_up_process(kthreadd_task);
	+	if (kthreadd_task)
	+		wake_up_process(kthreadd_task);

this way we should not worry about the ordering, kthread_create()
can be called at any time, even before kthreadd creation (not that
I think this is really useful though).


But personally I still can't understand what happens. If we were
preempted somewhere before "kthreadd_task = find_task_by_pid_ns()"
initialization, then schedule_debug() should complain? rest_init()
runs under preempt_disable().

Oleg.


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-18 21:12                               ` Oleg Nesterov
@ 2009-09-18 21:15                                 ` Oleg Nesterov
  2009-09-18 22:06                                 ` Linus Torvalds
  1 sibling, 0 replies; 30+ messages in thread
From: Oleg Nesterov @ 2009-09-18 21:15 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Wu Fei, Ingo Molnar, Eric W. Biederman, arjan, jeremy, mschmidt,
	mingo, hpa, linux-kernel, tj, tglx, Andrew Morton,
	linux-tip-commits, Rusty Russell

On 09/18, Oleg Nesterov wrote:
>
> But personally I still can't understand what happens. If we were
> preempted somewhere before "kthreadd_task = find_task_by_pid_ns()"
> initialization, then schedule_debug() should complain? rest_init()
> runs under preempt_disable().

Ah. CONFIG_PREEMPT_VOLUNTARY means !CONFIG_PREEMPT, and Ingo mentioned
that SMP is disabled, this also means lock_kernel() is noop.

Oleg.


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-18 21:12                               ` Oleg Nesterov
  2009-09-18 21:15                                 ` Oleg Nesterov
@ 2009-09-18 22:06                                 ` Linus Torvalds
  2009-09-18 23:11                                   ` Eric W. Biederman
  2009-09-18 23:22                                   ` Oleg Nesterov
  1 sibling, 2 replies; 30+ messages in thread
From: Linus Torvalds @ 2009-09-18 22:06 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: Wu Fei, Ingo Molnar, Eric W. Biederman, arjan, jeremy, mschmidt,
	mingo, hpa, linux-kernel, tj, tglx, Andrew Morton,
	linux-tip-commits, Rusty Russell



On Fri, 18 Sep 2009, Oleg Nesterov wrote:
> 
> Not sure I understand... We don't have CLONE_PID, and kthreadd()
> shouldn't have pid == 0 anyway.

Ahh, we got rid of CLONE_PID a long time ago, and renamed it to 
CLONE_IDLETASK (which was what it was used for).

As to why pid == 0 wouldn't work, I don't know, but I'll take your word 
for it.

		Linus

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-18 22:06                                 ` Linus Torvalds
@ 2009-09-18 23:11                                   ` Eric W. Biederman
  2009-09-18 23:22                                   ` Oleg Nesterov
  1 sibling, 0 replies; 30+ messages in thread
From: Eric W. Biederman @ 2009-09-18 23:11 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Oleg Nesterov, Wu Fei, Ingo Molnar, arjan, jeremy, mschmidt,
	mingo, hpa, linux-kernel, tj, tglx, Andrew Morton,
	linux-tip-commits, Rusty Russell

Linus Torvalds <torvalds@linux-foundation.org> writes:

> On Fri, 18 Sep 2009, Oleg Nesterov wrote:
>> 
>> Not sure I understand... We don't have CLONE_PID, and kthreadd()
>> shouldn't have pid == 0 anyway.
>
> Ahh, we got rid of CLONE_PID a long time ago, and renamed it to 
> CLONE_IDLETASK (which was what it was used for).
>
> As to why pid == 0 wouldn't work, I don't know, but I'll take your word 
> for it.

It probably would work but it would not be visible in proc  Making a kernel
thread that actually does work seems undesirable.

Eric

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-18 22:06                                 ` Linus Torvalds
  2009-09-18 23:11                                   ` Eric W. Biederman
@ 2009-09-18 23:22                                   ` Oleg Nesterov
  2009-09-18 23:38                                     ` Linus Torvalds
  1 sibling, 1 reply; 30+ messages in thread
From: Oleg Nesterov @ 2009-09-18 23:22 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Wu Fei, Ingo Molnar, Eric W. Biederman, arjan, jeremy, mschmidt,
	mingo, hpa, linux-kernel, tj, tglx, Andrew Morton,
	linux-tip-commits, Rusty Russell

On 09/18, Linus Torvalds wrote:
>
> As to why pid == 0 wouldn't work, I don't know, but I'll take your word
> for it.

Say, admin wants to renice kthreadd or change its affinity. And we can't
show kthread in /proc if its pid is 0.

This can be changed afaics, we can even remove pidmap_init()->set_bit(0) so
that the first copy_process()->alloc_pid() will create the pid with nr == 0.
We don't care about unhashed init_struct_pid which also has nr == 0.

But I don't think this would be good, currently the code can safely assume
that the valid pid can't be 0. For example, find_process_by_pid(0) returns
current.

Oleg.


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done
  2009-09-18 23:22                                   ` Oleg Nesterov
@ 2009-09-18 23:38                                     ` Linus Torvalds
  0 siblings, 0 replies; 30+ messages in thread
From: Linus Torvalds @ 2009-09-18 23:38 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: Wu Fei, Ingo Molnar, Eric W. Biederman, arjan, jeremy, mschmidt,
	mingo, hpa, linux-kernel, tj, tglx, Andrew Morton,
	linux-tip-commits, Rusty Russell



On Sat, 19 Sep 2009, Oleg Nesterov wrote:
>
> On 09/18, Linus Torvalds wrote:
> >
> > As to why pid == 0 wouldn't work, I don't know, but I'll take your word
> > for it.
> 
> Say, admin wants to renice kthreadd or change its affinity. And we can't
> show kthread in /proc if its pid is 0.

Ok, so it's a "that's not good" kind of situation, rather than a "it 
wouldn't work" one. Fair enough.

Of course, another way to do this would be to simply use CLONE_STOPPED to 
create the 'init' task first, but not wake it up - and then wake it up 
only after kthreadd exists.

I'm sure there are other things we could do ;)

		Linus

^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2009-09-18 23:40 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-08-29 16:27 [PATCH] x86: detect stack protector for i386 builds on x86_64 Michal Schmidt
2009-08-30 13:39 ` Américo Wang
2009-08-30 18:43 ` [tip:x86/asm] x86: Detect " tip-bot for Michal Schmidt
2009-09-01 10:03   ` Ingo Molnar
2009-09-01 11:39     ` [PATCH] kthreads: Fix startup synchronization boot crash Ingo Molnar
2009-09-01 13:04       ` Oleg Nesterov
2009-09-01 13:14         ` Ingo Molnar
2009-09-01 13:37           ` Oleg Nesterov
2009-09-01 13:59             ` Ingo Molnar
2009-09-01 14:55               ` Oleg Nesterov
2009-09-01 15:54                 ` Ingo Molnar
2009-09-01 16:00                   ` Oleg Nesterov
2009-09-02 13:06                     ` Ingo Molnar
2009-09-01 16:52                 ` [PATCH 0/1] kthreads: simplify !kthreadd_task logic, kill kthreadd_task_init_done Oleg Nesterov
2009-09-01 16:53                   ` [PATCH 1/1] " Oleg Nesterov
2009-09-01 23:22                   ` [PATCH 0/1] " Eric W. Biederman
2009-09-02  9:13                     ` Oleg Nesterov
2009-09-04  7:37                       ` Ingo Molnar
2009-09-18 16:32                         ` Wu Fei
2009-09-18 18:54                           ` Oleg Nesterov
2009-09-18 19:17                             ` Linus Torvalds
2009-09-18 21:12                               ` Oleg Nesterov
2009-09-18 21:15                                 ` Oleg Nesterov
2009-09-18 22:06                                 ` Linus Torvalds
2009-09-18 23:11                                   ` Eric W. Biederman
2009-09-18 23:22                                   ` Oleg Nesterov
2009-09-18 23:38                                     ` Linus Torvalds
2009-09-01 15:08             ` [PATCH] kthreads: Fix startup synchronization boot crash Américo Wang
2009-09-01 15:19               ` Oleg Nesterov
2009-08-31  6:21 ` [PATCH] x86: detect stack protector for i386 builds on x86_64 Tejun Heo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.