15 Aug, 2010

2 commits

  • Following sample Kconfig generated a segfault:

    config FOO
    bool
    select PERF_EVENTS if HAVE_HW_BREAKPOINT

    config PERF_EVENTS
    bool

    config HAVE_HW_BREAKPOINT
    bool
    depends on PERF_EVENTS

    Fix by reverting back to a valid property if there was no
    property on the stack of symbols.

    The above pattern were seen in sh Kconfig.
    A fix for the Kconfig file has been sent to the sh folks.

    Signed-off-by: Sam Ravnborg
    Signed-off-by: Michal Marek

    Sam Ravnborg
     
  • savedefconfig failed to save the correct minimal config
    when it encountered a choice marked optional.

    Consider following minimal configuration:
    $cat Kconfig
    choice
    prompt "choice"
    optional

    config A
    bool "a"

    config B
    bool "b"

    endchoice

    $cat .config | grep -v ^#
    CONFIG_A=y

    $conf --savedefconfig=defconfig Kconfig

    would before this fix result in an empty file, because
    kconfig would assume that CONFIG_A=y is a default value.
    But because the choice is optional the default is that
    both A and B are =n.

    Fix so we handle optional choices correct.

    Signed-off-by: Sam Ravnborg
    Signed-off-by: Michal Marek

    Sam Ravnborg
     

13 Aug, 2010

3 commits


12 Aug, 2010

2 commits

  • If a minimal config did not specify the value
    of all choice values, the resulting configuration
    could have wrong values.

    Consider following example:
    config M
    def_bool y
    option modules
    choice
    prompt "choice list"
    config A
    tristate "a"
    config B
    tristate "b"
    endchoice

    With a defconfig like this:
    CONFIG_M=y
    CONFIG_A=y

    The resulting configuration would have

    CONFIG_A=m

    which was unexpected.

    The problem was not not all choice values were set and thus
    kconfig calculated a wrong value.

    The fix is to set all choice values when we
    read a defconfig files.

    conf_set_all_new_symbols() is refactored such that
    random choice values are now handled by a dedicated function.
    And new choice values are set by set_all_choice_values().

    This was not the minimal fix, but the fix that resulted
    in the most readable code.

    Signed-off-by: Sam Ravnborg
    Reported-by: Arve Hjønnevåg
    Tested-by: Arve Hjønnevåg
    Signed-off-by: Michal Marek

    Sam Ravnborg
     
  • savedefconfig failed to save choice symbols equal to 'y'
    for tristate choices.
    This resulted in this value being lost.

    In particular is fixes an issue where

    make ARCH=avr32 atngw100_defconfig
    make ARCH=avr32 savedefconfig
    cp defconfig arch/avr32/configs/atngw100_defconfig
    make ARCH=avr32 atngw100_defconfig
    diff -u .config .config.old

    failed to produce an identical .config.

    Signed-off-by: Sam Ravnborg
    Signed-off-by: Michal Marek

    Sam Ravnborg
     

04 Aug, 2010

1 commit


03 Aug, 2010

