[BUG/PATCH] x86 mmiotrace: dynamically disable non-boot CPUs - Kernel

This is a discussion on [BUG/PATCH] x86 mmiotrace: dynamically disable non-boot CPUs - Kernel ; From 9d00d006631650e8ba9131356c544a5ae79f873e Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Sat, 12 Apr 2008 00:18:57 +0300 Subject: [PATCH] x86 mmiotrace: dynamically disable non-boot CPUs Mmiotrace is not reliable with multiple CPUs and may miss events. Drop to single CPU ...

+ Reply to Thread
Page 1 of 2 1 2 LastLast
Results 1 to 20 of 29

Thread: [BUG/PATCH] x86 mmiotrace: dynamically disable non-boot CPUs

  1. [BUG/PATCH] x86 mmiotrace: dynamically disable non-boot CPUs

    From 9d00d006631650e8ba9131356c544a5ae79f873e Mon Sep 17 00:00:00 2001
    From: Pekka Paalanen
    Date: Sat, 12 Apr 2008 00:18:57 +0300
    Subject: [PATCH] x86 mmiotrace: dynamically disable non-boot CPUs

    Mmiotrace is not reliable with multiple CPUs and may
    miss events. Drop to single CPU when mmiotrace is activated.

    Signed-off-by: Pekka Paalanen
    ---

    When I tested this patch on Intel Core 2 Duo, enter_uniprocessor() triggered
    the following kernel bug:

    Linux version 2.6.25-rc8-sched-devel.git-x86-latest.git (paalanen@ct200006)
    (gcc version 4.1.2 (Gentoo 4.1.2 p1.0.1)) #2 SMP PREEMPT Sun Apr 13
    22:09:03 EEST 2008
    ....
    in mmio_trace_init
    mmiotrace: Disabling non-boot CPUs...
    CPU 1 is now offline
    lockdep: fixing up alternatives.
    SMP alternatives: switching to UP code
    BUG: sleeping function called from invalid context at mm/slab.c:3053
    in_atomic():1, irqs_disabled():0
    5 locks held by bash/4423:
    #0: (trace_types_lock){--..}, at: [] tracing_set_trace_write+0x93/0x11a
    #1: (mmiotrace_mutex){--..}, at: [] enable_mmiotrace+0x17/0x142
    #2: (cpu_add_remove_lock){--..}, at: [] cpu_maps_update_begin+0x12/0x14
    #3: (&cpu_hotplug.lock){--..}, at: [] cpu_hotplug_begin+0x39/0x9f
    #4: (smp_alt){--..}, at: [] alternatives_smp_switch+0x66/0x1ab
    Pid: 4423, comm: bash Not tainted 2.6.25-rc8-sched-devel.git-x86-latest.git #2

    Call Trace:
    [] ? __debug_show_held_locks+0x22/0x24
    [] __might_sleep+0xd9/0xdb
    [] cache_alloc_debugcheck_before+0x23/0x32
    [] __kmalloc+0x34/0xa5
    [] ? clear_ti_thread_flag+0x10/0x17
    [] kmalloc_node+0x9/0xb
    [] __get_vm_area_node+0xa2/0x1cb
    [] ? clear_ti_thread_flag+0x10/0x17
    [] __get_vm_area+0x13/0x15
    [] get_vm_area+0x1d/0x1f
    [] vmap+0x2a/0x5c
    [] text_poke+0xaa/0x136
    [] ? _etext+0x0/0x5
    [] alternatives_smp_unlock+0x4f/0x63
    [] alternatives_smp_switch+0x16e/0x1ab
    [] __cpu_die+0x53/0x7d
    [] _cpu_down+0x195/0x26c
    [] cpu_down+0x26/0x36
    [] enable_mmiotrace+0xa7/0x142
    [] mmio_trace_init+0x3c/0x40
    [] tracing_set_trace_write+0xf2/0x11a
    [] ? security_file_permission+0x11/0x13
    [] vfs_write+0xa7/0xe1
    [] sys_write+0x47/0x6d
    [] system_call_after_swapgs+0x7b/0x80

    mmiotrace: CPU1 is down.
    mmiotrace: enabled.

    Is this my fault, or is there a bug somewhere else?
    The kernel tree is sched-devel/latest git from 12th April, IIRC.

    arch/x86/mm/mmio-mod.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++
    1 files changed, 51 insertions(+), 0 deletions(-)

    diff --git a/arch/x86/mm/mmio-mod.c b/arch/x86/mm/mmio-mod.c
    index ab2bb77..f523c5f 100644
    --- a/arch/x86/mm/mmio-mod.c
    +++ b/arch/x86/mm/mmio-mod.c
    @@ -32,6 +32,7 @@
    #include /* for ISA_START_ADDRESS */
    #include
    #include
    +#include

    #include "pf_in.h"

    @@ -399,6 +400,54 @@ static void clear_trace_list(void)
    }
    }

    +static cpumask_t downed_cpus;
    +
    +static void enter_uniprocessor(void)
    +{
    +#ifdef CONFIG_SMP
    + int cpu;
    + int err;
    +
    + get_online_cpus();
    + downed_cpus = cpu_online_map;
    + cpu_clear(first_cpu(cpu_online_map), downed_cpus);
    + if (num_online_cpus() > 1)
    + pr_notice(NAME "Disabling non-boot CPUs...\n");
    + put_online_cpus();
    +
    + for_each_cpu_mask(cpu, downed_cpus) {
    + err = cpu_down(cpu);
    + if (!err) {
    + pr_info(NAME "CPU%d is down.\n", cpu);
    + } else {
    + pr_err(NAME "Error taking CPU%d down: %d\n", cpu, err);
    + }
    + }
    + if (num_online_cpus() > 1)
    + pr_warning(NAME "multiple CPUs still online, "
    + "may miss events.\n");
    +#endif /* CONFIG_SMP */
    +}
    +
    +static void leave_uniprocessor(void)
    +{
    +#ifdef CONFIG_SMP
    + int cpu;
    + int err;
    +
    + if (cpus_weight(downed_cpus) == 0)
    + return;
    + pr_notice(NAME "Re-enabling CPUs...\n");
    + for_each_cpu_mask(cpu, downed_cpus) {
    + err = cpu_up(cpu);
    + if (!err)
    + pr_info(NAME "enabled CPU%d.\n", cpu);
    + else
    + pr_err(NAME "cannot re-enable CPU%d: %d\n", cpu, err);
    + }
    +#endif /* CONFIG_SMP */
    +}
    +
    #if 0 /* XXX: out of order */
    static struct file_operations fops_marker = {
    .owner = THIS_MODULE,
    @@ -421,6 +470,7 @@ void enable_mmiotrace(void)

    if (nommiotrace)
    pr_info(NAME "MMIO tracing disabled.\n");
    + enter_uniprocessor();
    spin_lock_irq(&trace_lock);
    atomic_inc(&mmiotrace_enabled);
    spin_unlock_irq(&trace_lock);
    @@ -441,6 +491,7 @@ void disable_mmiotrace(void)
    spin_unlock_irq(&trace_lock);

    clear_trace_list(); /* guarantees: no more kmmio callbacks */
    + leave_uniprocessor();
    if (marker_file) {
    debugfs_remove(marker_file);
    marker_file = NULL;
    --
    1.5.3.7

    --
    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/

  2. Re: [BUG/PATCH] x86 mmiotrace: dynamically disable non-boot CPUs


    thanks Pekka, i've applied your patches.

    i'm wondering about this though:

    > Mmiotrace is not reliable with multiple CPUs and may miss events. Drop
    > to single CPU when mmiotrace is activated.


    we should fix this restriction ASAP. Forcibly dropping to UP will cause
    mmiotrace to be much less useful for diagnostic purposes of Linux
    drivers. We want to enable the mmiotrace-ing of specific devices via
    some /sys flag. For example via:

    cat /sys/devices/pci0000\:00/0000\:00\:1f.2/mmiotrace

    this should start mmiotracing of that specific device - or something
    like that. Hm?

    > When I tested this patch on Intel Core 2 Duo, enter_uniprocessor()
    > triggered the following kernel bug:
    >
    > Linux version 2.6.25-rc8-sched-devel.git-x86-latest.git (paalanen@ct200006)
    > (gcc version 4.1.2 (Gentoo 4.1.2 p1.0.1)) #2 SMP PREEMPT Sun Apr 13
    > 22:09:03 EEST 2008
    > ...
    > in mmio_trace_init
    > mmiotrace: Disabling non-boot CPUs...
    > CPU 1 is now offline
    > lockdep: fixing up alternatives.
    > SMP alternatives: switching to UP code
    > BUG: sleeping function called from invalid context at mm/slab.c:3053
    > in_atomic():1, irqs_disabled():0
    > 5 locks held by bash/4423:
    > #0: (trace_types_lock){--..}, at: [] tracing_set_trace_write+0x93/0x11a
    > #1: (mmiotrace_mutex){--..}, at: [] enable_mmiotrace+0x17/0x142
    > #2: (cpu_add_remove_lock){--..}, at: [] cpu_maps_update_begin+0x12/0x14
    > #3: (&cpu_hotplug.lock){--..}, at: [] cpu_hotplug_begin+0x39/0x9f
    > #4: (smp_alt){--..}, at: [] alternatives_smp_switch+0x66/0x1ab
    > Pid: 4423, comm: bash Not tainted 2.6.25-rc8-sched-devel.git-x86-latest.git #2
    >
    > Call Trace:
    > [] ? __debug_show_held_locks+0x22/0x24
    > [] __might_sleep+0xd9/0xdb
    > [] cache_alloc_debugcheck_before+0x23/0x32
    > [] __kmalloc+0x34/0xa5
    > [] ? clear_ti_thread_flag+0x10/0x17
    > [] kmalloc_node+0x9/0xb
    > [] __get_vm_area_node+0xa2/0x1cb
    > [] ? clear_ti_thread_flag+0x10/0x17
    > [] __get_vm_area+0x13/0x15
    > [] get_vm_area+0x1d/0x1f
    > [] vmap+0x2a/0x5c
    > [] text_poke+0xaa/0x136
    > [] ? _etext+0x0/0x5
    > [] alternatives_smp_unlock+0x4f/0x63
    > [] alternatives_smp_switch+0x16e/0x1ab
    > [] __cpu_die+0x53/0x7d
    > [] _cpu_down+0x195/0x26c
    > [] cpu_down+0x26/0x36
    > [] enable_mmiotrace+0xa7/0x142
    > [] mmio_trace_init+0x3c/0x40
    > [] tracing_set_trace_write+0xf2/0x11a
    > [] ? security_file_permission+0x11/0x13
    > [] vfs_write+0xa7/0xe1
    > [] sys_write+0x47/0x6d
    > [] system_call_after_swapgs+0x7b/0x80
    >
    > mmiotrace: CPU1 is down.
    > mmiotrace: enabled.
    >
    > Is this my fault, or is there a bug somewhere else? The kernel tree is
    > sched-devel/latest git from 12th April, IIRC.


    there's no known bug of sched-devel/latest of this kind (or any known
    bug for that matter).

    i suspect the bug is that you bring the CPU down from an atomic
    (spinlocked or irq disabled) context.

    Ingo
    --
    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/

  3. Re: [BUG/PATCH] x86 mmiotrace: dynamically disable non-boot CPUs

    On Mon, 14 Apr 2008 08:57:13 +0200
    Ingo Molnar wrote:

    > thanks Pekka, i've applied your patches.


    Great, thanks.

    > i'm wondering about this though:
    >
    > > Mmiotrace is not reliable with multiple CPUs and may miss events. Drop
    > > to single CPU when mmiotrace is activated.

    >
    > we should fix this restriction ASAP. Forcibly dropping to UP will cause
    > mmiotrace to be much less useful for diagnostic purposes of Linux


    Ok, how do you propose we solve this?

    I have asked the question before, and then I had two ideas. Well, the
    first one was actually your idea (so I hear) to solve the same problem for
    kmemcheck.
    - per-cpu page tables
    - instead of single-stepping, emulate the faulting instruction and never
    disarm pages during tracing. (Use and modify code from KVM.)

    I don't believe either of these is easy or fast to implement. Given some
    months, I might be able to achieve emulation. Page tables are still
    magic to me.

    > drivers. We want to enable the mmiotrace-ing of specific devices via
    > some /sys flag. For example via:
    >
    > cat /sys/devices/pci0000\:00/0000\:00\:1f.2/mmiotrace
    >
    > this should start mmiotracing of that specific device - or something
    > like that. Hm?


    Ooh, that sounds like a neat interface. I like it. I've been
    half-thinking of different ways of specifying the set of devices to
    trace, but none of them was particularly nice.
    This feature is for post-2.6.26, right?

    Ok, so first select mmiotrace tracer, at which point those sysfs files
    appear, but mmiotrace is not activated yet. Then, when any of the
    device specific files, or the global file in debugfs, is opened,
    mmiotrace activates. And if the file is closed, mmiotrace deactivates.
    Should we support several "cats" at the same time?

    > > When I tested this patch on Intel Core 2 Duo, enter_uniprocessor()
    > > triggered the following kernel bug:
    > >
    > > Linux version 2.6.25-rc8-sched-devel.git-x86-latest.git (paalanen@ct200006)
    > > (gcc version 4.1.2 (Gentoo 4.1.2 p1.0.1)) #2 SMP PREEMPT Sun Apr 13
    > > 22:09:03 EEST 2008
    > > ...
    > > in mmio_trace_init
    > > mmiotrace: Disabling non-boot CPUs...
    > > CPU 1 is now offline
    > > lockdep: fixing up alternatives.
    > > SMP alternatives: switching to UP code
    > > BUG: sleeping function called from invalid context at mm/slab.c:3053
    > > in_atomic():1, irqs_disabled():0
    > > 5 locks held by bash/4423:
    > > #0: (trace_types_lock){--..}, at: [] tracing_set_trace_write+0x93/0x11a
    > > #1: (mmiotrace_mutex){--..}, at: [] enable_mmiotrace+0x17/0x142
    > > #2: (cpu_add_remove_lock){--..}, at: [] cpu_maps_update_begin+0x12/0x14
    > > #3: (&cpu_hotplug.lock){--..}, at: [] cpu_hotplug_begin+0x39/0x9f
    > > #4: (smp_alt){--..}, at: [] alternatives_smp_switch+0x66/0x1ab
    > > Pid: 4423, comm: bash Not tainted 2.6.25-rc8-sched-devel.git-x86-latest.git #2
    > >
    > > Call Trace:
    > > [] ? __debug_show_held_locks+0x22/0x24
    > > [] __might_sleep+0xd9/0xdb
    > > [] cache_alloc_debugcheck_before+0x23/0x32
    > > [] __kmalloc+0x34/0xa5
    > > [] ? clear_ti_thread_flag+0x10/0x17
    > > [] kmalloc_node+0x9/0xb
    > > [] __get_vm_area_node+0xa2/0x1cb
    > > [] ? clear_ti_thread_flag+0x10/0x17
    > > [] __get_vm_area+0x13/0x15
    > > [] get_vm_area+0x1d/0x1f
    > > [] vmap+0x2a/0x5c
    > > [] text_poke+0xaa/0x136
    > > [] ? _etext+0x0/0x5
    > > [] alternatives_smp_unlock+0x4f/0x63
    > > [] alternatives_smp_switch+0x16e/0x1ab
    > > [] __cpu_die+0x53/0x7d
    > > [] _cpu_down+0x195/0x26c
    > > [] cpu_down+0x26/0x36
    > > [] enable_mmiotrace+0xa7/0x142
    > > [] mmio_trace_init+0x3c/0x40
    > > [] tracing_set_trace_write+0xf2/0x11a
    > > [] ? security_file_permission+0x11/0x13
    > > [] vfs_write+0xa7/0xe1
    > > [] sys_write+0x47/0x6d
    > > [] system_call_after_swapgs+0x7b/0x80
    > >
    > > mmiotrace: CPU1 is down.
    > > mmiotrace: enabled.
    > >
    > > Is this my fault, or is there a bug somewhere else? The kernel tree is
    > > sched-devel/latest git from 12th April, IIRC.

    >
    > there's no known bug of sched-devel/latest of this kind (or any known
    > bug for that matter).
    >
    > i suspect the bug is that you bring the CPU down from an atomic
    > (spinlocked or irq disabled) context.


    Hmm, it should not be... I have to double-check, but all the other code,
    too, from where enter_uniprocessor() is called, may sleep. The first thing
    the caller does is to acquire a mutex, which I assume would complain
    loudly if spinlocked or irq-disabled.

    Ingo, thank you for fixing this patch, though I'd like to suggest to
    leave it out for now, since there clearly are worse problems with it
    than without it. And if we can solve the SMP issue, this is not needed.
    For the time being we can just instruct users to disable all but one CPU
    when try want to trace.


    Thanks.

    --
    Pekka Paalanen
    http://www.iki.fi/pq/
    --
    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/

  4. Re: [BUG/PATCH] x86 mmiotrace: dynamically disable non-boot CPUs


    * Pekka Paalanen wrote:

    > > we should fix this restriction ASAP. Forcibly dropping to UP will
    > > cause mmiotrace to be much less useful for diagnostic purposes of
    > > Linux

    >
    > Ok, how do you propose we solve this?
    >
    > I have asked the question before, and then I had two ideas. Well, the
    > first one was actually your idea (so I hear) to solve the same problem for
    > kmemcheck.
    > - per-cpu page tables
    > - instead of single-stepping, emulate the faulting instruction and never
    > disarm pages during tracing. (Use and modify code from KVM.)
    >
    > I don't believe either of these is easy or fast to implement. Given
    > some months, I might be able to achieve emulation. Page tables are
    > still magic to me.


    yeah - it looks complex. Not a showstopper for now :-)

    but given that Xorg is usually just a single task, do we _really_ need
    this?

    > > drivers. We want to enable the mmiotrace-ing of specific devices via
    > > some /sys flag. For example via:
    > >
    > > cat /sys/devices/pci0000\:00/0000\:00\:1f.2/mmiotrace
    > >
    > > this should start mmiotracing of that specific device - or something
    > > like that. Hm?

    >
    > Ooh, that sounds like a neat interface. I like it. I've been
    > half-thinking of different ways of specifying the set of devices to
    > trace, but none of them was particularly nice. This feature is for
    > post-2.6.26, right?


    yeah, most likely.

    > Ok, so first select mmiotrace tracer, at which point those sysfs files
    > appear, but mmiotrace is not activated yet. Then, when any of the
    > device specific files, or the global file in debugfs, is opened,
    > mmiotrace activates. And if the file is closed, mmiotrace deactivates.


    sounds good to me!

    > Should we support several "cats" at the same time?


    if it's possible ...

    > > i suspect the bug is that you bring the CPU down from an atomic
    > > (spinlocked or irq disabled) context.

    >
    > Hmm, it should not be... I have to double-check, but all the other
    > code, too, from where enter_uniprocessor() is called, may sleep. The
    > first thing the caller does is to acquire a mutex, which I assume
    > would complain loudly if spinlocked or irq-disabled.
    >
    > Ingo, thank you for fixing this patch, though I'd like to suggest to
    > leave it out for now, since there clearly are worse problems with it
    > than without it. And if we can solve the SMP issue, this is not
    > needed. For the time being we can just instruct users to disable all
    > but one CPU when try want to trace.


    i think we still need to make this as 'transparent' to users as
    possible. Disabling CPUs can be tedious.

    are lost events really a problem in practice, given Xorg's
    single-threadedness?

    i'm leaving out this patch from the series for now.

    Ingo
    --
    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/

  5. Re: [BUG/PATCH] x86 mmiotrace: dynamically disable non-boot CPUs

    On Wed, 16 Apr 2008 13:46:09 +0200
    Ingo Molnar wrote:

    >
    > * Pekka Paalanen wrote:
    >
    > > > we should fix this restriction ASAP. Forcibly dropping to UP will
    > > > cause mmiotrace to be much less useful for diagnostic purposes of
    > > > Linux

    > >
    > > Ok, how do you propose we solve this?
    > >
    > > I have asked the question before, and then I had two ideas. Well, the
    > > first one was actually your idea (so I hear) to solve the same problem for
    > > kmemcheck.
    > > - per-cpu page tables
    > > - instead of single-stepping, emulate the faulting instruction and never
    > > disarm pages during tracing. (Use and modify code from KVM.)
    > >
    > > I don't believe either of these is easy or fast to implement. Given
    > > some months, I might be able to achieve emulation. Page tables are
    > > still magic to me.

    >
    > yeah - it looks complex. Not a showstopper for now :-)
    >
    > but given that Xorg is usually just a single task, do we _really_ need
    > this?


    We're not tracing Xorg at all. Mmiotrace still cannot catch accesses
    originating in user space. It is tracing MMIO accesses from within
    the kernel, and this means that IRQ services and device syscalls
    may be accessing the hardware at the same time. Vblank interrupts
    happen quite often, some GPU commands are actually emulated in
    kernel via interrupts and whatnot. The nvidia proprietary kernel blob
    is many times bigger than my bzImage!

    (A simple X startup and quit creates in the order of 1-2 million
    MMIO events.)

    As do we really need this, I think it might save a lot of head
    scratching when someone is reverse engineering a feature and gets
    every time a different trace due to some events being missed.
    But this is theory. So far everyone has been tracing with UP,
    and this has not been a problem. I have no idea if it would make
    a real difference.

    [Recap for nouveau@ list:
    mmiotrace has a race on SMP, where during instruction single stepping
    other CPUs can run freely on the page which the faulted instruction
    accessed. This causes some of the simultaneous accesses to the same
    page of the same iomem-mapping to be missed.]

    It does sound very rare. Nouveau people, what do you think, can this
    be a problem?

    > > > i suspect the bug is that you bring the CPU down from an atomic
    > > > (spinlocked or irq disabled) context.

    > >
    > > Hmm, it should not be... I have to double-check, but all the other
    > > code, too, from where enter_uniprocessor() is called, may sleep. The
    > > first thing the caller does is to acquire a mutex, which I assume
    > > would complain loudly if spinlocked or irq-disabled.
    > >
    > > Ingo, thank you for fixing this patch, though I'd like to suggest to
    > > leave it out for now, since there clearly are worse problems with it
    > > than without it. And if we can solve the SMP issue, this is not
    > > needed. For the time being we can just instruct users to disable all
    > > but one CPU when try want to trace.

    >
    > i think we still need to make this as 'transparent' to users as
    > possible. Disabling CPUs can be tedious.


    Compared to the out-of-tree mmiotrace, the in-kernel version is already
    a lot easier to use. Instructing people to drop to UP before tracing
    is simple compared to what it was.

    > i'm leaving out this patch from the series for now.


    Thanks.

    --
    Pekka Paalanen
    http://www.iki.fi/pq/
    --
    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/

  6. Re: [BUG/PATCH] x86 mmiotrace: dynamically disable non-boot CPUs


    * Pekka Paalanen wrote:

    > > yeah - it looks complex. Not a showstopper for now :-)
    > >
    > > but given that Xorg is usually just a single task, do we _really_
    > > need this?

    >
    > We're not tracing Xorg at all. Mmiotrace still cannot catch accesses
    > originating in user space. It is tracing MMIO accesses from within the
    > kernel, and this means that IRQ services and device syscalls may be
    > accessing the hardware at the same time. Vblank interrupts happen
    > quite often, some GPU commands are actually emulated in kernel via
    > interrupts and whatnot. [...]


    ok, understood - i forgot about IRQ generated GPU accesses. In fact UP
    probably generates a more readable trace because DRM accesses from one
    CPU are not mixed up with IRQ completion from another CPU.

    So i think we need to fix your automatic-cpudown/cpuup patch. I tried
    that and it worked very intuitively and the cpus were disabled/enabled
    without any trouble - with ftrace based mmiotrace we now basically have
    something that most distros could enable by default without thinking
    twice about it.

    But if it means an UP kernel has to be used then it will be turned off
    immediately and the barrier to users will be huge again. I really
    envision mmiotrace to be usable by default on _any_ generic distro,
    without rebooting and without any hassle on the user's part.

    the automatic drop-to-single-CPU-when-tracing solution from you is OK -
    it will also test our CPU hotplug primitives some more ;-) And it's not
    like users expect a mmiotraced X session to be particularly fast, right?

    so lets fix those preemptability bugs. They show that the
    cpu-up/cpu-down ops are called from atomic context - it should normally
    be straightforward to sort out - there's no particular reason why the
    ->open()/->close() methods of an ftrace plugin should run in atomic
    context. Steve, any ideas where the atomicity might come from?

    Ingo
    --
    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/

  7. Re: [BUG/PATCH] x86 mmiotrace: dynamically disable non-boot CPUs



    On Wed, 16 Apr 2008, Ingo Molnar wrote:
    >
    > so lets fix those preemptability bugs. They show that the
    > cpu-up/cpu-down ops are called from atomic context - it should normally
    > be straightforward to sort out - there's no particular reason why the
    > ->open()/->close() methods of an ftrace plugin should run in atomic
    > context. Steve, any ideas where the atomicity might come from?
    >


    They shouldn't be called in an atomic section. The only thing I do to
    protect them is call mutex_lock/unlock. Those should allow preemption to
    take place.

    -- Steve

    --
    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/

  8. Re: [BUG/PATCH] x86 mmiotrace: dynamically disable non-boot CPUs

    On Wed, 16 Apr 2008 20:32:58 +0200
    Ingo Molnar wrote:

    >
    > * Pekka Paalanen wrote:
    >
    > > > yeah - it looks complex. Not a showstopper for now :-)
    > > >
    > > > but given that Xorg is usually just a single task, do we _really_
    > > > need this?

    > >
    > > We're not tracing Xorg at all. Mmiotrace still cannot catch accesses
    > > originating in user space. It is tracing MMIO accesses from within the
    > > kernel, and this means that IRQ services and device syscalls may be
    > > accessing the hardware at the same time. Vblank interrupts happen
    > > quite often, some GPU commands are actually emulated in kernel via
    > > interrupts and whatnot. [...]

    >
    > ok, understood - i forgot about IRQ generated GPU accesses. In fact UP
    > probably generates a more readable trace because DRM accesses from one
    > CPU are not mixed up with IRQ completion from another CPU.


    In the future, when things get more stable feature-wise, I will revise
    the mmiotrace log format. One thing to add is cpu number, which will
    then easily separate interleaved operations. Maybe I should also think
    about if someone wants to trace things that are not in PCI bus address
    space. If kmemcheck and mmiotrace could be unified somehow, it would
    be a tool offering uninitialised memory access traps, MMIO tracing and
    basically for watching almost any page and recording accesses to that
    page. In a time far, far away...

    > So i think we need to fix your automatic-cpudown/cpuup patch. I tried
    > that and it worked very intuitively and the cpus were disabled/enabled
    > without any trouble - with ftrace based mmiotrace we now basically have
    > something that most distros could enable by default without thinking
    > twice about it.


    Without any trouble - you didn't hit the bug I did?

    > But if it means an UP kernel has to be used then it will be turned off
    > immediately and the barrier to users will be huge again. I really
    > envision mmiotrace to be usable by default on _any_ generic distro,
    > without rebooting and without any hassle on the user's part.


    UP kernel is not mandatory anyway, we just need only one cpu running,
    which can be realised by maxcpus=1 kernel argument or hot-un-plugging it
    by hand via sysfs.

    > the automatic drop-to-single-CPU-when-tracing solution from you is OK -
    > it will also test our CPU hotplug primitives some more ;-) And it's not
    > like users expect a mmiotraced X session to be particularly fast, right?


    They shouldn't, although in my experience X startup is slow but other
    things after that work with only a minor slowdown. Btw. when I did that
    SMP drop-to-UP tracing test, the resulting log was 63 MB and 'cat' process
    was accounted for 24 seconds of cpu time. I will do comparisons some day,
    but it sounds a lot. I guess optimising ftrace speed is not yet a
    priority :-) (I'm not even sure if it's the framework or mmiotrace.)

    > so lets fix those preemptability bugs. They show that the
    > cpu-up/cpu-down ops are called from atomic context - it should normally
    > be straightforward to sort out - there's no particular reason why the
    > ->open()/->close() methods of an ftrace plugin should run in atomic
    > context. Steve, any ideas where the atomicity might come from?


    Since Steve says it should not be an ftrace issue, I'll dig in it myself.
    Might be a weekend job, again. During the week I don't usually fancy
    doing anything else than relax and write emails ;-)


    Thanks!

    --
    Pekka Paalanen
    http://www.iki.fi/pq/
    --
    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/

  9. Re: [BUG/PATCH] x86 mmiotrace: dynamically disable non-boot CPUs


    * Pekka Paalanen wrote:

    > > So i think we need to fix your automatic-cpudown/cpuup patch. I
    > > tried that and it worked very intuitively and the cpus were
    > > disabled/enabled without any trouble - with ftrace based mmiotrace
    > > we now basically have something that most distros could enable by
    > > default without thinking twice about it.

    >
    > Without any trouble - you didn't hit the bug I did?


    i did get the warning both on enable/disable but it still worked.

    Ingo
    --
    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/

  10. [BUG] kmalloc_node(GFP_KERNEL) while smp_alt spinlocked

    On Mon, 14 Apr 2008 08:57:13 +0200
    Ingo Molnar wrote:

    > Pekka Paalanen wrote:
    > > When I tested this patch on Intel Core 2 Duo, enter_uniprocessor()
    > > triggered the following kernel bug:
    > >
    > > Linux version 2.6.25-rc8-sched-devel.git-x86-latest.git (paalanen@ct200006)
    > > (gcc version 4.1.2 (Gentoo 4.1.2 p1.0.1)) #2 SMP PREEMPT Sun Apr 13
    > > 22:09:03 EEST 2008
    > > ...
    > > in mmio_trace_init
    > > mmiotrace: Disabling non-boot CPUs...
    > > CPU 1 is now offline
    > > lockdep: fixing up alternatives.
    > > SMP alternatives: switching to UP code
    > > BUG: sleeping function called from invalid context at mm/slab.c:3053
    > > in_atomic():1, irqs_disabled():0
    > > 5 locks held by bash/4423:
    > > #0: (trace_types_lock){--..}, at: [] tracing_set_trace_write+0x93/0x11a
    > > #1: (mmiotrace_mutex){--..}, at: [] enable_mmiotrace+0x17/0x142
    > > #2: (cpu_add_remove_lock){--..}, at: [] cpu_maps_update_begin+0x12/0x14
    > > #3: (&cpu_hotplug.lock){--..}, at: [] cpu_hotplug_begin+0x39/0x9f
    > > #4: (smp_alt){--..}, at: [] alternatives_smp_switch+0x66/0x1ab
    > > Pid: 4423, comm: bash Not tainted 2.6.25-rc8-sched-devel.git-x86-latest.git #2
    > >
    > > Call Trace:
    > > [] ? __debug_show_held_locks+0x22/0x24
    > > [] __might_sleep+0xd9/0xdb
    > > [] cache_alloc_debugcheck_before+0x23/0x32
    > > [] __kmalloc+0x34/0xa5
    > > [] ? clear_ti_thread_flag+0x10/0x17
    > > [] kmalloc_node+0x9/0xb
    > > [] __get_vm_area_node+0xa2/0x1cb
    > > [] ? clear_ti_thread_flag+0x10/0x17
    > > [] __get_vm_area+0x13/0x15
    > > [] get_vm_area+0x1d/0x1f
    > > [] vmap+0x2a/0x5c
    > > [] text_poke+0xaa/0x136
    > > [] ? _etext+0x0/0x5
    > > [] alternatives_smp_unlock+0x4f/0x63
    > > [] alternatives_smp_switch+0x16e/0x1ab
    > > [] __cpu_die+0x53/0x7d
    > > [] _cpu_down+0x195/0x26c
    > > [] cpu_down+0x26/0x36
    > > [] enable_mmiotrace+0xa7/0x142
    > > [] mmio_trace_init+0x3c/0x40
    > > [] tracing_set_trace_write+0xf2/0x11a
    > > [] ? security_file_permission+0x11/0x13
    > > [] vfs_write+0xa7/0xe1
    > > [] sys_write+0x47/0x6d
    > > [] system_call_after_swapgs+0x7b/0x80
    > >
    > > mmiotrace: CPU1 is down.
    > > mmiotrace: enabled.
    > >
    > > Is this my fault, or is there a bug somewhere else? The kernel tree is
    > > sched-devel/latest git from 12th April, IIRC.

    >
    > there's no known bug of sched-devel/latest of this kind (or any known
    > bug for that matter).
    >
    > i suspect the bug is that you bring the CPU down from an atomic
    > (spinlocked or irq disabled) context.


    I have been eyeballing the code in current sched-devel/latest and there's
    something I think I found.

    This is the beginning of my enter_uniprocessor() which is called from
    enable_mmiotrace() seen in the backtrace.

    static void enter_uniprocessor(void)
    {
    int cpu;
    int err;

    get_online_cpus();
    downed_cpus = cpu_online_map;
    cpu_clear(first_cpu(cpu_online_map), downed_cpus);
    if (num_online_cpus() > 1)
    pr_notice(NAME "Disabling non-boot CPUs...\n");
    put_online_cpus();

    for_each_cpu_mask(cpu, downed_cpus) {
    err = cpu_down(cpu);

    The function get_online_cpus() calls might_sleep(), so at that
    point everything is fine.

    Following the backtrace, we come to alternatives_smp_switch(),
    which does
    spin_lock(&smp_alt);
    and then continues eventually into this function:

    void *__kprobes text_poke(void *addr, const void *opcode, size_t len)
    {
    unsigned long flags;
    char *vaddr;
    int nr_pages = 2;

    BUG_ON(len > sizeof(long));
    BUG_ON((((long)addr + len - 1) & ~(sizeof(long) - 1))
    - ((long)addr & ~(sizeof(long) - 1)));
    if (kernel_text_address((unsigned long)addr)) {
    struct page *pages[2] = { virt_to_page(addr),
    virt_to_page(addr + PAGE_SIZE) };
    if (!pages[1])
    nr_pages = 1;
    vaddr = vmap(pages, nr_pages, VM_MAP, PAGE_KERNEL);

    After which we find ourselves in

    struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags,
    unsigned long start, unsigned long end)
    {
    return __get_vm_area_node(size, flags, start, end, -1, GFP_KERNEL);

    and in __get_vm_area_node() there is
    area = kmalloc_node(sizeof(*area), gfp_mask & GFP_RECLAIM_MASK, node);

    where gfp_mask is now GFP_KERNEL. As far as I can tell, using SLAB,
    kmalloc_node() here is actually kmalloc(). Anyway, looks like we end up
    in __kmalloc with such flags that it may sleep.

    I have followed the code so that the path up to kmalloc_node() is
    possible, unless there are some "should never happen" conditions
    along the way, which I just cannot know of.

    Is this the bug?


    Thanks.

    --
    Pekka Paalanen
    http://www.iki.fi/pq/
    --
    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/

  11. [PATCH] Fix SMP alternatives : use mutex instead of spinlock, text_poke is sleepable

    * Pekka Paalanen (pq@iki.fi) wrote:
    > On Mon, 14 Apr 2008 08:57:13 +0200
    > Ingo Molnar wrote:
    >
    > > Pekka Paalanen wrote:
    > > > When I tested this patch on Intel Core 2 Duo, enter_uniprocessor()
    > > > triggered the following kernel bug:
    > > >
    > > > Linux version 2.6.25-rc8-sched-devel.git-x86-latest.git (paalanen@ct200006)
    > > > (gcc version 4.1.2 (Gentoo 4.1.2 p1.0.1)) #2 SMP PREEMPT Sun Apr 13
    > > > 22:09:03 EEST 2008
    > > > ...
    > > > in mmio_trace_init
    > > > mmiotrace: Disabling non-boot CPUs...
    > > > CPU 1 is now offline
    > > > lockdep: fixing up alternatives.
    > > > SMP alternatives: switching to UP code
    > > > BUG: sleeping function called from invalid context at mm/slab.c:3053
    > > > in_atomic():1, irqs_disabled():0
    > > > 5 locks held by bash/4423:
    > > > #0: (trace_types_lock){--..}, at: [] tracing_set_trace_write+0x93/0x11a
    > > > #1: (mmiotrace_mutex){--..}, at: [] enable_mmiotrace+0x17/0x142
    > > > #2: (cpu_add_remove_lock){--..}, at: [] cpu_maps_update_begin+0x12/0x14
    > > > #3: (&cpu_hotplug.lock){--..}, at: [] cpu_hotplug_begin+0x39/0x9f
    > > > #4: (smp_alt){--..}, at: [] alternatives_smp_switch+0x66/0x1ab
    > > > Pid: 4423, comm: bash Not tainted 2.6.25-rc8-sched-devel.git-x86-latest.git #2
    > > >
    > > > Call Trace:
    > > > [] ? __debug_show_held_locks+0x22/0x24
    > > > [] __might_sleep+0xd9/0xdb
    > > > [] cache_alloc_debugcheck_before+0x23/0x32
    > > > [] __kmalloc+0x34/0xa5
    > > > [] ? clear_ti_thread_flag+0x10/0x17
    > > > [] kmalloc_node+0x9/0xb
    > > > [] __get_vm_area_node+0xa2/0x1cb
    > > > [] ? clear_ti_thread_flag+0x10/0x17
    > > > [] __get_vm_area+0x13/0x15
    > > > [] get_vm_area+0x1d/0x1f
    > > > [] vmap+0x2a/0x5c
    > > > [] text_poke+0xaa/0x136
    > > > [] ? _etext+0x0/0x5
    > > > [] alternatives_smp_unlock+0x4f/0x63
    > > > [] alternatives_smp_switch+0x16e/0x1ab
    > > > [] __cpu_die+0x53/0x7d
    > > > [] _cpu_down+0x195/0x26c
    > > > [] cpu_down+0x26/0x36
    > > > [] enable_mmiotrace+0xa7/0x142
    > > > [] mmio_trace_init+0x3c/0x40
    > > > [] tracing_set_trace_write+0xf2/0x11a
    > > > [] ? security_file_permission+0x11/0x13
    > > > [] vfs_write+0xa7/0xe1
    > > > [] sys_write+0x47/0x6d
    > > > [] system_call_after_swapgs+0x7b/0x80
    > > >
    > > > mmiotrace: CPU1 is down.
    > > > mmiotrace: enabled.
    > > >
    > > > Is this my fault, or is there a bug somewhere else? The kernel tree is
    > > > sched-devel/latest git from 12th April, IIRC.

    > >
    > > there's no known bug of sched-devel/latest of this kind (or any known
    > > bug for that matter).
    > >
    > > i suspect the bug is that you bring the CPU down from an atomic
    > > (spinlocked or irq disabled) context.

    >
    > I have been eyeballing the code in current sched-devel/latest and there's
    > something I think I found.
    >
    > This is the beginning of my enter_uniprocessor() which is called from
    > enable_mmiotrace() seen in the backtrace.
    >
    > static void enter_uniprocessor(void)
    > {
    > int cpu;
    > int err;
    >
    > get_online_cpus();
    > downed_cpus = cpu_online_map;
    > cpu_clear(first_cpu(cpu_online_map), downed_cpus);
    > if (num_online_cpus() > 1)
    > pr_notice(NAME "Disabling non-boot CPUs...\n");
    > put_online_cpus();
    >
    > for_each_cpu_mask(cpu, downed_cpus) {
    > err = cpu_down(cpu);
    >
    > The function get_online_cpus() calls might_sleep(), so at that
    > point everything is fine.
    >
    > Following the backtrace, we come to alternatives_smp_switch(),
    > which does
    > spin_lock(&smp_alt);
    > and then continues eventually into this function:
    >
    > void *__kprobes text_poke(void *addr, const void *opcode, size_t len)
    > {
    > unsigned long flags;
    > char *vaddr;
    > int nr_pages = 2;
    >
    > BUG_ON(len > sizeof(long));
    > BUG_ON((((long)addr + len - 1) & ~(sizeof(long) - 1))
    > - ((long)addr & ~(sizeof(long) - 1)));
    > if (kernel_text_address((unsigned long)addr)) {
    > struct page *pages[2] = { virt_to_page(addr),
    > virt_to_page(addr + PAGE_SIZE) };
    > if (!pages[1])
    > nr_pages = 1;
    > vaddr = vmap(pages, nr_pages, VM_MAP, PAGE_KERNEL);
    >
    > After which we find ourselves in
    >
    > struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags,
    > unsigned long start, unsigned long end)
    > {
    > return __get_vm_area_node(size, flags, start, end, -1, GFP_KERNEL);
    >
    > and in __get_vm_area_node() there is
    > area = kmalloc_node(sizeof(*area), gfp_mask & GFP_RECLAIM_MASK, node);
    >
    > where gfp_mask is now GFP_KERNEL. As far as I can tell, using SLAB,
    > kmalloc_node() here is actually kmalloc(). Anyway, looks like we end up
    > in __kmalloc with such flags that it may sleep.
    >
    > I have followed the code so that the path up to kmalloc_node() is
    > possible, unless there are some "should never happen" conditions
    > along the way, which I just cannot know of.
    >
    > Is this the bug?
    >


    Yep. I think using a mutex should fix it. There is no reason to use a
    spinlock rather than a mutex here.

    Signed-off-by: Mathieu Desnoyers
    CC: Pekka Paalanen
    CC: Ingo Molnar
    CC: Steven Rostedt
    ---
    arch/x86/kernel/alternative.c | 18 +++++++++---------
    1 file changed, 9 insertions(+), 9 deletions(-)

    Index: linux-2.6-lttng/arch/x86/kernel/alternative.c
    ================================================== =================
    --- linux-2.6-lttng.orig/arch/x86/kernel/alternative.c 2008-04-19 12:01:08.000000000 -0400
    +++ linux-2.6-lttng/arch/x86/kernel/alternative.c 2008-04-19 12:03:14.000000000 -0400
    @@ -1,6 +1,6 @@
    #include
    #include
    -#include
    +#include
    #include
    #include
    #include
    @@ -279,7 +279,7 @@ struct smp_alt_module {
    struct list_head next;
    };
    static LIST_HEAD(smp_alt_modules);
    -static DEFINE_SPINLOCK(smp_alt);
    +static DEFINE_MUTEX(smp_alt);
    static int smp_mode = 1; /* protected by smp_alt */

    void alternatives_smp_module_add(struct module *mod, char *name,
    @@ -312,12 +312,12 @@ void alternatives_smp_module_add(struct
    __FUNCTION__, smp->locks, smp->locks_end,
    smp->text, smp->text_end, smp->name);

    - spin_lock(&smp_alt);
    + mutex_lock(&smp_alt);
    list_add_tail(&smp->next, &smp_alt_modules);
    if (boot_cpu_has(X86_FEATURE_UP))
    alternatives_smp_unlock(smp->locks, smp->locks_end,
    smp->text, smp->text_end);
    - spin_unlock(&smp_alt);
    + mutex_unlock(&smp_alt);
    }

    void alternatives_smp_module_del(struct module *mod)
    @@ -327,17 +327,17 @@ void alternatives_smp_module_del(struct
    if (smp_alt_once || noreplace_smp)
    return;

    - spin_lock(&smp_alt);
    + mutex_lock(&smp_alt);
    list_for_each_entry(item, &smp_alt_modules, next) {
    if (mod != item->mod)
    continue;
    list_del(&item->next);
    - spin_unlock(&smp_alt);
    + mutex_unlock(&smp_alt);
    DPRINTK("%s: %s\n", __FUNCTION__, item->name);
    kfree(item);
    return;
    }
    - spin_unlock(&smp_alt);
    + mutex_unlock(&smp_alt);
    }

    void alternatives_smp_switch(int smp)
    @@ -359,7 +359,7 @@ void alternatives_smp_switch(int smp)
    return;
    BUG_ON(!smp && (num_online_cpus() > 1));

    - spin_lock(&smp_alt);
    + mutex_lock(&smp_alt);

    /*
    * Avoid unnecessary switches because it forces JIT based VMs to
    @@ -383,7 +383,7 @@ void alternatives_smp_switch(int smp)
    mod->text, mod->text_end);
    }
    smp_mode = smp;
    - spin_unlock(&smp_alt);
    + mutex_unlock(&smp_alt);
    }

    #endif
    --
    Mathieu Desnoyers
    Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
    OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
    --
    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/

  12. Re: [PATCH] Fix SMP alternatives : use mutex instead of spinlock, text_poke is sleepable

    From 58390e93507669d860ef2d178b60ad447d5260c4 Mon Sep 17 00:00:00 2001
    From: Pekka Paalanen
    Date: Sat, 19 Apr 2008 23:22:11 +0300
    Subject: [PATCH] x86: Fix SMP alternatives: use mutex instead of spinlock.

    text_poke is sleepable.
    The original fix by Mathieu Desnoyers .

    Signed-off-by: Pekka Paalanen
    ---

    Mathieu,

    thank you for the quick reply. Your patch did not apply on sched-devel/latest
    so I made the changes by hand, resulting patch here. The change was in the
    context lines, which made `patch' fail, e.g. __FUNCTION__ -> __func__.
    Now my enter_uniprocessor(), that disables all but the first cpu, works fine.

    My next quest is, why attempting to re-enable the cpus makes the whole
    machine reboot after a short hang.

    arch/x86/kernel/alternative.c | 18 +++++++++---------
    1 files changed, 9 insertions(+), 9 deletions(-)

    diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
    index 5412fd7..7ce0939 100644
    --- a/arch/x86/kernel/alternative.c
    +++ b/arch/x86/kernel/alternative.c
    @@ -1,6 +1,6 @@
    #include
    #include
    -#include
    +#include
    #include
    #include
    #include
    @@ -279,7 +279,7 @@ struct smp_alt_module {
    struct list_head next;
    };
    static LIST_HEAD(smp_alt_modules);
    -static DEFINE_SPINLOCK(smp_alt);
    +static DEFINE_MUTEX(smp_alt);
    static int smp_mode = 1; /* protected by smp_alt */

    void alternatives_smp_module_add(struct module *mod, char *name,
    @@ -312,12 +312,12 @@ void alternatives_smp_module_add(struct module *mod, char *name,
    __func__, smp->locks, smp->locks_end,
    smp->text, smp->text_end, smp->name);

    - spin_lock(&smp_alt);
    + mutex_lock(&smp_alt);
    list_add_tail(&smp->next, &smp_alt_modules);
    if (boot_cpu_has(X86_FEATURE_UP))
    alternatives_smp_unlock(smp->locks, smp->locks_end,
    smp->text, smp->text_end);
    - spin_unlock(&smp_alt);
    + mutex_unlock(&smp_alt);
    }

    void alternatives_smp_module_del(struct module *mod)
    @@ -327,17 +327,17 @@ void alternatives_smp_module_del(struct module *mod)
    if (smp_alt_once || noreplace_smp)
    return;

    - spin_lock(&smp_alt);
    + mutex_lock(&smp_alt);
    list_for_each_entry(item, &smp_alt_modules, next) {
    if (mod != item->mod)
    continue;
    list_del(&item->next);
    - spin_unlock(&smp_alt);
    + mutex_unlock(&smp_alt);
    DPRINTK("%s: %s\n", __func__, item->name);
    kfree(item);
    return;
    }
    - spin_unlock(&smp_alt);
    + mutex_unlock(&smp_alt);
    }

    void alternatives_smp_switch(int smp)
    @@ -359,7 +359,7 @@ void alternatives_smp_switch(int smp)
    return;
    BUG_ON(!smp && (num_online_cpus() > 1));

    - spin_lock(&smp_alt);
    + mutex_lock(&smp_alt);

    /*
    * Avoid unnecessary switches because it forces JIT based VMs to
    @@ -383,7 +383,7 @@ void alternatives_smp_switch(int smp)
    mod->text, mod->text_end);
    }
    smp_mode = smp;
    - spin_unlock(&smp_alt);
    + mutex_unlock(&smp_alt);
    }

    #endif
    --
    1.5.3.7

    --
    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/

  13. [PATCH] Check for breakpoint in text_poke to eliminate bug_on

    * Pekka Paalanen (pq@iki.fi) wrote:
    > On Sun, 20 Apr 2008 00:06:57 +0300
    > Pekka Paalanen wrote:
    >
    > > Mathieu,
    > >
    > > thank you for the quick reply. Your patch did not apply on sched-devel/latest
    > > so I made the changes by hand, resulting patch here. The change was in the
    > > context lines, which made `patch' fail, e.g. __FUNCTION__ -> __func__.
    > > Now my enter_uniprocessor(), that disables all but the first cpu, works fine.
    > >
    > > My next quest is, why attempting to re-enable the cpus makes the whole
    > > machine reboot after a short hang.

    >
    > Uhh, I don't have the faintest idea why this happens or how to debug it.
    >
    > A simple
    > echo 0 > /sys/devices/system/cpu/cpu1/online
    > echo 1 > /sys/devices/system/cpu/cpu1/online
    >
    > produces the following kernel log (netconsole) and then after a couple
    > second hang the machine reboots:
    >
    > [ 84.678357] console [netcon0] enabled
    > [ 84.679568] netconsole: network logging started
    > [ 232.812335] CPU 1 is now offline
    > [ 232.812678] lockdep: fixing up alternatives.
    > [ 232.813051] SMP alternatives: switching to UP code
    > [ 268.447582] lockdep: fixing up alternatives.
    > [ 268.447903] SMP alternatives: switching to SMP code
    > [ 268.459462] Booting processor 1/1 ip 6000
    >
    > My kernel is sched-devel/latest git tree with Desnoyers' patch, and my
    > patches that touch only arch/x86/mm/mmio-mod.c.
    > The machine is Thinkpad T61 with:
    >
    > processor : 0
    > vendor_id : GenuineIntel
    > cpu family : 6
    > model : 15
    > model name : Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
    > stepping : 10
    > cpu MHz : 2001.000
    > cache size : 4096 KB
    > physical id : 0
    > siblings : 2
    > core id : 0
    > cpu cores : 2
    > apicid : 0
    > initial apicid : 0
    > fpu : yes
    > fpu_exception : yes
    > cpuid level : 10
    > wp : yes
    > flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
    > cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
    > lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est
    > tm2 ssse3 cx16 xtpr lahf_lm ida
    > bogomips : 3997.03
    > clflush size : 64
    > cache_alignment : 64
    > address sizes : 36 bits physical, 48 bits virtual
    > power management:
    >
    > processor : 1
    > vendor_id : GenuineIntel
    > cpu family : 6
    > model : 15
    > model name : Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
    > stepping : 10
    > cpu MHz : 2001.000
    > cache size : 4096 KB
    > physical id : 0
    > siblings : 2
    > core id : 1
    > cpu cores : 2
    > apicid : 1
    > initial apicid : 1
    > fpu : yes
    > fpu_exception : yes
    > cpuid level : 10
    > wp : yes
    > flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
    > cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
    > lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est
    > tm2 ssse3 cx16 xtpr lahf_lm ida
    > bogomips : 3991.26
    > clflush size : 64
    > cache_alignment : 64
    > address sizes : 36 bits physical, 48 bits virtual
    > power management:
    >
    > Any help would be appreciated.
    >
    >
    > Thanks.


    This patch should bring more consistency checks to text_poke, can you
    give it a try ?

    Hm, actually, I think it contains the fix you are looking for.

    kernel_text_address -> core_kernel_text will probably make everything go
    smoothly.

    Mathieu


    Check for breakpoint in text_poke to eliminate bug_on

    It's ok to modify an instruction non-atomically (multiple memory accesses to a
    large and/or non aligned instruction) *if and only if* we have inserted a
    breakpoint at the beginning of the instruction.

    Also change kernel_text_address (bogus) check to core_kernel_text.

    Signed-off-by: Mathieu Desnoyers
    ---
    arch/x86/kernel/alternative.c | 49 ++++++++++++++++++++++++------------------
    1 file changed, 29 insertions(+), 20 deletions(-)

    Index: linux-2.6-sched-devel/arch/x86/kernel/alternative.c
    ================================================== =================
    --- linux-2.6-sched-devel.orig/arch/x86/kernel/alternative.c 2008-04-16 17:17:59.000000000 -0400
    +++ linux-2.6-sched-devel/arch/x86/kernel/alternative.c 2008-04-16 17:19:53.000000000 -0400
    @@ -15,6 +15,7 @@
    #include

    #define MAX_PATCH_LEN (255-1)
    +#define BREAKPOINT_INSTRUCTION 0xcc

    #ifdef CONFIG_HOTPLUG_CPU
    static int smp_alt_once;
    @@ -505,37 +506,45 @@ void *text_poke_early(void *addr, const
    * It means the size must be writable atomically and the address must be aligned
    * in a way that permits an atomic write. It also makes sure we fit on a single
    * page.
    + *
    + * It's ok to modify an instruction non-atomically (multiple memory accesses to
    + * a large and/or non aligned instruction) *if and only if* we have inserted a
    + * breakpoint at the beginning of the instruction and we are modifying the rest
    + * of the instruction.
    */
    void *__kprobes text_poke(void *addr, const void *opcode, size_t len)
    {
    unsigned long flags;
    char *vaddr;
    int nr_pages = 2;
    + struct page *pages[2];
    + int i;

    - BUG_ON(len > sizeof(long));
    - BUG_ON((((long)addr + len - 1) & ~(sizeof(long) - 1))
    - - ((long)addr & ~(sizeof(long) - 1)));
    - if (kernel_text_address((unsigned long)addr)) {
    - struct page *pages[2] = { virt_to_page(addr),
    - virt_to_page(addr + PAGE_SIZE) };
    - if (!pages[1])
    - nr_pages = 1;
    - vaddr = vmap(pages, nr_pages, VM_MAP, PAGE_KERNEL);
    - BUG_ON(!vaddr);
    - local_irq_save(flags);
    - memcpy(&vaddr[(unsigned long)addr & ~PAGE_MASK], opcode, len);
    - local_irq_restore(flags);
    - vunmap(vaddr);
    + if (*((uint8_t *)addr - 1) != BREAKPOINT_INSTRUCTION) {
    + BUG_ON(len > sizeof(long));
    + BUG_ON((((long)addr + len - 1) & ~(sizeof(long) - 1))
    + - ((long)addr & ~(sizeof(long) - 1)));
    + }
    + if (!core_kernel_text((unsigned long)addr)) {
    + pages[0] = vmalloc_to_page(addr);
    + pages[1] = vmalloc_to_page(addr + PAGE_SIZE);
    } else {
    - /*
    - * modules are in vmalloc'ed memory, always writable.
    - */
    - local_irq_save(flags);
    - memcpy(addr, opcode, len);
    - local_irq_restore(flags);
    + pages[0] = virt_to_page(addr);
    + pages[1] = virt_to_page(addr + PAGE_SIZE);
    }
    + BUG_ON(!pages[0]);
    + if (!pages[1])
    + nr_pages = 1;
    + vaddr = vmap(pages, nr_pages, VM_MAP, PAGE_KERNEL);
    + BUG_ON(!vaddr);
    + local_irq_save(flags);
    + memcpy(&vaddr[(unsigned long)addr & ~PAGE_MASK], opcode, len);
    + local_irq_restore(flags);
    + vunmap(vaddr);
    sync_core();
    /* Could also do a CLFLUSH here to speed up CPU recovery; but
    that causes hangs on some VIA CPUs. */
    + for (i = 0; i < len; i++)
    + BUG_ON(((char *)addr)[i] != ((char *)opcode)[i]);
    return addr;
    }

    --
    Mathieu Desnoyers
    Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
    OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
    --
    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/

  14. [BUG] CPU hotplug reboots machine (Re: [PATCH] Fix SMP alternatives : use mutex instead of spinlock, text_poke is sleepable)

    On Sun, 20 Apr 2008 00:06:57 +0300
    Pekka Paalanen wrote:

    > Mathieu,
    >
    > thank you for the quick reply. Your patch did not apply on sched-devel/latest
    > so I made the changes by hand, resulting patch here. The change was in the
    > context lines, which made `patch' fail, e.g. __FUNCTION__ -> __func__.
    > Now my enter_uniprocessor(), that disables all but the first cpu, works fine.
    >
    > My next quest is, why attempting to re-enable the cpus makes the whole
    > machine reboot after a short hang.


    Uhh, I don't have the faintest idea why this happens or how to debug it.

    A simple
    echo 0 > /sys/devices/system/cpu/cpu1/online
    echo 1 > /sys/devices/system/cpu/cpu1/online

    produces the following kernel log (netconsole) and then after a couple
    second hang the machine reboots:

    [ 84.678357] console [netcon0] enabled
    [ 84.679568] netconsole: network logging started
    [ 232.812335] CPU 1 is now offline
    [ 232.812678] lockdep: fixing up alternatives.
    [ 232.813051] SMP alternatives: switching to UP code
    [ 268.447582] lockdep: fixing up alternatives.
    [ 268.447903] SMP alternatives: switching to SMP code
    [ 268.459462] Booting processor 1/1 ip 6000

    My kernel is sched-devel/latest git tree with Desnoyers' patch, and my
    patches that touch only arch/x86/mm/mmio-mod.c.
    The machine is Thinkpad T61 with:

    processor : 0
    vendor_id : GenuineIntel
    cpu family : 6
    model : 15
    model name : Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
    stepping : 10
    cpu MHz : 2001.000
    cache size : 4096 KB
    physical id : 0
    siblings : 2
    core id : 0
    cpu cores : 2
    apicid : 0
    initial apicid : 0
    fpu : yes
    fpu_exception : yes
    cpuid level : 10
    wp : yes
    flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
    cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
    lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est
    tm2 ssse3 cx16 xtpr lahf_lm ida
    bogomips : 3997.03
    clflush size : 64
    cache_alignment : 64
    address sizes : 36 bits physical, 48 bits virtual
    power management:

    processor : 1
    vendor_id : GenuineIntel
    cpu family : 6
    model : 15
    model name : Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
    stepping : 10
    cpu MHz : 2001.000
    cache size : 4096 KB
    physical id : 0
    siblings : 2
    core id : 1
    cpu cores : 2
    apicid : 1
    initial apicid : 1
    fpu : yes
    fpu_exception : yes
    cpuid level : 10
    wp : yes
    flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
    cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
    lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est
    tm2 ssse3 cx16 xtpr lahf_lm ida
    bogomips : 3991.26
    clflush size : 64
    cache_alignment : 64
    address sizes : 36 bits physical, 48 bits virtual
    power management:

    Any help would be appreciated.


    Thanks.

    --
    Pekka Paalanen
    http://www.iki.fi/pq/
    --
    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/

  15. Re: [PATCH] Check for breakpoint in text_poke to eliminate bug_on

    On Sat, 19 Apr 2008 17:58:26 -0400
    Mathieu Desnoyers wrote:

    > * Pekka Paalanen (pq@iki.fi) wrote:
    > >
    > > A simple
    > > echo 0 > /sys/devices/system/cpu/cpu1/online
    > > echo 1 > /sys/devices/system/cpu/cpu1/online
    > >
    > > produces the following kernel log (netconsole) and then after a couple
    > > second hang the machine reboots:
    > >
    > > [ 84.678357] console [netcon0] enabled
    > > [ 84.679568] netconsole: network logging started
    > > [ 232.812335] CPU 1 is now offline
    > > [ 232.812678] lockdep: fixing up alternatives.
    > > [ 232.813051] SMP alternatives: switching to UP code
    > > [ 268.447582] lockdep: fixing up alternatives.
    > > [ 268.447903] SMP alternatives: switching to SMP code
    > > [ 268.459462] Booting processor 1/1 ip 6000
    > >
    > > My kernel is sched-devel/latest git tree with Desnoyers' patch, and my
    > > patches that touch only arch/x86/mm/mmio-mod.c.
    > > The machine is Thinkpad T61 with:
    > >
    > > processor : 0
    > > vendor_id : GenuineIntel
    > > cpu family : 6
    > > model : 15
    > > model name : Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
    > > stepping : 10
    > > cpu MHz : 2001.000
    > > cache size : 4096 KB
    > > physical id : 0
    > > siblings : 2
    > > core id : 0
    > > cpu cores : 2
    > > apicid : 0
    > > initial apicid : 0
    > > fpu : yes
    > > fpu_exception : yes
    > > cpuid level : 10
    > > wp : yes
    > > flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
    > > cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
    > > lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est
    > > tm2 ssse3 cx16 xtpr lahf_lm ida
    > > bogomips : 3997.03
    > > clflush size : 64
    > > cache_alignment : 64
    > > address sizes : 36 bits physical, 48 bits virtual
    > > power management:
    > >
    > > processor : 1
    > > vendor_id : GenuineIntel
    > > cpu family : 6
    > > model : 15
    > > model name : Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
    > > stepping : 10
    > > cpu MHz : 2001.000
    > > cache size : 4096 KB
    > > physical id : 0
    > > siblings : 2
    > > core id : 1
    > > cpu cores : 2
    > > apicid : 1
    > > initial apicid : 1
    > > fpu : yes
    > > fpu_exception : yes
    > > cpuid level : 10
    > > wp : yes
    > > flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
    > > cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
    > > lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est
    > > tm2 ssse3 cx16 xtpr lahf_lm ida
    > > bogomips : 3991.26
    > > clflush size : 64
    > > cache_alignment : 64
    > > address sizes : 36 bits physical, 48 bits virtual
    > > power management:
    > >
    > > Any help would be appreciated.
    > >
    > >
    > > Thanks.

    >
    > This patch should bring more consistency checks to text_poke, can you
    > give it a try ?
    >
    > Hm, actually, I think it contains the fix you are looking for.
    >
    > kernel_text_address -> core_kernel_text will probably make everything go
    > smoothly.
    >
    > Mathieu
    >
    >
    > Check for breakpoint in text_poke to eliminate bug_on
    >
    > It's ok to modify an instruction non-atomically (multiple memory accesses to a
    > large and/or non aligned instruction) *if and only if* we have inserted a
    > breakpoint at the beginning of the instruction.
    >
    > Also change kernel_text_address (bogus) check to core_kernel_text.
    >
    > Signed-off-by: Mathieu Desnoyers
    > ---
    > arch/x86/kernel/alternative.c | 49 ++++++++++++++++++++++++------------------
    > 1 file changed, 29 insertions(+), 20 deletions(-)


    Sorry, no change.

    [ 93.315242] netconsole: network logging started
    [ 95.797496] eth0: no IPv6 routers present
    [ 127.472213] CPU 1 is now offline
    [ 127.472547] lockdep: fixing up alternatives.
    [ 127.472923] SMP alternatives: switching to UP code
    [ 134.709384] lockdep: fixing up alternatives.
    [ 134.709701] SMP alternatives: switching to SMP code
    [ 134.721344] Booting processor 1/1 ip 6000

    few seconds pause and it reboots. A working patch in six minutes would
    have been quite awesome :-)


    Thanks.

    --
    Pekka Paalanen
    http://www.iki.fi/pq/
    --
    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/

  16. Re: [PATCH] Check for breakpoint in text_poke to eliminate bug_on

    * Pekka Paalanen (pq@iki.fi) wrote:
    > On Sat, 19 Apr 2008 17:58:26 -0400
    > Mathieu Desnoyers wrote:
    >
    > > * Pekka Paalanen (pq@iki.fi) wrote:
    > > >
    > > > A simple
    > > > echo 0 > /sys/devices/system/cpu/cpu1/online
    > > > echo 1 > /sys/devices/system/cpu/cpu1/online
    > > >
    > > > produces the following kernel log (netconsole) and then after a couple
    > > > second hang the machine reboots:
    > > >
    > > > [ 84.678357] console [netcon0] enabled
    > > > [ 84.679568] netconsole: network logging started
    > > > [ 232.812335] CPU 1 is now offline
    > > > [ 232.812678] lockdep: fixing up alternatives.
    > > > [ 232.813051] SMP alternatives: switching to UP code
    > > > [ 268.447582] lockdep: fixing up alternatives.
    > > > [ 268.447903] SMP alternatives: switching to SMP code
    > > > [ 268.459462] Booting processor 1/1 ip 6000
    > > >
    > > > My kernel is sched-devel/latest git tree with Desnoyers' patch, and my
    > > > patches that touch only arch/x86/mm/mmio-mod.c.
    > > > The machine is Thinkpad T61 with:
    > > >
    > > > processor : 0
    > > > vendor_id : GenuineIntel
    > > > cpu family : 6
    > > > model : 15
    > > > model name : Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
    > > > stepping : 10
    > > > cpu MHz : 2001.000
    > > > cache size : 4096 KB
    > > > physical id : 0
    > > > siblings : 2
    > > > core id : 0
    > > > cpu cores : 2
    > > > apicid : 0
    > > > initial apicid : 0
    > > > fpu : yes
    > > > fpu_exception : yes
    > > > cpuid level : 10
    > > > wp : yes
    > > > flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
    > > > cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
    > > > lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est
    > > > tm2 ssse3 cx16 xtpr lahf_lm ida
    > > > bogomips : 3997.03
    > > > clflush size : 64
    > > > cache_alignment : 64
    > > > address sizes : 36 bits physical, 48 bits virtual
    > > > power management:
    > > >
    > > > processor : 1
    > > > vendor_id : GenuineIntel
    > > > cpu family : 6
    > > > model : 15
    > > > model name : Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
    > > > stepping : 10
    > > > cpu MHz : 2001.000
    > > > cache size : 4096 KB
    > > > physical id : 0
    > > > siblings : 2
    > > > core id : 1
    > > > cpu cores : 2
    > > > apicid : 1
    > > > initial apicid : 1
    > > > fpu : yes
    > > > fpu_exception : yes
    > > > cpuid level : 10
    > > > wp : yes
    > > > flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
    > > > cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
    > > > lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est
    > > > tm2 ssse3 cx16 xtpr lahf_lm ida
    > > > bogomips : 3991.26
    > > > clflush size : 64
    > > > cache_alignment : 64
    > > > address sizes : 36 bits physical, 48 bits virtual
    > > > power management:
    > > >
    > > > Any help would be appreciated.
    > > >
    > > >
    > > > Thanks.

    > >
    > > This patch should bring more consistency checks to text_poke, can you
    > > give it a try ?
    > >
    > > Hm, actually, I think it contains the fix you are looking for.
    > >
    > > kernel_text_address -> core_kernel_text will probably make everything go
    > > smoothly.
    > >
    > > Mathieu
    > >
    > >
    > > Check for breakpoint in text_poke to eliminate bug_on
    > >
    > > It's ok to modify an instruction non-atomically (multiple memory accesses to a
    > > large and/or non aligned instruction) *if and only if* we have inserted a
    > > breakpoint at the beginning of the instruction.
    > >
    > > Also change kernel_text_address (bogus) check to core_kernel_text.
    > >
    > > Signed-off-by: Mathieu Desnoyers
    > > ---
    > > arch/x86/kernel/alternative.c | 49 ++++++++++++++++++++++++------------------
    > > 1 file changed, 29 insertions(+), 20 deletions(-)

    >
    > Sorry, no change.
    >
    > [ 93.315242] netconsole: network logging started
    > [ 95.797496] eth0: no IPv6 routers present
    > [ 127.472213] CPU 1 is now offline
    > [ 127.472547] lockdep: fixing up alternatives.
    > [ 127.472923] SMP alternatives: switching to UP code
    > [ 134.709384] lockdep: fixing up alternatives.
    > [ 134.709701] SMP alternatives: switching to SMP code
    > [ 134.721344] Booting processor 1/1 ip 6000
    >
    > few seconds pause and it reboots. A working patch in six minutes would
    > have been quite awesome :-)
    >


    Hrm, I'll have to do some more tests.

    Can you mail you .config please ?

    Mathieu

    >
    > Thanks.
    >
    > --
    > Pekka Paalanen
    > http://www.iki.fi/pq/


    --
    Mathieu Desnoyers
    Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
    OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
    --
    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/

  17. Re: [PATCH] Check for breakpoint in text_poke to eliminate bug_on

    On Sat, 19 Apr 2008 20:05:09 -0400
    Mathieu Desnoyers wrote:

    > * Pekka Paalanen (pq@iki.fi) wrote:
    > > On Sat, 19 Apr 2008 17:58:26 -0400
    > > Mathieu Desnoyers wrote:
    > >
    > > > * Pekka Paalanen (pq@iki.fi) wrote:
    > > > >
    > > > > A simple
    > > > > echo 0 > /sys/devices/system/cpu/cpu1/online
    > > > > echo 1 > /sys/devices/system/cpu/cpu1/online
    > > > >
    > > > > produces the following kernel log (netconsole) and then after a couple
    > > > > second hang the machine reboots:
    > > > >
    > > > > [ 84.678357] console [netcon0] enabled
    > > > > [ 84.679568] netconsole: network logging started
    > > > > [ 232.812335] CPU 1 is now offline
    > > > > [ 232.812678] lockdep: fixing up alternatives.
    > > > > [ 232.813051] SMP alternatives: switching to UP code
    > > > > [ 268.447582] lockdep: fixing up alternatives.
    > > > > [ 268.447903] SMP alternatives: switching to SMP code
    > > > > [ 268.459462] Booting processor 1/1 ip 6000
    > > > >
    > > > > My kernel is sched-devel/latest git tree with Desnoyers' patch, and my
    > > > > patches that touch only arch/x86/mm/mmio-mod.c.
    > > > > The machine is Thinkpad T61 with:
    > > > >
    > > > > model name : Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
    > > >
    > > > This patch should bring more consistency checks to text_poke, can you
    > > > give it a try ?
    > > >
    > > > Hm, actually, I think it contains the fix you are looking for.
    > > >
    > > > kernel_text_address -> core_kernel_text will probably make everything go
    > > > smoothly.

    > >
    > > Sorry, no change.

    >
    > Hrm, I'll have to do some more tests.
    >
    > Can you mail you .config please ?


    Certainly, thank you for looking into this.


    #
    # Automatically generated make config: don't edit
    # Linux kernel version: 2.6.25
    # Sat Apr 19 16:09:58 2008
    #
    CONFIG_64BIT=y
    # CONFIG_X86_32 is not set
    CONFIG_X86_64=y
    CONFIG_X86=y
    # CONFIG_GENERIC_LOCKBREAK is not set
    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_BUG=y
    CONFIG_GENERIC_FIND_FIRST_BIT=y
    CONFIG_GENERIC_FIND_NEXT_BIT=y
    CONFIG_GENERIC_HWEIGHT=y
    # CONFIG_GENERIC_GPIO is not set
    CONFIG_ARCH_MAY_HAVE_PC_FDC=y
    CONFIG_DMI=y
    CONFIG_RWSEM_GENERIC_SPINLOCK=y
    # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
    # CONFIG_ARCH_HAS_ILOG2_U32 is not set
    # CONFIG_ARCH_HAS_ILOG2_U64 is not set
    CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
    CONFIG_GENERIC_CALIBRATE_DELAY=y
    CONFIG_GENERIC_TIME_VSYSCALL=y
    CONFIG_ARCH_HAS_CPU_RELAX=y
    CONFIG_HAVE_SETUP_PER_CPU_AREA=y
    CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y
    CONFIG_ARCH_HIBERNATION_POSSIBLE=y
    CONFIG_ARCH_SUSPEND_POSSIBLE=y
    CONFIG_ZONE_DMA32=y
    CONFIG_ARCH_POPULATES_NODE_MAP=y
    CONFIG_AUDIT_ARCH=y
    CONFIG_ARCH_SUPPORTS_AOUT=y
    CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
    CONFIG_GENERIC_HARDIRQS=y
    CONFIG_GENERIC_IRQ_PROBE=y
    CONFIG_GENERIC_PENDING_IRQ=y
    CONFIG_X86_SMP=y
    CONFIG_X86_64_SMP=y
    CONFIG_X86_HT=y
    CONFIG_X86_TRAMPOLINE=y
    # CONFIG_KTIME_SCALAR is not set
    CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"

    #
    # General setup
    #
    CONFIG_EXPERIMENTAL=y
    CONFIG_LOCK_KERNEL=y
    CONFIG_INIT_ENV_ARG_LIMIT=32
    CONFIG_LOCALVERSION=""
    # CONFIG_LOCALVERSION_AUTO is not set
    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 is not set
    CONFIG_IKCONFIG=y
    CONFIG_IKCONFIG_PROC=y
    CONFIG_LOG_BUF_SHIFT=18
    # CONFIG_CGROUPS is not set
    # CONFIG_GROUP_SCHED is not set
    CONFIG_SYSFS_DEPRECATED=y
    CONFIG_SYSFS_DEPRECATED_V2=y
    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 is not set
    # CONFIG_BLK_DEV_INITRD is not set
    CONFIG_CC_OPTIMIZE_FOR_SIZE=y
    CONFIG_SYSCTL=y
    # CONFIG_EMBEDDED is not set
    CONFIG_UID16=y
    CONFIG_SYSCTL_SYSCALL=y
    CONFIG_KALLSYMS=y
    CONFIG_KALLSYMS_ALL=y
    # CONFIG_KALLSYMS_EXTRA_PASS is not set
    CONFIG_HOTPLUG=y
    CONFIG_PRINTK=y
    CONFIG_BUG=y
    CONFIG_ELF_CORE=y
    CONFIG_COMPAT_BRK=y
    CONFIG_BASE_FULL=y
    CONFIG_FUTEX=y
    CONFIG_ANON_INODES=y
    CONFIG_EPOLL=y
    CONFIG_SIGNALFD=y
    CONFIG_TIMERFD=y
    CONFIG_EVENTFD=y
    CONFIG_SHMEM=y
    CONFIG_VM_EVENT_COUNTERS=y
    CONFIG_SLAB=y
    # CONFIG_SLUB is not set
    # CONFIG_SLOB is not set
    CONFIG_PROFILING=y
    # CONFIG_MARKERS is not set
    CONFIG_OPROFILE=m
    CONFIG_HAVE_OPROFILE=y
    # CONFIG_KPROBES is not set
    CONFIG_HAVE_KPROBES=y
    CONFIG_HAVE_KRETPROBES=y
    CONFIG_PROC_PAGE_MONITOR=y
    CONFIG_SLABINFO=y
    CONFIG_RT_MUTEXES=y
    # CONFIG_TINY_SHMEM is not set
    CONFIG_BASE_SMALL=0
    CONFIG_MODULES=y
    CONFIG_MODULE_UNLOAD=y
    # CONFIG_MODULE_FORCE_UNLOAD is not set
    # CONFIG_MODVERSIONS is not set
    # CONFIG_MODULE_SRCVERSION_ALL is not set
    CONFIG_KMOD=y
    CONFIG_STOP_MACHINE=y
    CONFIG_BLOCK=y
    # CONFIG_BLK_DEV_IO_TRACE is not set
    # CONFIG_BLK_DEV_BSG is not set
    CONFIG_BLOCK_COMPAT=y

    #
    # IO Schedulers
    #
    CONFIG_IOSCHED_NOOP=y
    CONFIG_IOSCHED_AS=y
    CONFIG_IOSCHED_DEADLINE=y
    CONFIG_IOSCHED_CFQ=y
    # CONFIG_DEFAULT_AS is not set
    # CONFIG_DEFAULT_DEADLINE is not set
    CONFIG_DEFAULT_CFQ=y
    # CONFIG_DEFAULT_NOOP is not set
    CONFIG_DEFAULT_IOSCHED="cfq"
    CONFIG_CLASSIC_RCU=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=y
    CONFIG_X86_PC=y
    # CONFIG_X86_ELAN is not set
    # CONFIG_X86_VOYAGER is not set
    # CONFIG_X86_NUMAQ is not set
    # CONFIG_X86_SUMMIT is not set
    # CONFIG_X86_BIGSMP is not set
    # CONFIG_X86_VISWS is not set
    # CONFIG_X86_GENERICARCH is not set
    # CONFIG_X86_ES7000 is not set
    # CONFIG_X86_RDC321X is not set
    # CONFIG_X86_VSMP is not set
    # CONFIG_PARAVIRT_GUEST is not set
    CONFIG_MEMTEST_BOOTPARAM=y
    CONFIG_MEMTEST_BOOTPARAM_VALUE=0
    # 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 is not set
    # 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_MWINCHIP2 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=y
    # CONFIG_GENERIC_CPU is not set
    CONFIG_X86_L1_CACHE_BYTES=64
    CONFIG_X86_INTERNODE_CACHE_BYTES=64
    CONFIG_X86_CMPXCHG=y
    CONFIG_X86_L1_CACHE_SHIFT=6
    CONFIG_X86_GOOD_APIC=y
    CONFIG_X86_INTEL_USERCOPY=y
    CONFIG_X86_USE_PPRO_CHECKSUM=y
    CONFIG_X86_P6_NOP=y
    CONFIG_X86_TSC=y
    CONFIG_X86_CMOV=y
    CONFIG_X86_MINIMUM_CPU_FAMILY=64
    CONFIG_X86_DEBUGCTLMSR=y
    CONFIG_X86_DS=y
    CONFIG_X86_PTRACE_BTS=y
    CONFIG_HPET_TIMER=y
    CONFIG_HPET_EMULATE_RTC=y
    CONFIG_GART_IOMMU=y
    # CONFIG_CALGARY_IOMMU is not set
    CONFIG_IOMMU_HELPER=y
    CONFIG_SWIOTLB=y
    # CONFIG_MAXSMP is not set
    CONFIG_NR_CPUS=8
    # CONFIG_SCHED_SMT is not set
    CONFIG_SCHED_MC=y
    # CONFIG_PREEMPT_NONE is not set
    # CONFIG_PREEMPT_VOLUNTARY is not set
    CONFIG_PREEMPT=y
    # CONFIG_PREEMPT_RCU is not set
    CONFIG_X86_LOCAL_APIC=y
    CONFIG_X86_IO_APIC=y
    CONFIG_X86_MCE=y
    CONFIG_X86_MCE_INTEL=y
    CONFIG_X86_MCE_AMD=y
    # CONFIG_I8K is not set
    CONFIG_MICROCODE=m
    CONFIG_MICROCODE_OLD_INTERFACE=y
    CONFIG_X86_MSR=m
    CONFIG_X86_CPUID=y
    # CONFIG_NUMA is not set
    CONFIG_ARCH_SPARSEMEM_DEFAULT=y
    CONFIG_ARCH_SPARSEMEM_ENABLE=y
    CONFIG_ARCH_SELECT_MEMORY_MODEL=y
    CONFIG_SELECT_MEMORY_MODEL=y
    # CONFIG_FLATMEM_MANUAL is not set
    # CONFIG_DISCONTIGMEM_MANUAL is not set
    CONFIG_SPARSEMEM_MANUAL=y
    CONFIG_SPARSEMEM=y
    CONFIG_HAVE_MEMORY_PRESENT=y
    # CONFIG_SPARSEMEM_STATIC is not set
    CONFIG_SPARSEMEM_EXTREME=y
    CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
    CONFIG_SPARSEMEM_VMEMMAP=y
    # CONFIG_MEMORY_HOTPLUG is not set
    CONFIG_SPLIT_PTLOCK_CPUS=4
    CONFIG_RESOURCES_64BIT=y
    CONFIG_ZONE_DMA_FLAG=1
    CONFIG_BOUNCE=y
    CONFIG_VIRT_TO_BUS=y
    CONFIG_MTRR=y
    CONFIG_X86_PAT=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=y
    # CONFIG_HZ_1000 is not set
    CONFIG_HZ=300
    CONFIG_SCHED_HRTICK=y
    # CONFIG_KEXEC is not set
    # CONFIG_CRASH_DUMP is not set
    CONFIG_PHYSICAL_START=0x200000
    # CONFIG_RELOCATABLE is not set
    CONFIG_PHYSICAL_ALIGN=0x200000
    CONFIG_HOTPLUG_CPU=y
    CONFIG_COMPAT_VDSO=y
    CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y

    #
    # Power management options
    #
    CONFIG_PM=y
    CONFIG_PM_LEGACY=y
    # CONFIG_PM_DEBUG is not set
    CONFIG_PM_SLEEP_SMP=y
    CONFIG_PM_SLEEP=y
    CONFIG_SUSPEND=y
    CONFIG_SUSPEND_FREEZER=y
    # CONFIG_HIBERNATION is not set
    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=y
    CONFIG_ACPI_AC=y
    CONFIG_ACPI_BATTERY=y
    CONFIG_ACPI_BUTTON=m
    CONFIG_ACPI_VIDEO=m
    CONFIG_ACPI_FAN=m
    CONFIG_ACPI_DOCK=y
    CONFIG_ACPI_BAY=m
    CONFIG_ACPI_PROCESSOR=y
    CONFIG_ACPI_HOTPLUG_CPU=y
    CONFIG_ACPI_THERMAL=y
    # CONFIG_ACPI_WMI is not set
    # CONFIG_ACPI_ASUS is not set
    # CONFIG_ACPI_TOSHIBA is not set
    # CONFIG_ACPI_CUSTOM_DSDT is not set
    CONFIG_ACPI_BLACKLIST_YEAR=0
    # CONFIG_ACPI_DEBUG is not set
    CONFIG_ACPI_EC=y
    CONFIG_ACPI_POWER=y
    CONFIG_ACPI_SYSTEM=y
    CONFIG_X86_PM_TIMER=y
    CONFIG_ACPI_CONTAINER=y
    # CONFIG_ACPI_SBS is not set

    #
    # CPU Frequency scaling
    #
    CONFIG_CPU_FREQ=y
    CONFIG_CPU_FREQ_TABLE=y
    # CONFIG_CPU_FREQ_DEBUG is not set
    CONFIG_CPU_FREQ_STAT=m
    # CONFIG_CPU_FREQ_STAT_DETAILS is not set
    # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
    # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
    CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
    # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
    CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
    CONFIG_CPU_FREQ_GOV_POWERSAVE=m
    CONFIG_CPU_FREQ_GOV_USERSPACE=y
    CONFIG_CPU_FREQ_GOV_ONDEMAND=y
    CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y

    #
    # CPUFreq processor drivers
    #
    CONFIG_X86_ACPI_CPUFREQ=m
    CONFIG_X86_POWERNOW_K8=m
    CONFIG_X86_POWERNOW_K8_ACPI=y
    CONFIG_X86_SPEEDSTEP_CENTRINO=m
    # CONFIG_X86_P4_CLOCKMOD is not set

    #
    # shared options
    #
    # CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
    # CONFIG_X86_SPEEDSTEP_LIB is not set
    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_DIRECT=y
    CONFIG_PCI_MMCONFIG=y
    CONFIG_PCI_DOMAINS=y
    # CONFIG_DMAR is not set
    CONFIG_PCIEPORTBUS=y
    CONFIG_PCIEAER=y
    CONFIG_ARCH_SUPPORTS_MSI=y
    CONFIG_PCI_MSI=y
    CONFIG_PCI_LEGACY=y
    # CONFIG_PCI_DEBUG is not set
    CONFIG_HT_IRQ=y
    CONFIG_ISA_DMA_API=y
    CONFIG_K8_NB=y
    CONFIG_PCCARD=y
    # CONFIG_PCMCIA_DEBUG is not set
    CONFIG_PCMCIA=y
    CONFIG_PCMCIA_LOAD_CIS=y
    CONFIG_PCMCIA_IOCTL=y
    CONFIG_CARDBUS=y

    #
    # PC-card bridges
    #
    CONFIG_YENTA=m
    CONFIG_YENTA_O2=y
    CONFIG_YENTA_RICOH=y
    CONFIG_YENTA_TI=y
    CONFIG_YENTA_ENE_TUNE=y
    CONFIG_YENTA_TOSHIBA=y
    # CONFIG_PD6729 is not set
    # CONFIG_I82092 is not set
    CONFIG_PCCARD_NONSTATIC=m
    # CONFIG_HOTPLUG_PCI is not set

    #
    # Executable file formats / Emulations
    #
    CONFIG_BINFMT_ELF=y
    CONFIG_COMPAT_BINFMT_ELF=y
    CONFIG_BINFMT_MISC=m
    CONFIG_IA32_EMULATION=y
    CONFIG_IA32_AOUT=m
    CONFIG_COMPAT=y
    CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
    CONFIG_SYSVIPC_COMPAT=y

    #
    # Networking
    #
    CONFIG_NET=y

    #
    # Networking options
    #
    CONFIG_PACKET=y
    # CONFIG_PACKET_MMAP is not set
    CONFIG_UNIX=y
    CONFIG_XFRM=y
    # CONFIG_XFRM_USER is not set
    # CONFIG_XFRM_SUB_POLICY is not set
    # CONFIG_XFRM_MIGRATE is not set
    # CONFIG_XFRM_STATISTICS is not set
    # CONFIG_NET_KEY is not set
    CONFIG_INET=y
    # CONFIG_IP_MULTICAST is not set
    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 is not set
    CONFIG_NET_IPIP=m
    CONFIG_NET_IPGRE=m
    # CONFIG_ARPD is not set
    # CONFIG_SYN_COOKIES is not set
    # CONFIG_INET_AH is not set
    # CONFIG_INET_ESP is not set
    # CONFIG_INET_IPCOMP is not set
    # CONFIG_INET_XFRM_TUNNEL is not set
    CONFIG_INET_TUNNEL=y
    # CONFIG_INET_XFRM_MODE_TRANSPORT is not set
    # CONFIG_INET_XFRM_MODE_TUNNEL is not set
    # CONFIG_INET_XFRM_MODE_BEET is not set
    # CONFIG_INET_LRO is not set
    CONFIG_INET_DIAG=y
    CONFIG_INET_TCP_DIAG=y
    # CONFIG_TCP_CONG_ADVANCED is not set
    CONFIG_TCP_CONG_CUBIC=y
    CONFIG_DEFAULT_TCP_CONG="cubic"
    # CONFIG_TCP_MD5SIG is not set
    # CONFIG_IP_VS is not set
    CONFIG_IPV6=y
    # CONFIG_IPV6_PRIVACY is not set
    # CONFIG_IPV6_ROUTER_PREF is not set
    # CONFIG_IPV6_OPTIMISTIC_DAD is not set
    CONFIG_INET6_AH=y
    CONFIG_INET6_ESP=y
    CONFIG_INET6_IPCOMP=y
    # CONFIG_IPV6_MIP6 is not set
    CONFIG_INET6_XFRM_TUNNEL=y
    CONFIG_INET6_TUNNEL=y
    CONFIG_INET6_XFRM_MODE_TRANSPORT=y
    CONFIG_INET6_XFRM_MODE_TUNNEL=y
    CONFIG_INET6_XFRM_MODE_BEET=y
    # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
    CONFIG_IPV6_SIT=y
    CONFIG_IPV6_NDISC_NODETYPE=y
    # CONFIG_IPV6_TUNNEL is not set
    # CONFIG_IPV6_MULTIPLE_TABLES is not set
    # CONFIG_IPV6_MROUTE is not set
    # CONFIG_NETLABEL is not set
    # CONFIG_NETWORK_SECMARK is not set
    CONFIG_NETFILTER=y
    # CONFIG_NETFILTER_DEBUG is not set
    CONFIG_NETFILTER_ADVANCED=y

    #
    # Core Netfilter Configuration
    #
    # CONFIG_NETFILTER_NETLINK_QUEUE is not set
    # CONFIG_NETFILTER_NETLINK_LOG is not set
    CONFIG_NF_CONNTRACK=m
    # CONFIG_NF_CT_ACCT is not set
    # CONFIG_NF_CONNTRACK_MARK is not set
    # CONFIG_NF_CONNTRACK_EVENTS is not set
    # CONFIG_NF_CT_PROTO_DCCP is not set
    # CONFIG_NF_CT_PROTO_SCTP is not set
    # CONFIG_NF_CT_PROTO_UDPLITE is not set
    # CONFIG_NF_CONNTRACK_AMANDA is not set
    CONFIG_NF_CONNTRACK_FTP=m
    CONFIG_NF_CONNTRACK_H323=m
    CONFIG_NF_CONNTRACK_IRC=m
    # CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
    # CONFIG_NF_CONNTRACK_PPTP is not set
    # CONFIG_NF_CONNTRACK_SANE is not set
    # CONFIG_NF_CONNTRACK_SIP is not set
    # CONFIG_NF_CONNTRACK_TFTP is not set
    # CONFIG_NF_CT_NETLINK is not set
    CONFIG_NETFILTER_XTABLES=m
    CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
    # CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
    # CONFIG_NETFILTER_XT_TARGET_DSCP is not set
    CONFIG_NETFILTER_XT_TARGET_MARK=m
    CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
    # CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
    # CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
    # CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
    # CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
    CONFIG_NETFILTER_XT_MATCH_COMMENT=m
    # CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
    # CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
    # CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
    CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
    # CONFIG_NETFILTER_XT_MATCH_DCCP is not set
    # CONFIG_NETFILTER_XT_MATCH_DSCP is not set
    CONFIG_NETFILTER_XT_MATCH_ESP=m
    # CONFIG_NETFILTER_XT_MATCH_HELPER is not set
    # CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
    CONFIG_NETFILTER_XT_MATCH_LENGTH=m
    CONFIG_NETFILTER_XT_MATCH_LIMIT=m
    CONFIG_NETFILTER_XT_MATCH_MAC=m
    CONFIG_NETFILTER_XT_MATCH_MARK=m
    # CONFIG_NETFILTER_XT_MATCH_OWNER is not set
    # CONFIG_NETFILTER_XT_MATCH_POLICY is not set
    CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
    CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
    # CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
    # CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
    CONFIG_NETFILTER_XT_MATCH_REALM=m
    # CONFIG_NETFILTER_XT_MATCH_SCTP is not set
    CONFIG_NETFILTER_XT_MATCH_STATE=m
    # CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
    CONFIG_NETFILTER_XT_MATCH_STRING=m
    CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
    # CONFIG_NETFILTER_XT_MATCH_TIME is not set
    # CONFIG_NETFILTER_XT_MATCH_U32 is not set
    # CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set

    #
    # IP: Netfilter Configuration
    #
    CONFIG_NF_CONNTRACK_IPV4=m
    CONFIG_NF_CONNTRACK_PROC_COMPAT=y
    # CONFIG_IP_NF_QUEUE is not set
    CONFIG_IP_NF_IPTABLES=m
    CONFIG_IP_NF_MATCH_RECENT=m
    CONFIG_IP_NF_MATCH_ECN=m
    CONFIG_IP_NF_MATCH_AH=m
    CONFIG_IP_NF_MATCH_TTL=m
    CONFIG_IP_NF_MATCH_ADDRTYPE=m
    CONFIG_IP_NF_FILTER=m
    CONFIG_IP_NF_TARGET_REJECT=m
    CONFIG_IP_NF_TARGET_LOG=m
    CONFIG_IP_NF_TARGET_ULOG=m
    CONFIG_NF_NAT=m
    CONFIG_NF_NAT_NEEDED=y
    CONFIG_IP_NF_TARGET_MASQUERADE=m
    # CONFIG_IP_NF_TARGET_REDIRECT is not set
    # CONFIG_IP_NF_TARGET_NETMAP is not set
    # CONFIG_NF_NAT_SNMP_BASIC is not set
    CONFIG_NF_NAT_FTP=m
    CONFIG_NF_NAT_IRC=m
    # CONFIG_NF_NAT_TFTP is not set
    # CONFIG_NF_NAT_AMANDA is not set
    # CONFIG_NF_NAT_PPTP is not set
    CONFIG_NF_NAT_H323=m
    # CONFIG_NF_NAT_SIP is not set
    CONFIG_IP_NF_MANGLE=m
    CONFIG_IP_NF_TARGET_ECN=m
    CONFIG_IP_NF_TARGET_TTL=m
    # CONFIG_IP_NF_TARGET_CLUSTERIP is not set
    # CONFIG_IP_NF_RAW is not set
    # CONFIG_IP_NF_ARPTABLES is not set

    #
    # IPv6: Netfilter Configuration
    #
    CONFIG_NF_CONNTRACK_IPV6=m
    # CONFIG_IP6_NF_QUEUE is not set
    CONFIG_IP6_NF_IPTABLES=m
    # CONFIG_IP6_NF_MATCH_RT is not set
    # CONFIG_IP6_NF_MATCH_OPTS is not set
    # CONFIG_IP6_NF_MATCH_FRAG is not set
    # CONFIG_IP6_NF_MATCH_HL is not set
    # CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
    # CONFIG_IP6_NF_MATCH_AH is not set
    # CONFIG_IP6_NF_MATCH_MH is not set
    # CONFIG_IP6_NF_MATCH_EUI64 is not set
    CONFIG_IP6_NF_FILTER=m
    CONFIG_IP6_NF_TARGET_LOG=m
    CONFIG_IP6_NF_TARGET_REJECT=m
    # CONFIG_IP6_NF_MANGLE is not set
    # CONFIG_IP6_NF_RAW is not set
    # CONFIG_IP_DCCP is not set
    # CONFIG_IP_SCTP is not set
    # CONFIG_TIPC is not set
    # CONFIG_ATM is not set
    # CONFIG_BRIDGE is not set
    # CONFIG_VLAN_8021Q is not set
    # CONFIG_DECNET is not set
    # CONFIG_LLC2 is not set
    # CONFIG_IPX is not set
    # CONFIG_ATALK is not set
    # CONFIG_X25 is not set
    # CONFIG_LAPB is not set
    # CONFIG_ECONET is not set
    # CONFIG_WAN_ROUTER is not set
    # CONFIG_NET_SCHED is not set
    CONFIG_NET_CLS_ROUTE=y
    CONFIG_NET_SCH_FIFO=y

    #
    # Network testing
    #
    # CONFIG_NET_PKTGEN is not set
    # CONFIG_HAMRADIO is not set
    # CONFIG_CAN is not set
    # CONFIG_IRDA is not set
    CONFIG_BT=y
    CONFIG_BT_L2CAP=m
    CONFIG_BT_SCO=m
    CONFIG_BT_RFCOMM=m
    CONFIG_BT_RFCOMM_TTY=y
    CONFIG_BT_BNEP=m
    # CONFIG_BT_BNEP_MC_FILTER is not set
    # CONFIG_BT_BNEP_PROTO_FILTER is not set
    CONFIG_BT_HIDP=m

    #
    # Bluetooth device drivers
    #
    CONFIG_BT_HCIUSB=m
    # CONFIG_BT_HCIUSB_SCO is not set
    CONFIG_BT_HCIUART=m
    CONFIG_BT_HCIUART_H4=y
    CONFIG_BT_HCIUART_BCSP=y
    CONFIG_BT_HCIUART_LL=y
    CONFIG_BT_HCIBCM203X=m
    CONFIG_BT_HCIBPA10X=m
    CONFIG_BT_HCIBFUSB=m
    CONFIG_BT_HCIDTL1=m
    CONFIG_BT_HCIBT3C=m
    CONFIG_BT_HCIBLUECARD=m
    CONFIG_BT_HCIBTUART=m
    CONFIG_BT_HCIVHCI=m
    # CONFIG_AF_RXRPC is not set

    #
    # Wireless
    #
    CONFIG_CFG80211=y
    CONFIG_NL80211=y
    CONFIG_WIRELESS_EXT=y
    CONFIG_MAC80211=m

    #
    # Rate control algorithm selection
    #
    CONFIG_MAC80211_RC_DEFAULT_PID=y
    # CONFIG_MAC80211_RC_DEFAULT_NONE is not set

    #
    # Selecting 'y' for an algorithm will
    #

    #
    # build the algorithm into mac80211.
    #
    CONFIG_MAC80211_RC_DEFAULT="pid"
    CONFIG_MAC80211_RC_PID=y
    # CONFIG_MAC80211_MESH is not set
    # CONFIG_MAC80211_DEBUGFS is not set
    # CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set
    # CONFIG_MAC80211_DEBUG is not set
    CONFIG_IEEE80211=m
    # CONFIG_IEEE80211_DEBUG is not set
    CONFIG_IEEE80211_CRYPT_WEP=m
    CONFIG_IEEE80211_CRYPT_CCMP=m
    CONFIG_IEEE80211_CRYPT_TKIP=m
    CONFIG_RFKILL=m
    CONFIG_RFKILL_INPUT=m
    # CONFIG_NET_9P 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_DEBUG_DRIVER is not set
    # CONFIG_DEBUG_DEVRES is not set
    # CONFIG_SYS_HYPERVISOR is not set
    CONFIG_CONNECTOR=m
    CONFIG_MTD=m
    # CONFIG_MTD_DEBUG is not set
    # CONFIG_MTD_CONCAT is not set
    # CONFIG_MTD_PARTITIONS is not set

    #
    # User Modules And Translation Layers
    #
    # CONFIG_MTD_CHAR is not set
    CONFIG_MTD_BLKDEVS=m
    # CONFIG_MTD_BLOCK is not set
    # CONFIG_MTD_BLOCK_RO is not set
    # CONFIG_FTL is not set
    # CONFIG_NFTL is not set
    # CONFIG_INFTL is not set
    # CONFIG_RFD_FTL is not set
    # CONFIG_SSFDC is not set
    # CONFIG_MTD_OOPS is not set

    #
    # RAM/ROM/Flash chip drivers
    #
    # CONFIG_MTD_CFI is not set
    # CONFIG_MTD_JEDECPROBE is not set
    CONFIG_MTD_MAP_BANK_WIDTH_1=y
    CONFIG_MTD_MAP_BANK_WIDTH_2=y
    CONFIG_MTD_MAP_BANK_WIDTH_4=y
    # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
    # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
    # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
    CONFIG_MTD_CFI_I1=y
    CONFIG_MTD_CFI_I2=y
    # CONFIG_MTD_CFI_I4 is not set
    # CONFIG_MTD_CFI_I8 is not set
    # CONFIG_MTD_RAM is not set
    # CONFIG_MTD_ROM is not set
    # CONFIG_MTD_ABSENT is not set

    #
    # Mapping drivers for chip access
    #
    # CONFIG_MTD_COMPLEX_MAPPINGS is not set
    # CONFIG_MTD_TS5500 is not set
    # CONFIG_MTD_INTEL_VR_NOR is not set
    # CONFIG_MTD_PLATRAM is not set

    #
    # Self-contained MTD device drivers
    #
    # CONFIG_MTD_PMC551 is not set
    # CONFIG_MTD_SLRAM is not set
    # CONFIG_MTD_PHRAM is not set
    # CONFIG_MTD_MTDRAM is not set
    # CONFIG_MTD_BLOCK2MTD is not set

    #
    # Disk-On-Chip Device Drivers
    #
    # CONFIG_MTD_DOC2000 is not set
    # CONFIG_MTD_DOC2001 is not set
    # CONFIG_MTD_DOC2001PLUS is not set
    # CONFIG_MTD_NAND is not set
    # CONFIG_MTD_ONENAND is not set

    #
    # UBI - Unsorted block images
    #
    # CONFIG_MTD_UBI is not set
    CONFIG_PARPORT=m
    # CONFIG_PARPORT_PC is not set
    # CONFIG_PARPORT_GSC is not set
    # CONFIG_PARPORT_AX88796 is not set
    # CONFIG_PARPORT_1284 is not set
    CONFIG_PARPORT_NOT_PC=y
    CONFIG_PNP=y
    # CONFIG_PNP_DEBUG is not set

    #
    # Protocols
    #
    CONFIG_PNPACPI=y
    CONFIG_BLK_DEV=y
    # CONFIG_BLK_DEV_FD is not set
    # CONFIG_BLK_CPQ_DA is not set
    # CONFIG_BLK_CPQ_CISS_DA is not set
    # CONFIG_BLK_DEV_DAC960 is not set
    # CONFIG_BLK_DEV_UMEM is not set
    # CONFIG_BLK_DEV_COW_COMMON is not set
    CONFIG_BLK_DEV_LOOP=y
    # CONFIG_BLK_DEV_CRYPTOLOOP is not set
    # CONFIG_BLK_DEV_NBD is not set
    # CONFIG_BLK_DEV_SX8 is not set
    # CONFIG_BLK_DEV_UB is not set
    CONFIG_BLK_DEV_RAM=y
    CONFIG_BLK_DEV_RAM_COUNT=16
    CONFIG_BLK_DEV_RAM_SIZE=8192
    # CONFIG_BLK_DEV_XIP is not set
    CONFIG_CDROM_PKTCDVD=m
    CONFIG_CDROM_PKTCDVD_BUFFERS=8
    # CONFIG_CDROM_PKTCDVD_WCACHE is not set
    # CONFIG_ATA_OVER_ETH is not set
    CONFIG_MISC_DEVICES=y
    # CONFIG_IBM_ASM is not set
    # CONFIG_PHANTOM is not set
    # CONFIG_EEPROM_93CX6 is not set
    # CONFIG_SGI_IOC4 is not set
    # CONFIG_TIFM_CORE is not set
    # CONFIG_ACER_WMI is not set
    # CONFIG_ASUS_LAPTOP is not set
    # CONFIG_FUJITSU_LAPTOP is not set
    # CONFIG_MSI_LAPTOP is not set
    # CONFIG_SONY_LAPTOP is not set
    CONFIG_THINKPAD_ACPI=y
    # CONFIG_THINKPAD_ACPI_DEBUG is not set
    CONFIG_THINKPAD_ACPI_BAY=y
    # CONFIG_THINKPAD_ACPI_VIDEO is not set
    CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
    # CONFIG_INTEL_MENLOW is not set
    # CONFIG_ENCLOSURE_SERVICES is not set
    CONFIG_HAVE_IDE=y
    CONFIG_IDE=y
    CONFIG_BLK_DEV_IDE=y

    #
    # Please see Documentation/ide/ide.txt for help/info on IDE drives
    #
    # CONFIG_BLK_DEV_IDE_SATA is not set
    CONFIG_BLK_DEV_IDEDISK=y
    CONFIG_IDEDISK_MULTI_MODE=y
    CONFIG_BLK_DEV_IDECS=m
    CONFIG_BLK_DEV_DELKIN=m
    CONFIG_BLK_DEV_IDECD=y
    CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
    # CONFIG_BLK_DEV_IDETAPE is not set
    # CONFIG_BLK_DEV_IDEFLOPPY is not set
    # CONFIG_BLK_DEV_IDESCSI is not set
    CONFIG_BLK_DEV_IDEACPI=y
    # CONFIG_IDE_TASK_IOCTL is not set
    CONFIG_IDE_PROC_FS=y

    #
    # IDE chipset support/bugfixes
    #
    CONFIG_IDE_GENERIC=y
    # CONFIG_BLK_DEV_PLATFORM is not set
    # CONFIG_BLK_DEV_CMD640 is not set
    CONFIG_BLK_DEV_IDEPNP=y
    CONFIG_BLK_DEV_IDEDMA_SFF=y

    #
    # PCI IDE chipsets support
    #
    CONFIG_BLK_DEV_IDEPCI=y
    CONFIG_IDEPCI_PCIBUS_ORDER=y
    # CONFIG_BLK_DEV_OFFBOARD is not set
    CONFIG_BLK_DEV_GENERIC=y
    # CONFIG_BLK_DEV_OPTI621 is not set
    # CONFIG_BLK_DEV_RZ1000 is not set
    CONFIG_BLK_DEV_IDEDMA_PCI=y
    # CONFIG_BLK_DEV_AEC62XX is not set
    # CONFIG_BLK_DEV_ALI15X3 is not set
    # CONFIG_BLK_DEV_AMD74XX is not set
    # CONFIG_BLK_DEV_ATIIXP is not set
    # CONFIG_BLK_DEV_CMD64X is not set
    # CONFIG_BLK_DEV_TRIFLEX is not set
    # CONFIG_BLK_DEV_CY82C693 is not set
    # CONFIG_BLK_DEV_CS5520 is not set
    # CONFIG_BLK_DEV_CS5530 is not set
    # CONFIG_BLK_DEV_HPT34X is not set
    # CONFIG_BLK_DEV_HPT366 is not set
    # CONFIG_BLK_DEV_JMICRON is not set
    # CONFIG_BLK_DEV_SC1200 is not set
    CONFIG_BLK_DEV_PIIX=y
    # CONFIG_BLK_DEV_IT8213 is not set
    # CONFIG_BLK_DEV_IT821X is not set
    # CONFIG_BLK_DEV_NS87415 is not set
    # CONFIG_BLK_DEV_PDC202XX_OLD is not set
    # CONFIG_BLK_DEV_PDC202XX_NEW is not set
    # CONFIG_BLK_DEV_SVWKS is not set
    # CONFIG_BLK_DEV_SIIMAGE is not set
    # CONFIG_BLK_DEV_SIS5513 is not set
    # CONFIG_BLK_DEV_SLC90E66 is not set
    # CONFIG_BLK_DEV_TRM290 is not set
    # CONFIG_BLK_DEV_VIA82CXXX is not set
    # CONFIG_BLK_DEV_TC86C001 is not set
    CONFIG_BLK_DEV_IDEDMA=y
    # CONFIG_BLK_DEV_HD_ONLY is not set
    # CONFIG_BLK_DEV_HD is not set

    #
    # SCSI device support
    #
    # CONFIG_RAID_ATTRS is not set
    CONFIG_SCSI=y
    CONFIG_SCSI_DMA=y
    # CONFIG_SCSI_TGT is not set
    # CONFIG_SCSI_NETLINK is not set
    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 is not set
    CONFIG_BLK_DEV_SR=y
    CONFIG_BLK_DEV_SR_VENDOR=y
    CONFIG_CHR_DEV_SG=m
    # CONFIG_CHR_DEV_SCH is not set

    #
    # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
    #
    # CONFIG_SCSI_MULTI_LUN is not set
    # CONFIG_SCSI_CONSTANTS is not set
    # CONFIG_SCSI_LOGGING is not set
    # CONFIG_SCSI_SCAN_ASYNC is not set
    CONFIG_SCSI_WAIT_SCAN=m

    #
    # SCSI Transports
    #
    # CONFIG_SCSI_SPI_ATTRS is not set
    # CONFIG_SCSI_FC_ATTRS is not set
    # CONFIG_SCSI_ISCSI_ATTRS is not set
    # CONFIG_SCSI_SAS_LIBSAS is not set
    # CONFIG_SCSI_SRP_ATTRS is not set
    # CONFIG_SCSI_LOWLEVEL is not set
    # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
    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 is not set
    # CONFIG_SATA_NV is not set
    # CONFIG_PDC_ADMA is not set
    # CONFIG_SATA_QSTOR is not set
    # CONFIG_SATA_PROMISE is not set
    # CONFIG_SATA_SX4 is not set
    # CONFIG_SATA_SIL is not set
    # CONFIG_SATA_SIS is not set
    # CONFIG_SATA_ULI is not set
    # CONFIG_SATA_VIA is not set
    # CONFIG_SATA_VITESSE is not set
    # CONFIG_SATA_INIC162X is not set
    # CONFIG_PATA_ACPI is not set
    # CONFIG_PATA_ALI is not set
    # CONFIG_PATA_AMD is not set
    # CONFIG_PATA_ARTOP is not set
    # CONFIG_PATA_ATIIXP is not set
    # CONFIG_PATA_CMD640_PCI is not set
    # CONFIG_PATA_CMD64X is not set
    # CONFIG_PATA_CS5520 is not set
    # CONFIG_PATA_CS5530 is not set
    # CONFIG_PATA_CYPRESS is not set
    # CONFIG_PATA_EFAR is not set
    # CONFIG_ATA_GENERIC is not set
    # CONFIG_PATA_HPT366 is not set
    # CONFIG_PATA_HPT37X is not set
    # CONFIG_PATA_HPT3X2N is not set
    # CONFIG_PATA_HPT3X3 is not set
    # CONFIG_PATA_IT821X is not set
    # CONFIG_PATA_IT8213 is not set
    # CONFIG_PATA_JMICRON is not set
    # CONFIG_PATA_TRIFLEX is not set
    # CONFIG_PATA_MARVELL is not set
    # CONFIG_PATA_MPIIX is not set
    # CONFIG_PATA_OLDPIIX is not set
    # CONFIG_PATA_NETCELL is not set
    # CONFIG_PATA_NINJA32 is not set
    # CONFIG_PATA_NS87410 is not set
    # CONFIG_PATA_NS87415 is not set
    # CONFIG_PATA_OPTI is not set
    # CONFIG_PATA_OPTIDMA is not set
    # CONFIG_PATA_PCMCIA is not set
    # CONFIG_PATA_PDC_OLD is not set
    # CONFIG_PATA_RADISYS is not set
    # CONFIG_PATA_RZ1000 is not set
    # CONFIG_PATA_SC1200 is not set
    # CONFIG_PATA_SERVERWORKS is not set
    # CONFIG_PATA_PDC2027X is not set
    # CONFIG_PATA_SIL680 is not set
    # CONFIG_PATA_SIS is not set
    # CONFIG_PATA_VIA is not set
    # CONFIG_PATA_WINBOND is not set
    CONFIG_MD=y
    # CONFIG_BLK_DEV_MD is not set
    CONFIG_BLK_DEV_DM=y
    # CONFIG_DM_DEBUG is not set
    CONFIG_DM_CRYPT=y
    # CONFIG_DM_SNAPSHOT is not set
    # CONFIG_DM_MIRROR is not set
    # CONFIG_DM_ZERO is not set
    # CONFIG_DM_MULTIPATH is not set
    # CONFIG_DM_DELAY is not set
    # CONFIG_DM_UEVENT is not set
    # CONFIG_FUSION is not set

    #
    # IEEE 1394 (FireWire) support
    #
    # CONFIG_FIREWIRE is not set
    CONFIG_IEEE1394=m

    #
    # Subsystem Options
    #
    # CONFIG_IEEE1394_VERBOSEDEBUG is not set

    #
    # Controllers
    #
    # CONFIG_IEEE1394_PCILYNX is not set
    CONFIG_IEEE1394_OHCI1394=m

    #
    # Protocols
    #
    CONFIG_IEEE1394_VIDEO1394=m
    CONFIG_IEEE1394_SBP2=m
    # CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
    CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
    CONFIG_IEEE1394_ETH1394=m
    CONFIG_IEEE1394_DV1394=m
    CONFIG_IEEE1394_RAWIO=m
    # CONFIG_I2O is not set
    # CONFIG_MACINTOSH_DRIVERS is not set
    CONFIG_NETDEVICES=y
    # CONFIG_NETDEVICES_MULTIQUEUE is not set
    # CONFIG_DUMMY is not set
    # CONFIG_BONDING is not set
    # CONFIG_MACVLAN is not set
    # CONFIG_EQUALIZER is not set
    CONFIG_TUN=m
    # CONFIG_VETH is not set
    # CONFIG_NET_SB1000 is not set
    # CONFIG_ARCNET is not set
    # CONFIG_NET_ETHERNET is not set
    CONFIG_MII=m
    CONFIG_NETDEV_1000=y
    # CONFIG_ACENIC is not set
    # CONFIG_DL2K is not set
    CONFIG_E1000=m
    # CONFIG_E1000_NAPI is not set
    # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
    # CONFIG_E1000E is not set
    # CONFIG_E1000E_ENABLED is not set
    # CONFIG_IP1000 is not set
    # CONFIG_IGB is not set
    # CONFIG_NS83820 is not set
    # CONFIG_HAMACHI is not set
    # CONFIG_YELLOWFIN is not set
    # CONFIG_R8169 is not set
    # CONFIG_SIS190 is not set
    # CONFIG_SKGE is not set
    # CONFIG_SKY2 is not set
    # CONFIG_VIA_VELOCITY is not set
    # CONFIG_TIGON3 is not set
    # CONFIG_BNX2 is not set
    # CONFIG_QLA3XXX is not set
    # CONFIG_ATL1 is not set
    # CONFIG_NETDEV_10000 is not set
    # CONFIG_TR is not set

    #
    # Wireless LAN
    #
    # CONFIG_WLAN_PRE80211 is not set
    CONFIG_WLAN_80211=y
    # CONFIG_PCMCIA_RAYCS is not set
    # CONFIG_IPW2100 is not set
    # CONFIG_IPW2200 is not set
    # CONFIG_LIBERTAS is not set
    # CONFIG_AIRO is not set
    CONFIG_HERMES=m
    # CONFIG_PLX_HERMES is not set
    # CONFIG_TMD_HERMES is not set
    # CONFIG_NORTEL_HERMES is not set
    # CONFIG_PCI_HERMES is not set
    # CONFIG_PCMCIA_HERMES is not set
    # CONFIG_PCMCIA_SPECTRUM is not set
    # CONFIG_ATMEL is not set
    # CONFIG_AIRO_CS is not set
    # CONFIG_PCMCIA_WL3501 is not set
    CONFIG_PRISM54=m
    # CONFIG_USB_ZD1201 is not set
    # CONFIG_USB_NET_RNDIS_WLAN is not set
    # CONFIG_RTL8180 is not set
    # CONFIG_RTL8187 is not set
    # CONFIG_ADM8211 is not set
    # CONFIG_P54_COMMON is not set
    # CONFIG_ATH5K is not set
    CONFIG_IWLCORE=m
    # CONFIG_IWLWIFI_LEDS is not set
    # CONFIG_IWLWIFI_RFKILL is not set
    CONFIG_IWL4965=m
    # CONFIG_IWL4965_HT is not set
    # CONFIG_IWL4965_SPECTRUM_MEASUREMENT is not set
    # CONFIG_IWL4965_SENSITIVITY is not set
    # CONFIG_IWLWIFI_DEBUG is not set
    # CONFIG_IWL3945 is not set
    # CONFIG_HOSTAP is not set
    # CONFIG_B43 is not set
    # CONFIG_B43LEGACY is not set
    # CONFIG_ZD1211RW is not set
    # CONFIG_RT2X00 is not set

    #
    # USB Network Adapters
    #
    # CONFIG_USB_CATC is not set
    # CONFIG_USB_KAWETH is not set
    # CONFIG_USB_PEGASUS is not set
    # CONFIG_USB_RTL8150 is not set
    # CONFIG_USB_USBNET is not set
    CONFIG_NET_PCMCIA=y
    CONFIG_PCMCIA_3C589=m
    CONFIG_PCMCIA_3C574=m
    CONFIG_PCMCIA_FMVJ18X=m
    CONFIG_PCMCIA_PCNET=m
    CONFIG_PCMCIA_NMCLAN=m
    CONFIG_PCMCIA_SMC91C92=m
    CONFIG_PCMCIA_XIRC2PS=m
    CONFIG_PCMCIA_AXNET=m
    # CONFIG_WAN is not set
    # CONFIG_FDDI is not set
    # CONFIG_HIPPI is not set
    # CONFIG_PLIP is not set
    CONFIG_PPP=m
    CONFIG_PPP_MULTILINK=y
    CONFIG_PPP_FILTER=y
    CONFIG_PPP_ASYNC=m
    CONFIG_PPP_SYNC_TTY=m
    CONFIG_PPP_DEFLATE=m
    CONFIG_PPP_BSDCOMP=m
    # CONFIG_PPP_MPPE is not set
    CONFIG_PPPOE=m
    # CONFIG_PPPOL2TP is not set
    CONFIG_SLIP=m
    CONFIG_SLIP_COMPRESSED=y
    CONFIG_SLHC=m
    CONFIG_SLIP_SMART=y
    CONFIG_SLIP_MODE_SLIP6=y
    CONFIG_NET_FC=y
    CONFIG_NETCONSOLE=m
    # CONFIG_NETCONSOLE_DYNAMIC is not set
    CONFIG_NETPOLL=y
    # CONFIG_NETPOLL_TRAP is not set
    CONFIG_NET_POLL_CONTROLLER=y
    # CONFIG_ISDN is not set
    # CONFIG_PHONE is not set

    #
    # Input device support
    #
    CONFIG_INPUT=y
    # CONFIG_INPUT_FF_MEMLESS is not set
    CONFIG_INPUT_POLLDEV=m

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

    #
    # Input Device Drivers
    #
    CONFIG_INPUT_KEYBOARD=y
    CONFIG_KEYBOARD_ATKBD=y
    # CONFIG_KEYBOARD_SUNKBD is not set
    # CONFIG_KEYBOARD_LKKBD is not set
    # CONFIG_KEYBOARD_XTKBD is not set
    # CONFIG_KEYBOARD_NEWTON is not set
    # CONFIG_KEYBOARD_STOWAWAY is not set
    CONFIG_INPUT_MOUSE=y
    CONFIG_MOUSE_PS2=m
    CONFIG_MOUSE_PS2_ALPS=y
    CONFIG_MOUSE_PS2_LOGIPS2PP=y
    CONFIG_MOUSE_PS2_SYNAPTICS=y
    CONFIG_MOUSE_PS2_LIFEBOOK=y
    CONFIG_MOUSE_PS2_TRACKPOINT=y
    # CONFIG_MOUSE_PS2_TOUCHKIT is not set
    CONFIG_MOUSE_SERIAL=m
    # CONFIG_MOUSE_APPLETOUCH is not set
    # CONFIG_MOUSE_VSXXXAA is not set
    # CONFIG_INPUT_JOYSTICK is not set
    # CONFIG_INPUT_TABLET is not set
    # CONFIG_INPUT_TOUCHSCREEN is not set
    CONFIG_INPUT_MISC=y
    CONFIG_INPUT_PCSPKR=m
    # CONFIG_INPUT_APANEL is not set
    # CONFIG_INPUT_ATLAS_BTNS is not set
    # CONFIG_INPUT_ATI_REMOTE is not set
    # CONFIG_INPUT_ATI_REMOTE2 is not set
    # CONFIG_INPUT_KEYSPAN_REMOTE is not set
    # CONFIG_INPUT_POWERMATE is not set
    # CONFIG_INPUT_YEALINK is not set
    # CONFIG_INPUT_UINPUT is not set

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

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

    #
    # Serial drivers
    #
    CONFIG_SERIAL_8250=y
    CONFIG_SERIAL_8250_CONSOLE=y
    CONFIG_FIX_EARLYCON_MEM=y
    CONFIG_SERIAL_8250_PCI=y
    CONFIG_SERIAL_8250_PNP=y
    # CONFIG_SERIAL_8250_CS is not set
    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_SHARE_IRQ=y
    # CONFIG_SERIAL_8250_DETECT_IRQ is not set
    CONFIG_SERIAL_8250_RSA=y

    #
    # Non-8250 serial port support
    #
    CONFIG_SERIAL_CORE=y
    CONFIG_SERIAL_CORE_CONSOLE=y
    # CONFIG_SERIAL_JSM is not set
    CONFIG_UNIX98_PTYS=y
    # CONFIG_LEGACY_PTYS is not set
    # CONFIG_PRINTER is not set
    # CONFIG_PPDEV is not set
    # CONFIG_IPMI_HANDLER is not set
    # CONFIG_HW_RANDOM is not set
    CONFIG_NVRAM=y
    CONFIG_RTC=y
    # CONFIG_R3964 is not set
    # CONFIG_APPLICOM is not set

    #
    # PCMCIA character devices
    #
    # CONFIG_SYNCLINK_CS is not set
    # CONFIG_CARDMAN_4000 is not set
    # CONFIG_CARDMAN_4040 is not set
    # CONFIG_IPWIRELESS is not set
    # CONFIG_MWAVE is not set
    # CONFIG_PC8736x_GPIO is not set
    # CONFIG_RAW_DRIVER is not set
    CONFIG_HPET=y
    # CONFIG_HPET_RTC_IRQ is not set
    CONFIG_HPET_MMAP=y
    # CONFIG_HANGCHECK_TIMER is not set
    # CONFIG_TCG_TPM is not set
    # CONFIG_TELCLOCK is not set
    CONFIG_DEVPORT=y
    CONFIG_I2C=m
    CONFIG_I2C_BOARDINFO=y
    CONFIG_I2C_CHARDEV=m

    #
    # I2C Algorithms
    #
    CONFIG_I2C_ALGOBIT=m
    CONFIG_I2C_ALGOPCF=m
    CONFIG_I2C_ALGOPCA=m

    #
    # I2C Hardware Bus support
    #
    # CONFIG_I2C_ALI1535 is not set
    # CONFIG_I2C_ALI1563 is not set
    # CONFIG_I2C_ALI15X3 is not set
    # CONFIG_I2C_AMD756 is not set
    # CONFIG_I2C_AMD8111 is not set
    CONFIG_I2C_I801=m
    # CONFIG_I2C_I810 is not set
    # CONFIG_I2C_PIIX4 is not set
    # CONFIG_I2C_NFORCE2 is not set
    # CONFIG_I2C_OCORES is not set
    # CONFIG_I2C_PARPORT is not set
    # CONFIG_I2C_PARPORT_LIGHT is not set
    # CONFIG_I2C_PROSAVAGE is not set
    # CONFIG_I2C_SAVAGE4 is not set
    # CONFIG_I2C_SIMTEC is not set
    # CONFIG_I2C_SIS5595 is not set
    # CONFIG_I2C_SIS630 is not set
    # CONFIG_I2C_SIS96X is not set
    # CONFIG_I2C_TAOS_EVM is not set
    # CONFIG_I2C_STUB is not set
    # CONFIG_I2C_TINY_USB is not set
    # CONFIG_I2C_VIA is not set
    # CONFIG_I2C_VIAPRO is not set
    # CONFIG_I2C_VOODOO3 is not set

    #
    # Miscellaneous I2C Chip support
    #
    # CONFIG_DS1682 is not set
    CONFIG_SENSORS_EEPROM=m
    # CONFIG_SENSORS_PCF8574 is not set
    # CONFIG_PCF8575 is not set
    # CONFIG_SENSORS_PCF8591 is not set
    # CONFIG_TPS65010 is not set
    # CONFIG_SENSORS_MAX6875 is not set
    # CONFIG_SENSORS_TSL2550 is not set
    # CONFIG_I2C_DEBUG_CORE is not set
    # CONFIG_I2C_DEBUG_ALGO is not set
    # CONFIG_I2C_DEBUG_BUS is not set
    # CONFIG_I2C_DEBUG_CHIP is not set

    #
    # SPI support
    #
    # CONFIG_SPI is not set
    # CONFIG_SPI_MASTER is not set
    CONFIG_W1=m
    # CONFIG_W1_CON is not set

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

    #
    # 1-wire Slaves
    #
    CONFIG_W1_SLAVE_THERM=m
    CONFIG_W1_SLAVE_SMEM=m
    CONFIG_W1_SLAVE_DS2433=m
    # CONFIG_W1_SLAVE_DS2433_CRC is not set
    CONFIG_W1_SLAVE_DS2760=m
    CONFIG_POWER_SUPPLY=y
    # CONFIG_POWER_SUPPLY_DEBUG is not set
    # CONFIG_PDA_POWER is not set
    # CONFIG_BATTERY_DS2760 is not set
    CONFIG_HWMON=y
    CONFIG_HWMON_VID=m
    CONFIG_SENSORS_ABITUGURU=m
    CONFIG_SENSORS_ABITUGURU3=m
    CONFIG_SENSORS_AD7418=m
    CONFIG_SENSORS_ADM1021=m
    CONFIG_SENSORS_ADM1025=m
    CONFIG_SENSORS_ADM1026=m
    CONFIG_SENSORS_ADM1029=m
    CONFIG_SENSORS_ADM1031=m
    CONFIG_SENSORS_ADM9240=m
    CONFIG_SENSORS_ADT7470=m
    # CONFIG_SENSORS_ADT7473 is not set
    CONFIG_SENSORS_K8TEMP=m
    CONFIG_SENSORS_ASB100=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_GL518SM=m
    CONFIG_SENSORS_GL520SM=m
    CONFIG_SENSORS_CORETEMP=m
    CONFIG_SENSORS_IT87=m
    CONFIG_SENSORS_LM63=m
    CONFIG_SENSORS_LM75=m
    CONFIG_SENSORS_LM77=m
    CONFIG_SENSORS_LM78=m
    CONFIG_SENSORS_LM80=m
    CONFIG_SENSORS_LM83=m
    CONFIG_SENSORS_LM85=m
    CONFIG_SENSORS_LM87=m
    CONFIG_SENSORS_LM90=m
    CONFIG_SENSORS_LM92=m
    CONFIG_SENSORS_LM93=m
    CONFIG_SENSORS_MAX1619=m
    CONFIG_SENSORS_MAX6650=m
    CONFIG_SENSORS_PC87360=m
    CONFIG_SENSORS_PC87427=m
    CONFIG_SENSORS_SIS5595=m
    CONFIG_SENSORS_DME1737=m
    CONFIG_SENSORS_SMSC47M1=m
    CONFIG_SENSORS_SMSC47M192=m
    CONFIG_SENSORS_SMSC47B397=m
    # CONFIG_SENSORS_ADS7828 is not set
    CONFIG_SENSORS_THMC50=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=m
    CONFIG_SENSORS_W83L785TS=m
    # CONFIG_SENSORS_W83L786NG is not set
    CONFIG_SENSORS_W83627HF=m
    CONFIG_SENSORS_W83627EHF=m
    CONFIG_SENSORS_HDAPS=m
    CONFIG_SENSORS_APPLESMC=m
    # CONFIG_HWMON_DEBUG_CHIP is not set
    CONFIG_THERMAL=y
    # CONFIG_WATCHDOG is not set

    #
    # Sonics Silicon Backplane
    #
    CONFIG_SSB_POSSIBLE=y
    # CONFIG_SSB is not set

    #
    # Multifunction device drivers
    #
    # CONFIG_MFD_SM501 is not set

    #
    # Multimedia devices
    #
    CONFIG_VIDEO_DEV=y
    CONFIG_VIDEO_V4L2_COMMON=m
    CONFIG_VIDEO_V4L1=y
    CONFIG_VIDEO_V4L1_COMPAT=y
    CONFIG_VIDEO_V4L2=y
    CONFIG_VIDEO_CAPTURE_DRIVERS=y
    # CONFIG_VIDEO_ADV_DEBUG is not set
    CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
    CONFIG_VIDEO_TVAUDIO=m
    CONFIG_VIDEO_TDA7432=m
    CONFIG_VIDEO_TDA9875=m
    CONFIG_VIDEO_MSP3400=m
    CONFIG_VIDEO_VIVI=m
    CONFIG_VIDEO_BT848=m
    # CONFIG_VIDEO_SAA6588 is not set
    CONFIG_VIDEO_BWQCAM=m
    # CONFIG_VIDEO_CQCAM is not set
    CONFIG_VIDEO_CPIA=m
    CONFIG_VIDEO_CPIA_USB=m
    CONFIG_VIDEO_CPIA2=m
    # CONFIG_VIDEO_SAA5246A is not set
    # CONFIG_VIDEO_SAA5249 is not set
    # CONFIG_TUNER_3036 is not set
    # CONFIG_VIDEO_STRADIS is not set
    # CONFIG_VIDEO_ZORAN is not set
    # CONFIG_VIDEO_SAA7134 is not set
    # CONFIG_VIDEO_MXB is not set
    # CONFIG_VIDEO_DPC is not set
    # CONFIG_VIDEO_HEXIUM_ORION is not set
    # CONFIG_VIDEO_HEXIUM_GEMINI is not set
    # CONFIG_VIDEO_CX88 is not set
    # CONFIG_VIDEO_IVTV is not set
    # CONFIG_VIDEO_CAFE_CCIC is not set
    CONFIG_V4L_USB_DRIVERS=y
    # CONFIG_VIDEO_PVRUSB2 is not set
    # CONFIG_VIDEO_EM28XX is not set
    # CONFIG_VIDEO_USBVISION is not set
    CONFIG_VIDEO_USBVIDEO=m
    # CONFIG_USB_VICAM is not set
    CONFIG_USB_IBMCAM=m
    CONFIG_USB_KONICAWC=m
    # CONFIG_USB_QUICKCAM_MESSENGER is not set
    CONFIG_USB_ET61X251=m
    CONFIG_VIDEO_OVCAMCHIP=m
    CONFIG_USB_W9968CF=m
    CONFIG_USB_OV511=m
    CONFIG_USB_SE401=m
    CONFIG_USB_SN9C102=m
    CONFIG_USB_STV680=m
    CONFIG_USB_ZC0301=m
    CONFIG_USB_PWC=m
    # CONFIG_USB_PWC_DEBUG is not set
    # CONFIG_USB_ZR364XX is not set
    # CONFIG_USB_STKWEBCAM is not set
    # CONFIG_RADIO_ADAPTERS is not set
    # CONFIG_DVB_CORE is not set
    CONFIG_VIDEO_TUNER=m
    # CONFIG_VIDEO_TUNER_CUSTOMIZE is not set
    CONFIG_TUNER_XC2028=m
    CONFIG_TUNER_MT20XX=m
    CONFIG_TUNER_TDA8290=m
    CONFIG_TUNER_TEA5761=m
    CONFIG_TUNER_TEA5767=m
    CONFIG_TUNER_SIMPLE=m
    CONFIG_TUNER_TDA9887=m
    CONFIG_VIDEOBUF_GEN=m
    CONFIG_VIDEOBUF_DMA_SG=m
    CONFIG_VIDEOBUF_VMALLOC=m
    CONFIG_VIDEO_BTCX=m
    CONFIG_VIDEO_IR_I2C=m
    CONFIG_VIDEO_IR=m
    CONFIG_VIDEO_TVEEPROM=m
    # CONFIG_DAB is not set

    #
    # Graphics support
    #
    CONFIG_AGP=y
    CONFIG_AGP_AMD64=y
    # CONFIG_AGP_INTEL is not set
    # CONFIG_AGP_SIS is not set
    # CONFIG_AGP_VIA is not set
    # CONFIG_DRM is not set
    # CONFIG_VGASTATE is not set
    CONFIG_VIDEO_OUTPUT_CONTROL=m
    # CONFIG_FB is not set
    CONFIG_BACKLIGHT_LCD_SUPPORT=y
    CONFIG_LCD_CLASS_DEVICE=m
    CONFIG_BACKLIGHT_CLASS_DEVICE=y
    # CONFIG_BACKLIGHT_CORGI is not set
    # CONFIG_BACKLIGHT_PROGEAR is not set

    #
    # Display device support
    #
    CONFIG_DISPLAY_SUPPORT=m

    #
    # Display hardware drivers
    #

    #
    # Console display driver support
    #
    CONFIG_VGA_CONSOLE=y
    CONFIG_VGACON_SOFT_SCROLLBACK=y
    CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=256
    CONFIG_VIDEO_SELECT=y
    CONFIG_DUMMY_CONSOLE=y

    #
    # Sound
    #
    CONFIG_SOUND=y

    #
    # Advanced Linux Sound Architecture
    #
    CONFIG_SND=m
    CONFIG_SND_TIMER=m
    CONFIG_SND_PCM=m
    CONFIG_SND_RAWMIDI=m
    CONFIG_SND_SEQUENCER=m
    # CONFIG_SND_SEQ_DUMMY is not set
    CONFIG_SND_OSSEMUL=y
    CONFIG_SND_MIXER_OSS=m
    CONFIG_SND_PCM_OSS=m
    CONFIG_SND_PCM_OSS_PLUGINS=y
    CONFIG_SND_SEQUENCER_OSS=y
    CONFIG_SND_RTCTIMER=m
    CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
    # CONFIG_SND_DYNAMIC_MINORS is not set
    # CONFIG_SND_SUPPORT_OLD_API is not set
    CONFIG_SND_VERBOSE_PROCFS=y
    # CONFIG_SND_VERBOSE_PRINTK is not set
    # CONFIG_SND_DEBUG is not set

    #
    # Generic devices
    #
    # CONFIG_SND_DUMMY is not set
    CONFIG_SND_VIRMIDI=m
    # CONFIG_SND_MTPAV is not set
    # CONFIG_SND_MTS64 is not set
    # CONFIG_SND_SERIAL_U16550 is not set
    # CONFIG_SND_MPU401 is not set
    # CONFIG_SND_PORTMAN2X4 is not set

    #
    # PCI devices
    #
    # CONFIG_SND_AD1889 is not set
    # CONFIG_SND_ALS300 is not set
    # CONFIG_SND_ALS4000 is not set
    # CONFIG_SND_ALI5451 is not set
    # CONFIG_SND_ATIIXP is not set
    # CONFIG_SND_ATIIXP_MODEM is not set
    # CONFIG_SND_AU8810 is not set
    # CONFIG_SND_AU8820 is not set
    # CONFIG_SND_AU8830 is not set
    # CONFIG_SND_AZT3328 is not set
    # CONFIG_SND_BT87X is not set
    # CONFIG_SND_CA0106 is not set
    # CONFIG_SND_CMIPCI is not set
    # CONFIG_SND_OXYGEN is not set
    # CONFIG_SND_CS4281 is not set
    # CONFIG_SND_CS46XX is not set
    # CONFIG_SND_CS5530 is not set
    # CONFIG_SND_DARLA20 is not set
    # CONFIG_SND_GINA20 is not set
    # CONFIG_SND_LAYLA20 is not set
    # CONFIG_SND_DARLA24 is not set
    # CONFIG_SND_GINA24 is not set
    # CONFIG_SND_LAYLA24 is not set
    # CONFIG_SND_MONA is not set
    # CONFIG_SND_MIA is not set
    # CONFIG_SND_ECHO3G is not set
    # CONFIG_SND_INDIGO is not set
    # CONFIG_SND_INDIGOIO is not set
    # CONFIG_SND_INDIGODJ is not set
    # CONFIG_SND_EMU10K1 is not set
    # CONFIG_SND_EMU10K1X is not set
    # CONFIG_SND_ENS1370 is not set
    # CONFIG_SND_ENS1371 is not set
    # CONFIG_SND_ES1938 is not set
    # CONFIG_SND_ES1968 is not set
    # CONFIG_SND_FM801 is not set
    CONFIG_SND_HDA_INTEL=m
    # CONFIG_SND_HDA_HWDEP is not set
    CONFIG_SND_HDA_CODEC_REALTEK=y
    CONFIG_SND_HDA_CODEC_ANALOG=y
    CONFIG_SND_HDA_CODEC_SIGMATEL=y
    CONFIG_SND_HDA_CODEC_VIA=y
    CONFIG_SND_HDA_CODEC_ATIHDMI=y
    CONFIG_SND_HDA_CODEC_CONEXANT=y
    CONFIG_SND_HDA_CODEC_CMEDIA=y
    CONFIG_SND_HDA_CODEC_SI3054=y
    CONFIG_SND_HDA_GENERIC=y
    CONFIG_SND_HDA_POWER_SAVE=y
    CONFIG_SND_HDA_POWER_SAVE_DEFAULT=5
    # CONFIG_SND_HDSP is not set
    # CONFIG_SND_HDSPM is not set
    # CONFIG_SND_HIFIER is not set
    # CONFIG_SND_ICE1712 is not set
    # CONFIG_SND_ICE1724 is not set
    # CONFIG_SND_INTEL8X0 is not set
    # CONFIG_SND_INTEL8X0M is not set
    # CONFIG_SND_KORG1212 is not set
    # CONFIG_SND_MAESTRO3 is not set
    # CONFIG_SND_MIXART is not set
    # CONFIG_SND_NM256 is not set
    # CONFIG_SND_PCXHR is not set
    # CONFIG_SND_RIPTIDE is not set
    # CONFIG_SND_RME32 is not set
    # CONFIG_SND_RME96 is not set
    # CONFIG_SND_RME9652 is not set
    # CONFIG_SND_SONICVIBES is not set
    # CONFIG_SND_TRIDENT is not set
    # CONFIG_SND_VIA82XX is not set
    # CONFIG_SND_VIA82XX_MODEM is not set
    # CONFIG_SND_VIRTUOSO is not set
    # CONFIG_SND_VX222 is not set
    # CONFIG_SND_YMFPCI is not set

    #
    # USB devices
    #
    # CONFIG_SND_USB_AUDIO is not set
    # CONFIG_SND_USB_USX2Y is not set
    # CONFIG_SND_USB_CAIAQ is not set

    #
    # PCMCIA devices
    #
    # CONFIG_SND_VXPOCKET is not set
    # CONFIG_SND_PDAUDIOCF is not set

    #
    # System on Chip audio support
    #
    # CONFIG_SND_SOC is not set

    #
    # SoC Audio support for SuperH
    #

    #
    # ALSA SoC audio for Freescale SOCs
    #

    #
    # Open Sound System
    #
    # CONFIG_SOUND_PRIME is not set
    CONFIG_HID_SUPPORT=y
    CONFIG_HID=y
    # CONFIG_HID_DEBUG is not set
    # CONFIG_HIDRAW is not set

    #
    # USB Input Devices
    #
    CONFIG_USB_HID=m
    # CONFIG_USB_HIDINPUT_POWERBOOK is not set
    # CONFIG_HID_FF is not set
    CONFIG_USB_HIDDEV=y

    #
    # USB HID Boot Protocol drivers
    #
    # CONFIG_USB_KBD is not set
    # CONFIG_USB_MOUSE 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=m
    # CONFIG_USB_DEBUG is not set
    # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set

    #
    # Miscellaneous USB options
    #
    CONFIG_USB_DEVICEFS=y
    CONFIG_USB_DEVICE_CLASS=y
    # CONFIG_USB_DYNAMIC_MINORS is not set
    CONFIG_USB_SUSPEND=y
    # CONFIG_USB_PERSIST is not set
    # CONFIG_USB_OTG is not set

    #
    # USB Host Controller Drivers
    #
    CONFIG_USB_EHCI_HCD=m
    # CONFIG_USB_EHCI_ROOT_HUB_TT is not set
    # CONFIG_USB_EHCI_TT_NEWSCHED is not set
    # CONFIG_USB_ISP116X_HCD is not set
    CONFIG_USB_OHCI_HCD=m
    # 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=m
    CONFIG_USB_SL811_HCD=m
    # CONFIG_USB_SL811_CS is not set
    # CONFIG_USB_R8A66597_HCD is not set

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

    #
    # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
    #

    #
    # may also be needed; see USB_STORAGE Help for more information
    #
    CONFIG_USB_STORAGE=m
    # CONFIG_USB_STORAGE_DEBUG is not set
    CONFIG_USB_STORAGE_DATAFAB=y
    CONFIG_USB_STORAGE_FREECOM=y
    CONFIG_USB_STORAGE_ISD200=y
    CONFIG_USB_STORAGE_DPCM=y
    CONFIG_USB_STORAGE_USBAT=y
    CONFIG_USB_STORAGE_SDDR09=y
    CONFIG_USB_STORAGE_SDDR55=y
    CONFIG_USB_STORAGE_JUMPSHOT=y
    # CONFIG_USB_STORAGE_ALAUDA is not set
    # CONFIG_USB_STORAGE_KARMA is not set
    # CONFIG_USB_LIBUSUAL is not set

    #
    # USB Imaging devices
    #
    # CONFIG_USB_MDC800 is not set
    # CONFIG_USB_MICROTEK is not set
    # CONFIG_USB_MON is not set

    #
    # USB port drivers
    #
    CONFIG_USB_USS720=m
    CONFIG_USB_SERIAL=m
    CONFIG_USB_EZUSB=y
    CONFIG_USB_SERIAL_GENERIC=y
    CONFIG_USB_SERIAL_AIRCABLE=m
    CONFIG_USB_SERIAL_AIRPRIME=m
    CONFIG_USB_SERIAL_ARK3116=m
    CONFIG_USB_SERIAL_BELKIN=m
    # CONFIG_USB_SERIAL_CH341 is not set
    CONFIG_USB_SERIAL_WHITEHEAT=m
    CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
    CONFIG_USB_SERIAL_CP2101=m
    CONFIG_USB_SERIAL_CYPRESS_M8=m
    CONFIG_USB_SERIAL_EMPEG=m
    CONFIG_USB_SERIAL_FTDI_SIO=m
    CONFIG_USB_SERIAL_FUNSOFT=m
    CONFIG_USB_SERIAL_VISOR=m
    CONFIG_USB_SERIAL_IPAQ=m
    CONFIG_USB_SERIAL_IR=m
    CONFIG_USB_SERIAL_EDGEPORT=m
    CONFIG_USB_SERIAL_EDGEPORT_TI=m
    CONFIG_USB_SERIAL_GARMIN=m
    CONFIG_USB_SERIAL_IPW=m
    # CONFIG_USB_SERIAL_IUU is not set
    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 is not set
    # CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
    # CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
    # CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
    # 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 is not set
    # 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=m
    CONFIG_USB_SERIAL_MCT_U232=m
    CONFIG_USB_SERIAL_MOS7720=m
    CONFIG_USB_SERIAL_MOS7840=m
    CONFIG_USB_SERIAL_NAVMAN=m
    CONFIG_USB_SERIAL_PL2303=m
    # CONFIG_USB_SERIAL_OTI6858 is not set
    CONFIG_USB_SERIAL_HP4X=m
    CONFIG_USB_SERIAL_SAFE=m
    # CONFIG_USB_SERIAL_SAFE_PADDED is not set
    CONFIG_USB_SERIAL_SIERRAWIRELESS=m
    CONFIG_USB_SERIAL_TI=m
    CONFIG_USB_SERIAL_CYBERJACK=m
    CONFIG_USB_SERIAL_XIRCOM=m
    CONFIG_USB_SERIAL_OPTION=m
    CONFIG_USB_SERIAL_OMNINET=m
    CONFIG_USB_SERIAL_DEBUG=m

    #
    # USB Miscellaneous drivers
    #
    # CONFIG_USB_EMI62 is not set
    # CONFIG_USB_EMI26 is not set
    # CONFIG_USB_ADUTUX is not set
    # CONFIG_USB_AUERSWALD is not set
    # CONFIG_USB_RIO500 is not set
    # CONFIG_USB_LEGOTOWER is not set
    # CONFIG_USB_LCD is not set
    # CONFIG_USB_BERRY_CHARGE is not set
    # CONFIG_USB_LED is not set
    # CONFIG_USB_CYPRESS_CY7C63 is not set
    # CONFIG_USB_CYTHERM is not set
    # CONFIG_USB_PHIDGET is not set
    # CONFIG_USB_IDMOUSE is not set
    # CONFIG_USB_FTDI_ELAN is not set
    # CONFIG_USB_APPLEDISPLAY is not set
    # CONFIG_USB_SISUSBVGA is not set
    # CONFIG_USB_LD is not set
    # CONFIG_USB_TRANCEVIBRATOR is not set
    # CONFIG_USB_IOWARRIOR is not set
    # CONFIG_USB_TEST is not set
    # CONFIG_USB_GADGET is not set
    # CONFIG_MMC is not set
    # CONFIG_MEMSTICK is not set
    CONFIG_NEW_LEDS=y
    CONFIG_LEDS_CLASS=m

    #
    # LED drivers
    #
    # CONFIG_LEDS_CLEVO_MAIL is not set

    #
    # LED Triggers
    #
    # CONFIG_LEDS_TRIGGERS is not set
    # CONFIG_INFINIBAND is not set
    CONFIG_EDAC=y

    #
    # Reporting subsystems
    #
    # CONFIG_EDAC_DEBUG is not set
    CONFIG_EDAC_MM_EDAC=y
    # CONFIG_EDAC_E752X is not set
    # CONFIG_EDAC_I82975X is not set
    # CONFIG_EDAC_I3000 is not set
    # CONFIG_EDAC_I5000 is not set
    CONFIG_RTC_LIB=m
    CONFIG_RTC_CLASS=m

    #
    # Conflicting RTC option has been selected, check GEN_RTC and RTC
    #

    #
    # RTC interfaces
    #
    CONFIG_RTC_INTF_SYSFS=y
    # CONFIG_RTC_INTF_PROC is not set
    CONFIG_RTC_INTF_DEV=y
    # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
    # CONFIG_RTC_DRV_TEST is not set

    #
    # I2C RTC drivers
    #
    # CONFIG_RTC_DRV_DS1307 is not set
    # CONFIG_RTC_DRV_DS1374 is not set
    # CONFIG_RTC_DRV_DS1672 is not set
    # CONFIG_RTC_DRV_MAX6900 is not set
    # CONFIG_RTC_DRV_RS5C372 is not set
    # CONFIG_RTC_DRV_ISL1208 is not set
    # CONFIG_RTC_DRV_X1205 is not set
    # CONFIG_RTC_DRV_PCF8563 is not set
    # CONFIG_RTC_DRV_PCF8583 is not set
    # CONFIG_RTC_DRV_M41T80 is not set
    # CONFIG_RTC_DRV_S35390A is not set

    #
    # SPI RTC drivers
    #

    #
    # Platform RTC drivers
    #
    CONFIG_RTC_DRV_CMOS=m
    # CONFIG_RTC_DRV_DS1511 is not set
    # CONFIG_RTC_DRV_DS1553 is not set
    # CONFIG_RTC_DRV_DS1742 is not set
    # CONFIG_RTC_DRV_STK17TA8 is not set
    # CONFIG_RTC_DRV_M48T86 is not set
    # CONFIG_RTC_DRV_M48T59 is not set
    # CONFIG_RTC_DRV_V3020 is not set

    #
    # on-CPU RTC drivers
    #
    # CONFIG_DMADEVICES is not set
    # CONFIG_AUXDISPLAY is not set

    #
    # Userspace I/O
    #
    # CONFIG_UIO is not set

    #
    # Firmware Drivers
    #
    # CONFIG_EDD is not set
    # CONFIG_DELL_RBU is not set
    # CONFIG_DCDBAS is not set
    CONFIG_DMIID=y

    #
    # File systems
    #
    CONFIG_EXT2_FS=y
    CONFIG_EXT2_FS_XATTR=y
    CONFIG_EXT2_FS_POSIX_ACL=y
    CONFIG_EXT2_FS_SECURITY=y
    # CONFIG_EXT2_FS_XIP is not set
    CONFIG_EXT3_FS=y
    CONFIG_EXT3_FS_XATTR=y
    CONFIG_EXT3_FS_POSIX_ACL=y
    CONFIG_EXT3_FS_SECURITY=y
    # CONFIG_EXT4DEV_FS is not set
    CONFIG_JBD=y
    # CONFIG_JBD_DEBUG is not set
    CONFIG_FS_MBCACHE=y
    CONFIG_REISERFS_FS=y
    # CONFIG_REISERFS_CHECK is not set
    # CONFIG_REISERFS_PROC_INFO is not set
    CONFIG_REISERFS_FS_XATTR=y
    CONFIG_REISERFS_FS_POSIX_ACL=y
    CONFIG_REISERFS_FS_SECURITY=y
    CONFIG_JFS_FS=m
    CONFIG_JFS_POSIX_ACL=y
    # CONFIG_JFS_SECURITY is not set
    # CONFIG_JFS_DEBUG is not set
    # CONFIG_JFS_STATISTICS is not set
    CONFIG_FS_POSIX_ACL=y
    CONFIG_XFS_FS=m
    CONFIG_XFS_QUOTA=y
    CONFIG_XFS_POSIX_ACL=y
    CONFIG_XFS_RT=y
    # CONFIG_GFS2_FS is not set
    # CONFIG_OCFS2_FS is not set
    CONFIG_DNOTIFY=y
    CONFIG_INOTIFY=y
    CONFIG_INOTIFY_USER=y
    # CONFIG_QUOTA is not set
    CONFIG_QUOTACTL=y
    # CONFIG_AUTOFS_FS is not set
    # CONFIG_AUTOFS4_FS is not set
    CONFIG_FUSE_FS=m

    #
    # CD-ROM/DVD Filesystems
    #
    CONFIG_ISO9660_FS=y
    CONFIG_JOLIET=y
    CONFIG_ZISOFS=y
    CONFIG_UDF_FS=m
    CONFIG_UDF_NLS=y

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

    #
    # Pseudo filesystems
    #
    CONFIG_PROC_FS=y
    CONFIG_PROC_KCORE=y
    CONFIG_PROC_SYSCTL=y
    CONFIG_SYSFS=y
    CONFIG_TMPFS=y
    # CONFIG_TMPFS_POSIX_ACL is not set
    # CONFIG_HUGETLBFS is not set
    # CONFIG_HUGETLB_PAGE is not set
    # CONFIG_CONFIGFS_FS is not set

    #
    # Miscellaneous filesystems
    #
    # CONFIG_ADFS_FS is not set
    # CONFIG_AFFS_FS is not set
    # CONFIG_HFS_FS is not set
    # CONFIG_HFSPLUS_FS is not set
    # CONFIG_BEFS_FS is not set
    # CONFIG_BFS_FS is not set
    # CONFIG_EFS_FS is not set
    # CONFIG_JFFS2_FS is not set
    # CONFIG_CRAMFS is not set
    # CONFIG_VXFS_FS is not set
    # CONFIG_MINIX_FS is not set
    # CONFIG_HPFS_FS is not set
    # CONFIG_QNX4FS_FS is not set
    # CONFIG_ROMFS_FS is not set
    # CONFIG_SYSV_FS is not set
    # CONFIG_UFS_FS is not set
    CONFIG_NETWORK_FILESYSTEMS=y
    CONFIG_NFS_FS=m
    CONFIG_NFS_V3=y
    # CONFIG_NFS_V3_ACL is not set
    # CONFIG_NFS_V4 is not set
    # CONFIG_NFS_DIRECTIO is not set
    CONFIG_NFSD=m
    CONFIG_NFSD_V3=y
    # CONFIG_NFSD_V3_ACL is not set
    # CONFIG_NFSD_V4 is not set
    CONFIG_NFSD_TCP=y
    CONFIG_LOCKD=m
    CONFIG_LOCKD_V4=y
    CONFIG_EXPORTFS=m
    CONFIG_NFS_COMMON=y
    CONFIG_SUNRPC=m
    # CONFIG_SUNRPC_BIND34 is not set
    # CONFIG_RPCSEC_GSS_KRB5 is not set
    # CONFIG_RPCSEC_GSS_SPKM3 is not set
    CONFIG_SMB_FS=m
    CONFIG_SMB_NLS_DEFAULT=y
    CONFIG_SMB_NLS_REMOTE="cp437"
    CONFIG_CIFS=m
    # CONFIG_CIFS_STATS is not set
    # CONFIG_CIFS_WEAK_PW_HASH is not set
    # CONFIG_CIFS_XATTR is not set
    # CONFIG_CIFS_DEBUG2 is not set
    # CONFIG_CIFS_EXPERIMENTAL is not set
    # CONFIG_NCP_FS is not set
    # CONFIG_CODA_FS is not set
    # CONFIG_AFS_FS is not set

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

    #
    # Kernel hacking
    #
    CONFIG_TRACE_IRQFLAGS_SUPPORT=y
    CONFIG_PRINTK_TIME=y
    CONFIG_ENABLE_WARN_DEPRECATED=y
    CONFIG_ENABLE_MUST_CHECK=y
    CONFIG_MAGIC_SYSRQ=y
    CONFIG_UNUSED_SYMBOLS=y
    CONFIG_DEBUG_FS=y
    # CONFIG_HEADERS_CHECK is not set
    CONFIG_DEBUG_KERNEL=y
    # CONFIG_DEBUG_SHIRQ is not set
    CONFIG_DETECT_SOFTLOCKUP=y
    # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
    CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
    # CONFIG_SCHED_DEBUG is not set
    # CONFIG_SCHEDSTATS is not set
    CONFIG_TIMER_STATS=y
    CONFIG_DEBUG_SLAB=y
    CONFIG_DEBUG_SLAB_LEAK=y
    CONFIG_DEBUG_PREEMPT=y
    CONFIG_DEBUG_RT_MUTEXES=y
    CONFIG_DEBUG_PI_LIST=y
    # CONFIG_RT_MUTEX_TESTER is not set
    CONFIG_DEBUG_SPINLOCK=y
    CONFIG_DEBUG_MUTEXES=y
    CONFIG_DEBUG_LOCK_ALLOC=y
    CONFIG_PROVE_LOCKING=y
    CONFIG_LOCKDEP=y
    # CONFIG_LOCK_STAT is not set
    # CONFIG_DEBUG_LOCKDEP is not set
    CONFIG_TRACE_IRQFLAGS=y
    CONFIG_DEBUG_SPINLOCK_SLEEP=y
    # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
    CONFIG_STACKTRACE=y
    # CONFIG_DEBUG_KOBJECT is not set
    CONFIG_DEBUG_BUGVERBOSE=y
    CONFIG_DEBUG_INFO=y
    CONFIG_DEBUG_VM=y
    CONFIG_DEBUG_LIST=y
    CONFIG_DEBUG_SG=y
    CONFIG_FRAME_POINTER=y
    # CONFIG_BOOT_PRINTK_DELAY is not set
    # CONFIG_RCU_TORTURE_TEST is not set
    # CONFIG_BACKTRACE_SELF_TEST is not set
    # CONFIG_FAULT_INJECTION is not set
    # CONFIG_LATENCYTOP is not set
    CONFIG_HAVE_FTRACE=y
    CONFIG_TRACING=y
    # CONFIG_FTRACE is not set
    # CONFIG_IRQSOFF_TRACER is not set
    # CONFIG_PREEMPT_TRACER is not set
    # CONFIG_SYSPROF_TRACER is not set
    # CONFIG_SCHED_TRACER is not set
    # CONFIG_CONTEXT_SWITCH_TRACER is not set
    # CONFIG_FTRACE_STARTUP_TEST is not set
    # CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
    # CONFIG_SAMPLES is not set
    # CONFIG_KGDB is not set
    CONFIG_HAVE_ARCH_KGDB=y
    CONFIG_NONPROMISC_DEVMEM=y
    CONFIG_EARLY_PRINTK=y
    CONFIG_DEBUG_STACKOVERFLOW=y
    # CONFIG_DEBUG_STACK_USAGE is not set
    CONFIG_DEBUG_PAGEALLOC=y
    CONFIG_DEBUG_PER_CPU_MAPS=y
    # CONFIG_X86_PTDUMP is not set
    CONFIG_DEBUG_RODATA=y
    CONFIG_DIRECT_GBPAGES=y
    CONFIG_DEBUG_RODATA_TEST=y
    # CONFIG_DEBUG_NX_TEST is not set
    CONFIG_X86_MPPARSE=y
    # CONFIG_IOMMU_DEBUG is not set
    CONFIG_MMIOTRACE_HOOKS=y
    CONFIG_MMIOTRACE=y
    CONFIG_MMIOTRACE_TEST=m
    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=y
    # CONFIG_IO_DELAY_0XED is not set
    # CONFIG_IO_DELAY_UDELAY is not set
    # CONFIG_IO_DELAY_NONE is not set
    CONFIG_DEFAULT_IO_DELAY_TYPE=0
    # CONFIG_DEBUG_BOOT_PARAMS is not set
    CONFIG_CPA_DEBUG=y
    CONFIG_OPTIMIZE_INLINING=y

    #
    # Security options
    #
    # CONFIG_KEYS is not set
    CONFIG_SECURITY=y
    # CONFIG_SECURITY_NETWORK is not set
    CONFIG_SECURITY_CAPABILITIES=y
    # CONFIG_SECURITY_FILE_CAPABILITIES is not set
    CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
    CONFIG_CRYPTO=y
    CONFIG_CRYPTO_ALGAPI=y
    CONFIG_CRYPTO_AEAD=y
    CONFIG_CRYPTO_BLKCIPHER=y
    CONFIG_CRYPTO_SEQIV=m
    CONFIG_CRYPTO_HASH=y
    CONFIG_CRYPTO_MANAGER=y
    CONFIG_CRYPTO_HMAC=y
    CONFIG_CRYPTO_XCBC=m
    # CONFIG_CRYPTO_NULL is not set
    CONFIG_CRYPTO_MD4=m
    CONFIG_CRYPTO_MD5=y
    CONFIG_CRYPTO_SHA1=y
    CONFIG_CRYPTO_SHA256=m
    CONFIG_CRYPTO_SHA512=m
    CONFIG_CRYPTO_WP512=m
    CONFIG_CRYPTO_TGR192=m
    CONFIG_CRYPTO_GF128MUL=m
    CONFIG_CRYPTO_ECB=m
    CONFIG_CRYPTO_CBC=y
    CONFIG_CRYPTO_PCBC=m
    # CONFIG_CRYPTO_LRW is not set
    # CONFIG_CRYPTO_XTS is not set
    CONFIG_CRYPTO_CTR=m
    CONFIG_CRYPTO_GCM=m
    CONFIG_CRYPTO_CCM=m
    # CONFIG_CRYPTO_CRYPTD is not set
    CONFIG_CRYPTO_DES=y
    CONFIG_CRYPTO_FCRYPT=m
    CONFIG_CRYPTO_BLOWFISH=m
    CONFIG_CRYPTO_TWOFISH=m
    CONFIG_CRYPTO_TWOFISH_COMMON=m
    CONFIG_CRYPTO_TWOFISH_X86_64=m
    CONFIG_CRYPTO_SERPENT=m
    CONFIG_CRYPTO_AES=y
    CONFIG_CRYPTO_AES_X86_64=y
    CONFIG_CRYPTO_CAST5=m
    CONFIG_CRYPTO_CAST6=m
    CONFIG_CRYPTO_TEA=m
    CONFIG_CRYPTO_ARC4=m
    CONFIG_CRYPTO_KHAZAD=m
    CONFIG_CRYPTO_ANUBIS=m
    CONFIG_CRYPTO_SEED=m
    # CONFIG_CRYPTO_SALSA20 is not set
    # CONFIG_CRYPTO_SALSA20_X86_64 is not set
    CONFIG_CRYPTO_DEFLATE=y
    CONFIG_CRYPTO_MICHAEL_MIC=m
    CONFIG_CRYPTO_CRC32C=m
    CONFIG_CRYPTO_CAMELLIA=m
    # CONFIG_CRYPTO_TEST is not set
    CONFIG_CRYPTO_AUTHENC=y
    CONFIG_CRYPTO_LZO=m
    CONFIG_CRYPTO_HW=y
    # CONFIG_CRYPTO_DEV_HIFN_795X is not set
    CONFIG_HAVE_KVM=y
    CONFIG_VIRTUALIZATION=y
    # CONFIG_KVM is not set
    # CONFIG_VIRTIO_PCI is not set
    # CONFIG_VIRTIO_BALLOON is not set

    #
    # Library routines
    #
    CONFIG_BITREVERSE=y
    CONFIG_CRC_CCITT=m
    # CONFIG_CRC16 is not set
    # CONFIG_CRC_ITU_T is not set
    CONFIG_CRC32=y
    # CONFIG_CRC7 is not set
    CONFIG_LIBCRC32C=m
    CONFIG_ZLIB_INFLATE=y
    CONFIG_ZLIB_DEFLATE=y
    CONFIG_LZO_COMPRESS=m
    CONFIG_LZO_DECOMPRESS=m
    CONFIG_TEXTSEARCH=y
    CONFIG_TEXTSEARCH_KMP=m
    CONFIG_TEXTSEARCH_BM=m
    CONFIG_TEXTSEARCH_FSM=m
    CONFIG_PLIST=y
    CONFIG_HAS_IOMEM=y
    CONFIG_HAS_IOPORT=y
    CONFIG_HAS_DMA=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/

  18. Re: [PATCH] Check for breakpoint in text_poke to eliminate bug_on

    Can you test this new version ? The check was buggy when it fell on a
    code boundary : the addr - 1 wan't always a valid address.



    Check for breakpoint in text_poke to eliminate bug_on

    It's ok to modify an instruction non-atomically (multiple memory accesses to a
    large and/or non aligned instruction) *if and only if* we have inserted a
    breakpoint at the beginning of the instruction.

    Signed-off-by: Mathieu Desnoyers
    ---
    arch/x86/kernel/alternative.c | 14 ++++++++++----
    1 file changed, 10 insertions(+), 4 deletions(-)

    Index: linux-2.6-lttng/arch/x86/kernel/alternative.c
    ================================================== =================
    --- linux-2.6-lttng.orig/arch/x86/kernel/alternative.c 2008-04-20 15:40:30.000000000 -0400
    +++ linux-2.6-lttng/arch/x86/kernel/alternative.c 2008-04-20 15:42:08.000000000 -0400
    @@ -15,6 +15,7 @@
    #include

    #define MAX_PATCH_LEN (255-1)
    +#define BREAKPOINT_INSTRUCTION 0xcc

    #ifdef CONFIG_HOTPLUG_CPU
    static int smp_alt_once;
    @@ -505,6 +506,11 @@ void *text_poke_early(void *addr, const
    * It means the size must be writable atomically and the address must be aligned
    * in a way that permits an atomic write. It also makes sure we fit on a single
    * page.
    + *
    + * It's ok to modify an instruction non-atomically (multiple memory accesses to
    + * a large and/or non aligned instruction) *if and only if* we have inserted a
    + * breakpoint at the beginning of the instruction and we are modifying the rest
    + * of the instruction.
    */
    void *__kprobes text_poke(void *addr, const void *opcode, size_t len)
    {
    @@ -512,11 +518,9 @@ void *__kprobes text_poke(void *addr, co
    char *vaddr;
    int nr_pages = 2;
    struct page *pages[2];
    + int i;

    - BUG_ON(len > sizeof(long));
    - BUG_ON((((long)addr + len - 1) & ~(sizeof(long) - 1))
    - - ((long)addr & ~(sizeof(long) - 1)));
    - if (is_vmalloc_addr(addr)) {
    + if (!core_kernel_text((unsigned long)addr)) {
    pages[0] = vmalloc_to_page(addr);
    pages[1] = vmalloc_to_page(addr + PAGE_SIZE);
    } else {
    @@ -535,5 +539,7 @@ void *__kprobes text_poke(void *addr, co
    sync_core();
    /* Could also do a CLFLUSH here to speed up CPU recovery; but
    that causes hangs on some VIA CPUs. */
    + for (i = 0; i < len; i++)
    + BUG_ON(((char *)addr)[i] != ((char *)opcode)[i]);
    return addr;
    }

    --
    Mathieu Desnoyers
    Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
    OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
    --
    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/

  19. Re: [PATCH] Check for breakpoint in text_poke to eliminate bug_on

    On Sun, 20 Apr 2008 15:44:40 -0400
    Mathieu Desnoyers wrote:

    > Can you test this new version ? The check was buggy when it fell on a
    > code boundary : the addr - 1 wan't always a valid address.
    >


    Sorry, still the same. Btw. I had to apply your patch by hand on top of
    your previous patch, and it ended up as just

    --- a/arch/x86/kernel/alternative.c
    +++ b/arch/x86/kernel/alternative.c
    @@ -520,11 +520,6 @@ void *__kprobes text_poke(void *addr, const void *opcode, size_t len)
    struct page *pages[2];
    int i;

    - if (*((uint8_t *)addr - 1) != BREAKPOINT_INSTRUCTION) {
    - BUG_ON(len > sizeof(long));
    - BUG_ON((((long)addr + len - 1) & ~(sizeof(long) - 1))
    - - ((long)addr & ~(sizeof(long) - 1)));
    - }
    if (!core_kernel_text((unsigned long)addr)) {

    Now I took a log of echo 0, echo 1 cycle with 2.6.24-gentoo-r1-trace
    kernel:
    [ 203.448534] CPU 1 is now offline
    [ 203.448975] SMP alternatives: switching to UP code
    [ 217.888298] SMP alternatives: switching to SMP code
    [ 217.889285] Booting processor 1/2 APIC 0x1
    [ 217.901404] Initializing CPU#1
    [ 217.982081] Calibrating delay using timer specific routine.. 3991.35 BogoMIPS (lpj=6650167)
    [ 217.982088] CPU: L1 I cache: 32K, L1 D cache: 32K
    [ 217.982089] CPU: L2 cache: 4096K
    [ 217.982091] CPU: Physical Processor ID: 0
    [ 217.982092] CPU: Processor Core ID: 1
    [ 217.982593] Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz stepping 0a
    [ 217.982644] Switched to high resolution mode on CPU 1

    And the failing log from the latest try is:

    [ 87.064970] CPU 1 is now offline
    [ 87.065311] lockdep: fixing up alternatives.
    [ 87.065694] SMP alternatives: switching to UP code
    [ 97.192213] lockdep: fixing up alternatives.
    [ 97.192532] SMP alternatives: switching to SMP code
    [ 97.203495] Booting processor 1/1 ip 6000
    and it hangs and reboots.

    Does it make sense to bisect on sched-devel/latest?
    I think I could try that after a sleep&work cycle.
    Luckily this bug is easy to reproduce.


    Thanks.

    --
    Pekka Paalanen
    http://www.iki.fi/pq/
    --
    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/

  20. Re: [PATCH] Check for breakpoint in text_poke to eliminate bug_on

    * Pekka Paalanen (pq@iki.fi) wrote:
    > On Sun, 20 Apr 2008 15:44:40 -0400
    > Mathieu Desnoyers wrote:
    >
    > > Can you test this new version ? The check was buggy when it fell on a
    > > code boundary : the addr - 1 wan't always a valid address.
    > >

    >
    > Sorry, still the same. Btw. I had to apply your patch by hand on top of
    > your previous patch, and it ended up as just
    >
    > --- a/arch/x86/kernel/alternative.c
    > +++ b/arch/x86/kernel/alternative.c
    > @@ -520,11 +520,6 @@ void *__kprobes text_poke(void *addr, const void *opcode, size_t len)
    > struct page *pages[2];
    > int i;
    >
    > - if (*((uint8_t *)addr - 1) != BREAKPOINT_INSTRUCTION) {
    > - BUG_ON(len > sizeof(long));
    > - BUG_ON((((long)addr + len - 1) & ~(sizeof(long) - 1))
    > - - ((long)addr & ~(sizeof(long) - 1)));
    > - }
    > if (!core_kernel_text((unsigned long)addr)) {
    >
    > Now I took a log of echo 0, echo 1 cycle with 2.6.24-gentoo-r1-trace
    > kernel:
    > [ 203.448534] CPU 1 is now offline
    > [ 203.448975] SMP alternatives: switching to UP code
    > [ 217.888298] SMP alternatives: switching to SMP code
    > [ 217.889285] Booting processor 1/2 APIC 0x1
    > [ 217.901404] Initializing CPU#1
    > [ 217.982081] Calibrating delay using timer specific routine.. 3991.35 BogoMIPS (lpj=6650167)
    > [ 217.982088] CPU: L1 I cache: 32K, L1 D cache: 32K
    > [ 217.982089] CPU: L2 cache: 4096K
    > [ 217.982091] CPU: Physical Processor ID: 0
    > [ 217.982092] CPU: Processor Core ID: 1
    > [ 217.982593] Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz stepping 0a
    > [ 217.982644] Switched to high resolution mode on CPU 1
    >
    > And the failing log from the latest try is:
    >
    > [ 87.064970] CPU 1 is now offline
    > [ 87.065311] lockdep: fixing up alternatives.
    > [ 87.065694] SMP alternatives: switching to UP code
    > [ 97.192213] lockdep: fixing up alternatives.
    > [ 97.192532] SMP alternatives: switching to SMP code
    > [ 97.203495] Booting processor 1/1 ip 6000
    > and it hangs and reboots.
    >
    > Does it make sense to bisect on sched-devel/latest?
    > I think I could try that after a sleep&work cycle.
    > Luckily this bug is easy to reproduce.
    >


    Yup. I was able to successfully cycle cpu hotplug with 2.6.25 mainline
    with the equivalent of the text_poke patches I sent to you, therefore I
    guess it rules out text_poke as a cause of your crash. A bisection of
    sched-devel/latest seems appropriate.

    Mathieu

    >
    > Thanks.
    >
    > --
    > Pekka Paalanen
    > http://www.iki.fi/pq/


    --
    Mathieu Desnoyers
    Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
    OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
    --
    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/

+ Reply to Thread
Page 1 of 2 1 2 LastLast