9 commits

  • savedefconfig will save a minimal config to a file
    named "defconfig".

    The config symbols are saved in the same order as
    they appear in the menu structure so it should
    be possible to map them to the relevant menus
    if desired.

    The implementation was tested against several minimal
    configs for arm which was created using brute-force.

    There was one regression related to default numbers
    which had their valid range further limited by another symbol.

    Sample:

    config FOO
    int "foo"
    default 4

    config BAR
    int "bar"
    range 0 FOO

    If FOO is set to 3 then BAR cannot take a value higher than 3.
    But the current implementation will set BAR equal to 4.

    This is seldomly used and the final configuration is OK,
    and the fix was non-trivial.
    So it was documented in the code and left as is.

    Signed-off-by: Sam Ravnborg
    Acked-by: Uwe Kleine-König
    Signed-off-by: Michal Marek

    Sam Ravnborg
     
  • Add a a few local functions to avoid some code duplication
    No functional changes.

    Signed-off-by: Sam Ravnborg
    Signed-off-by: Michal Marek

    Sam Ravnborg
     
  • Move logic to determine default for a choice to
    a separate function.
    No functional changes.

    Signed-off-by: Sam Ravnborg
    Signed-off-by: Michal Marek

    Sam Ravnborg
     
  • alldefconfig create a configuration with all values set
    to their default value (form the Kconfig files).

    This may be useful when we try to use more sensible default
    values and may also be used in combination with
    the minimal defconfigs.

    Signed-off-by: Sam Ravnborg
    Signed-off-by: Michal Marek

    Sam Ravnborg
     
  • Consider following kconfig file:

    config TEST1
    bool "test 1"
    depends on TEST2

    config TEST2
    bool "test 2"
    depends on TEST1

    Previously kconfig would report:

    foo:6:error: found recursive dependency: TEST2 -> TEST1 -> TEST2

    With the following patch kconfig reports:
    foo:5:error: recursive dependency detected!
    foo:5: symbol TEST2 depends on TEST1
    foo:1: symbol TEST1 depends on TEST2

    Note that we now report where the offending symbols are defined.
    This can be a great help for complex situations involving
    several files.

    Patch is originally from Roman Zippel with a few adjustments by Sam.

    Signed-off-by: Sam Ravnborg
    Cc: Roman Zippel
    Signed-off-by: Michal Marek

    Roman Zippel
     
  • When we add a new config symbol save the file/line
    so we later can refer to their location.

    The information is saved as a property to a config symbol
    because we may have multiple definitions of the same symbol.

    This has the side-effect that a symbol always has
    at least one property.

    Signed-off-by: Sam Ravnborg
    Cc: Roman Zippel
    Signed-off-by: Michal Marek

    Sam Ravnborg
     
  • Rename to a name that better match the other kconfig targets.

    listnewconfig shall read as:

    - list new options compared to current configuration

    New options are now written to stdout so one can redirect the output.

    Do not exit with an error code if there is new options.

    These are feature changes compared to the original
    nonint_oldconfig - but as this feature has not yet been in a
    released kernel it should not matter.

    It is still possible to do:

    make listnewconfig
    lookup new config options in Kconfig*
    edit .config

    Signed-off-by: Sam Ravnborg
    Cc: Aristeu Rozanski
    Acked-by: Aristeu Rozanski
    Signed-off-by: Michal Marek

    Sam Ravnborg
     
  • Rename target to something that fall more in line
    with the other kconfig targets.

    oldnoconfig shall read as:

    - read the old configuration and set all new options to no

    Signed-off-by: Sam Ravnborg
    Cc: Aristeu Rozanski
    Signed-off-by: Michal Marek

    Sam Ravnborg
     
  • The list of options supported by conf is growing
    and their abbreviation did not resemble anything usefull.

    So drop the single letter options in favour of long options.

    The long options are named equal to what we know from
    the make target.
    The internal implmentation was changed to match this,
    resulting in much more readable code.

    Support for short options is dropped - no one is supposed
    to call this program direct anyway.

    Signed-off-by: Sam Ravnborg
    Signed-off-by: Michal Marek

    Sam Ravnborg
     

02 Aug, 2010

2 commits


31 Jul, 2010

13 commits

  • * master.kernel.org:/home/rmk/linux-2.6-arm:
    cyber2000fb: fix console in truecolor modes
    cyber2000fb: fix machine hang on module load
    SA1111: Eliminate use after free
    ARM: Fix Versatile/Realview/VExpress MMC card detection sense
    ARM: 6279/1: highmem: fix SMP preemption bug in kmap_high_l1_vipt
    ARM: Add barriers to io{read,write}{8,16,32} accessors as well
    ARM: 6273/1: Add barriers to the I/O accessors if ARM_DMA_MEM_BUFFERABLE
    ARM: 6272/1: Convert L2x0 to use the IO relaxed operations
    ARM: 6271/1: Introduce *_relaxed() I/O accessors
    ARM: 6275/1: ux500: don't use writeb() in uncompress.h
    ARM: 6270/1: clean files in arch/arm/boot/compressed/
    ARM: Fix csum_partial_copy_from_user()

    Linus Torvalds
     
  • * 'bugfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6:
    NFS: Ensure that writepage respects the nonblock flag
    NFS: kswapd must not block in nfs_release_page
    nfs: include space for the NUL in root path

    Linus Torvalds
     
  • * 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
    drm/edid: Fix the HDTV hack sync adjustment
    drm/radeon/kms: fix radeon mid power profile reporting

    Linus Torvalds
     
  • Debian's ia64 autobuilders have been seeing kernel freeze or reboot
    when running the gdb testsuite (Debian bug 588574): dannf bisected to
    2.6.32 62eede62dafb4a6633eae7ffbeb34c60dba5e7b1 "mm: ZERO_PAGE without
    PTE_SPECIAL"; and reproduced it with gdb's gcore on a simple target.

    I'd missed updating the gate_vma handling in __get_user_pages(): that
    happens to use vm_normal_page() (nowadays failing on the zero page),
    yet reported success even when it failed to get a page - boom when
    access_process_vm() tried to copy that to its intermediate buffer.

    Fix this, resisting cleanups: in particular, leave it for now reporting
    success when not asked to get any pages - very probably safe to change,
    but let's not risk it without testing exposure.

    Why did ia64 crash with 16kB pages, but succeed with 64kB pages?
    Because setup_gate() pads each 64kB of its gate area with zero pages.

    Reported-by: Andreas Barth
    Bisected-by: dann frazier
    Signed-off-by: Hugh Dickins
    Tested-by: dann frazier
    Cc: stable@kernel.org
    Signed-off-by: Linus Torvalds

    Hugh Dickins
     
  • Remove the __exit mark from cifs_exit_dns_resolver() as it's called by the
    module init routine in case of error, and so may have been discarded during
    linkage.

    Signed-off-by: David Howells
    Acked-by: Jeff Layton
    Signed-off-by: Linus Torvalds

    David Howells
     
  • Return value was not set to 0 in setcolreg() with truecolor modes. This causes
    fb_set_cmap() to abort after first color, resulting in blank palette - and
    blank console in 24bpp and 32bpp modes.

    Signed-off-by: Ondrej Zary
    Signed-off-by: Russell King

    Ondrej Zary
     
  • I was testing two CyberPro 2000 based PCI cards on x86 and the machine always
    hanged completely when the cyber2000fb module was loaded. It seems that the
    card hangs when some registers are accessed too quickly after writing RAMDAC
    control register. With this patch, both card work.

    Add delay after RAMDAC control register write to prevent hangs on module load.

    Signed-off-by: Ondrej Zary
    Signed-off-by: Russell King

    Ondrej Zary
     
  • __sa1111_remove always frees its argument, so the subsequent reference to
    sachip->saved_state represents a use after free. __sa1111_remove does not
    appear to use the saved_state field, so the patch simply frees it first.

    A simplified version of the semantic patch that finds this problem is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @@
    expression E,E2;
    @@

    __sa1111_remove(E)
    ...
    (
    E = E2
    |
    * E
    )
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: Russell King

    Julia Lawall
     
  • The MMC card detection sense has become really confused with negations
    at various levels, leading to some platforms not detecting inserted
    cards. Fix this by converting everything to positive logic throughout,
    thereby getting rid of these negations.

    Signed-off-by: Russell King

    Russell King
     
  • smp_processor_id() must not be called from a preemptible context (this
    is checked by CONFIG_DEBUG_PREEMPT). kmap_high_l1_vipt() was doing so.
    This lead to a problem where the wrong per_cpu kmap_high_l1_vipt_depth
    could be incremented, causing a BUG_ON(*depth

    Signed-off-by: Gary King
    Acked-by: Nicolas Pitre
    Signed-off-by: Russell King

    Gary King
     
  • Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • See https://bugzilla.kernel.org/show_bug.cgi?id=16056

    If other processes are blocked waiting for kswapd to free up some memory so
    that they can make progress, then we cannot allow kswapd to block on those
    processes.

    Signed-off-by: Trond Myklebust
    Cc: stable@kernel.org

    Trond Myklebust
     
  • In root_nfs_name() it does the following:

    if (strlen(buf) + strlen(cp) > NFS_MAXPATHLEN) {
    printk(KERN_ERR "Root-NFS: Pathname for remote directory too long.\n");
    return -1;
    }
    sprintf(nfs_export_path, buf, cp);

    In the original code if (strlen(buf) + strlen(cp) == NFS_MAXPATHLEN)
    then the sprintf() would lead to an overflow. Generally the rest of the
    code assumes that the path can have NFS_MAXPATHLEN (1024) characters and
    a NUL terminator so the fix is to add space to the nfs_export_path[]
    buffer.

    Signed-off-by: Dan Carpenter
    Signed-off-by: Trond Myklebust

    Dan Carpenter
     

30 Jul, 2010

6 commits

  • * 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6:
    [S390] etr: fix clock synchronization race
    [S390] Fix IRQ tracing in case of PER

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog:
    watchdog: update MAINTAINERS entry

    Linus Torvalds
     
  • * 'fix/hda' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
    ALSA: hda - Add a PC-beep workaround for ASUS P5-V
    ALSA: hda - Assume PC-beep as default for Realtek
    ALSA: hda - Don't register beep input device when no beep is available
    ALSA: hda - Fix pin-detection of Nvidia HDMI

    Linus Torvalds
     
  • Fix __task_cred()'s lockdep check by removing the following validation
    condition:

    lockdep_tasklist_lock_is_held()

    as commit_creds() does not take the tasklist_lock, and nor do most of the
    functions that call it, so this check is pointless and it can prevent
    detection of the RCU lock not being held if the tasklist_lock is held.

    Instead, add the following validation condition:

    task->exit_state >= 0

    to permit the access if the target task is dead and therefore unable to change
    its own credentials.

    Fix __task_cred()'s comment to:

    (1) discard the bit that says that the caller must prevent the target task
    from being deleted. That shouldn't need saying.

    (2) Add a comment indicating the result of __task_cred() should not be passed
    directly to get_cred(), but rather than get_task_cred() should be used
    instead.

    Also put a note into the documentation to enforce this point there too.

    Signed-off-by: David Howells
    Acked-by: Jiri Olsa
    Cc: Paul E. McKenney
    Signed-off-by: Linus Torvalds

    David Howells
     
  • It's possible for get_task_cred() as it currently stands to 'corrupt' a set of
    credentials by incrementing their usage count after their replacement by the
    task being accessed.

    What happens is that get_task_cred() can race with commit_creds():

    TASK_1 TASK_2 RCU_CLEANER
    -->get_task_cred(TASK_2)
    rcu_read_lock()
    __cred = __task_cred(TASK_2)
    -->commit_creds()
    old_cred = TASK_2->real_cred
    TASK_2->real_cred = ...
    put_cred(old_cred)
    call_rcu(old_cred)
    [__cred->usage == 0]
    get_cred(__cred)
    [__cred->usage == 1]
    rcu_read_unlock()
    -->put_cred_rcu()
    [__cred->usage == 1]
    panic()

    However, since a tasks credentials are generally not changed very often, we can
    reasonably make use of a loop involving reading the creds pointer and using
    atomic_inc_not_zero() to attempt to increment it if it hasn't already hit zero.

    If successful, we can safely return the credentials in the knowledge that, even
    if the task we're accessing has released them, they haven't gone to the RCU
    cleanup code.

    We then change task_state() in procfs to use get_task_cred() rather than
    calling get_cred() on the result of __task_cred(), as that suffers from the
    same problem.

    Without this change, a BUG_ON in __put_cred() or in put_cred_rcu() can be
    tripped when it is noticed that the usage count is not zero as it ought to be,
    for example:

    kernel BUG at kernel/cred.c:168!
    invalid opcode: 0000 [#1] SMP
    last sysfs file: /sys/kernel/mm/ksm/run
    CPU 0
    Pid: 2436, comm: master Not tainted 2.6.33.3-85.fc13.x86_64 #1 0HR330/OptiPlex
    745
    RIP: 0010:[] [] __put_cred+0xc/0x45
    RSP: 0018:ffff88019e7e9eb8 EFLAGS: 00010202
    RAX: 0000000000000001 RBX: ffff880161514480 RCX: 00000000ffffffff
    RDX: 00000000ffffffff RSI: ffff880140c690c0 RDI: ffff880140c690c0
    RBP: ffff88019e7e9eb8 R08: 00000000000000d0 R09: 0000000000000000
    R10: 0000000000000001 R11: 0000000000000040 R12: ffff880140c690c0
    R13: ffff88019e77aea0 R14: 00007fff336b0a5c R15: 0000000000000001
    FS: 00007f12f50d97c0(0000) GS:ffff880007400000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f8f461bc000 CR3: 00000001b26ce000 CR4: 00000000000006f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process master (pid: 2436, threadinfo ffff88019e7e8000, task ffff88019e77aea0)
    Stack:
    ffff88019e7e9ec8 ffffffff810698cd ffff88019e7e9ef8 ffffffff81069b45
    ffff880161514180 ffff880161514480 ffff880161514180 0000000000000000
    ffff88019e7e9f28 ffffffff8106aace 0000000000000001 0000000000000246
    Call Trace:
    [] put_cred+0x13/0x15
    [] commit_creds+0x16b/0x175
    [] set_current_groups+0x47/0x4e
    [] sys_setgroups+0xf6/0x105
    [] system_call_fastpath+0x16/0x1b
    Code: 48 8d 71 ff e8 7e 4e 15 00 85 c0 78 0b 8b 75 ec 48 89 df e8 ef 4a 15 00
    48 83 c4 18 5b c9 c3 55 8b 07 8b 07 48 89 e5 85 c0 74 04 0b eb fe 65 48 8b
    04 25 00 cc 00 00 48 3b b8 58 04 00 00 75
    RIP [] __put_cred+0xc/0x45
    RSP
    ---[ end trace df391256a100ebdd ]---

    Signed-off-by: David Howells
    Acked-by: Jiri Olsa
    Signed-off-by: Linus Torvalds

    David Howells
     
  • Add Mailing-list and website to watchdog MAINTAINERS entry.

    Signed-off-by: Wim Van Sebroeck

    Wim Van Sebroeck
     

29 Jul, 2010

2 commits

  • There seems to be a kconfig bug due to MODULES not always being
    evaluated if no .config is found. Take the following Kconfig as an
    example:

    config MODULES
    def_bool y

    config FOO
    def_tristate m

    With no .config, the following configuration is generated:

    CONFIG_MODULES=y
    CONFIG_FOO=y

    With an empty .config, the following:

    CONFIG_MODULES=y
    CONFIG_FOO=m

    Tristate choice statements can also exhibit the problem, due to having an
    implicit rev_dep (select) containing "m".

    The problem is that MODULES is never evaluted in conf_read_simple() unless
    there's a .config. The following patch fixes this.

    Signed-off-by: Ulf Magnusson
    Reviewed-by: WANG Cong
    Signed-off-by: Michal Marek

    Ulf Magnusson
     
  • ASUS P5-V provides a SSID that unexpectedly matches with the value
    compilant with Realtek's specification. Thus the driver interprets
    it badly, resulting in non-working PC beep.

    This patch adds a white-list for such a case; a white-list of known
    devices with working PC beep.

    Signed-off-by: Takashi Iwai

    Takashi Iwai