12 Jun, 2009

14 commits

  • Memory management in generic is highly architecture specific,
    but on NOMMU architectures, it is mostly trivial, so just
    add a default implementation in asm-generic that applies
    to all NOMMU architectures.

    The two files cache.h and cacheflush.h can possibly also
    be used by architectures that have an MMU but never require
    flushing the cache or have cache lines larger than 32 bytes.

    Signed-off-by: Remis Lima Baima
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • atomic.h and io.h are based on the mn10300 architecture,
    which is already pretty generic and can be used by
    other architectures that do not have hardware support
    for atomic operations or out-of-order I/O access.

    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • The dma.h, hw_irq.h, serial.h and timex.h files originally
    described PC-style i8237, i8259A, i8250, i8253 and i8255 chips
    as well as the VGA style text mode graphics.

    Modern architectures live happily without these specific
    interfaces, but a few definitions from these headers keep
    getting used in common code.

    The new generic headers are what most architectures use
    anyway nowadays, just implementing the minimal definitions.

    Signed-off-by: Remis Lima Baima
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • These are all kernel internal interfaces that get copied
    around a lot. In most cases, architectures can provide
    their own optimized versions, but these generic versions
    can work as well.

    I have tried to use the most common contents of each
    header to allow existing architectures to migrate easily.

    Thanks to Remis for suggesting a number of cleanups.

    Signed-off-by: Remis Lima Baima
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • bitops.h apparently suffered from some level of bitrot, it
    was missing the smp_mb__{before,after}_clear_bit functions,
    and included other headers in an invalid order.

    This changes the file so that new architectures can use
    it out of the box.

    Signed-off-by: Remis Lima Baima
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • Some generic code is using the horribly misnamed PCI_DMA_BUS_IS_PHYS
    from asm/pci.h. This makes sure that an architecture without PCI
    support does not have to define this itself but can rely on the
    asm-generic version.

    Signed-off-by: Remis Lima Baima
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • Evidently, set_rtc_time is supposed to be overridable
    by architectures that define their own version, but
    unfortunately, get_rtc_ss would in that case still
    use the generic version.

    This makes get_rtc_ss call the real set_rtc_time
    to let architectures define their own version.
    The change should fix the "Extended RTC operation"
    on Alpha, which uses the incorrect get_rtc_ss
    call. It also allows PowerPC to use the asm-generic/rtc.h
    file in the future.

    Cc: Richard Henderson
    Cc: linux-alpha@vger.kernel.org
    Cc: Tom Rini
    Cc: rtc-linux@googlegroups.com
    Cc: Alessandro Zummo
    Cc: Paul Gortmaker
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • The current asm-generic/page.h only contains the get_order
    function, and asm-generic/uaccess.h only implements
    unaligned accesses. This renames the file to getorder.h
    and uaccess-unaligned.h to make room for new page.h
    and uaccess.h file that will be usable by all simple
    (e.g. nommu) architectures.

    Signed-off-by: Remis Lima Baima
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • The existing asm-generic/atomic.h only defines the
    atomic_long type. This renames it to atomic-long.h
    so we have a place to add a truly generic atomic.h
    that can be used on all non-SMP systems.

    Signed-off-by: Remis Lima Baima
    Signed-off-by: Arnd Bergmann
    Acked-by: Ingo Molnar

    Arnd Bergmann
     
  • A new architecture should only define a minimal set of system
    calls while still providing the full functionality. This version
    of unistd.h has gone through intensive review to make sure that
    by default it only enables syscalls that do not already have
    a more featureful replacement.

    It is modeled after the x86-64 version of unistd.h, which unifies
    the syscall number definition and the actual system call table
    in a single file, in order to keep them synchronized much more
    easily.

    This first version still keeps legacy system call definitions
    around, guarded by various #ifdefs, and with numbers larger
    than 1024. The idea behind this is to make it easier for
    new architectures to transition from a full list to the reduced
    set. In particular, the new microblaze architecture that should
    migrate to using the generic ABI headers can at least use an
    existing uClibc source tree without major rewrites during the
    conversion.

    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • These header files are typically copied from an existing architecture
    into any new one, slightly modified and then remain untouched until
    the end of time in the name of ABI stability.

    To make it easier for future architectures, provide a sane generic
    version here. In cases where multiple architectures already use
    identical code, I used the most common version. In cases like
    stat.h that are more or less broken everywhere, I provide a
    version that is meant to be ideal for new architectures.

    Signed-off-by: Remis Lima Baima
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • The ipc64 data structures were originally meant to
    be architecture specific so that each architecture
    could add their own optimizations for padding.

    In the end, most of them just copied the x86 version,
    and most got that wrong. UClibc expects the x86 anyway,
    so we might just declare that the default and get
    rid of the extra copies.

    Signed-off-by: Remis Lima Baima
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • This provides a reliable way for asm-generic/types.h and other
    files to find out if it is running on a 32 or 64 bit platform.

    We cannot use CONFIG_64BIT for this in headers that are included
    from user space because CONFIG symbols are not available there.
    We also cannot do it inside of asm/types.h because some headers
    need the word size but cannot include types.h.

    The solution is to introduce a new header
    that defines both __BITS_PER_LONG for user space and
    BITS_PER_LONG for usage in the kernel. The asm-generic
    version falls back to 32 bit unless the architecture overrides
    it, which I did for all 64 bit platforms.

    Signed-off-by: Remis Lima Baima
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • The existing asm-generic versions are incomplete and included
    by some architectures. New architectures should be able
    to use a generic version, so rename the existing files and
    change all users, which lets us add the new files.

    Signed-off-by: Remis Lima Baima
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     

10 Jun, 2009

5 commits

  • Linus Torvalds
     
  • There's a bug in the mxser kernel module that still appears in the
    2.6.29.4 kernel.

    mxser_get_ISA_conf takes a ioaddress as its first argument, by passing the
    not of the ioaddr, you're effectively passing 0 which means it won't be
    able to talk to an ISA card. I have tested this, and removing the !
    fixes the problem.

    Cc: "Peter Botha"
    Signed-off-by: Jiri Slaby
    Acked-by: Alan Cox
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Botha
     
  • In commit code, we scan buffers attached to a transaction. During this
    scan, we sometimes have to drop j_list_lock and then we recheck whether
    the journal buffer head didn't get freed by journal_try_to_free_buffers().
    But checking for buffer_jbd(bh) isn't enough because a new journal head
    could get attached to our buffer head. So add a check whether the journal
    head remained the same and whether it's still at the same transaction and
    list.

    This is a nasty bug and can cause problems like memory corruption (use after
    free) or trigger various assertions in JBD code (observed).

    Signed-off-by: Jan Kara
    Cc:
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kara
     
  • The recent ->lookup() deadlock correction required the directory inode
    mutex to be dropped while waiting for expire completion. We were
    concerned about side effects from this change and one has been identified.

    I saw several error messages.

    They cause autofs to become quite confused and don't really point to the
    actual problem.

    Things like:

    handle_packet_missing_direct:1376: can't find map entry for (43,1827932)

    which is usually totally fatal (although in this case it wouldn't be
    except that I treat is as such because it normally is).

    do_mount_direct: direct trigger not valid or already mounted
    /test/nested/g3c/s1/ss1

    which is recoverable, however if this problem is at play it can cause
    autofs to become quite confused as to the dependencies in the mount tree
    because mount triggers end up mounted multiple times. It's hard to
    accurately check for this over mounting case and automount shouldn't need
    to if the kernel module is doing its job.

    There was one other message, similar in consequence of this last one but I
    can't locate a log example just now.

    When checking if a mount has already completed prior to adding a new mount
    request to the wait queue we check if the dentry is hashed and, if so, if
    it is a mount point. But, if a mount successfully completed while we
    slept on the wait queue mutex the dentry must exist for the mount to have
    completed so the test is not really needed.

    Mounts can also be done on top of a global root dentry, so for the above
    case, where a mount request completes and the wait queue entry has already
    been removed, the hashed test returning false can cause an incorrect
    callback to the daemon. Also, d_mountpoint() is not sufficient to check
    if a mount has completed for the multi-mount case when we don't have a
    real mount at the base of the tree.

    Signed-off-by: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Kent
     
  • The massive nommu update (8feae131) resulted in these warnings:
    ipc/shm.c: In function `sys_shmdt':
    ipc/shm.c:974: warning: unused variable `size'
    ipc/shm.c:972: warning: unused variable `next'

    Signed-off-by: Mike Frysinger
    Cc: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Frysinger
     

09 Jun, 2009

18 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-for-linus:
    kvm: fix kvm reboot crash when MAXSMP is used
    cpumask: alloc zeroed cpumask for static cpumask_var_ts
    cpumask: introduce zalloc_cpumask_var

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.dk/linux-2.6-block:
    bsg: setting rq->bio to NULL

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
    cls_cgroup: Fix oops when user send improperly 'tc filter add' request
    r8169: fix crash when large packets are received

    Linus Torvalds
     
  • * 'for-linus' of git://neil.brown.name/md:
    md/raid5: fix bug in reshape code when chunk_size decreases.
    md/raid5 - avoid deadlocks in get_active_stripe during reshape
    md/raid5: use conf->raid_disks in preference to mddev->raid_disk

    Linus Torvalds
     
  • Due to commit 1cd96c242a829d52f7a5ae98f554ca9775429685 ("block: WARN
    in __blk_put_request() for potential bio leak"), BSG SMP requests get
    the false warnings:

    WARNING: at block/blk-core.c:1068 __blk_put_request+0x52/0xc0()

    This sets rq->bio to NULL to avoid that false warnings.

    Signed-off-by: FUJITA Tomonori
    Signed-off-by: Jens Axboe

    FUJITA Tomonori
     
  • one system was found there is crash during reboot then kvm/MAXSMP
    Sending all processes the KILL signal... done
    Please stand by while rebooting the system...
    [ 1721.856538] md: stopping all md devices.
    [ 1722.852139] kvm: exiting hardware virtualization
    [ 1722.854601] BUG: unable to handle kernel NULL pointer dereference at (null)
    [ 1722.872219] IP: [] hardware_disable+0x4c/0xb4
    [ 1722.877955] PGD 0
    [ 1722.880042] Oops: 0000 [#1] SMP
    [ 1722.892548] last sysfs file: /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/host0/target0:2:0/0:2:0:0/vendor
    [ 1722.900977] CPU 9
    [ 1722.912606] Modules linked in:
    [ 1722.914226] Pid: 0, comm: swapper Not tainted 2.6.30-rc7-tip-01843-g2305324-dirty #299 ...
    [ 1722.932589] RIP: 0010:[] [] hardware_disable+0x4c/0xb4
    [ 1722.942709] RSP: 0018:ffffc900010b6ed8 EFLAGS: 00010046
    [ 1722.956121] RAX: 0000000000000000 RBX: ffffc9000e253140 RCX: 0000000000000009
    [ 1722.972202] RDX: 000000000000b020 RSI: ffffc900010c3220 RDI: ffffffffffffd790
    [ 1722.977399] RBP: ffffc900010b6f08 R08: 0000000000000000 R09: 0000000000000000
    [ 1722.995149] R10: 00000000000004b8 R11: 966912b6c78fddbd R12: 0000000000000009
    [ 1723.011551] R13: 000000000000b020 R14: 0000000000000009 R15: 0000000000000000
    [ 1723.019898] FS: 0000000000000000(0000) GS:ffffc900010b3000(0000) knlGS:0000000000000000
    [ 1723.034389] CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b
    [ 1723.041164] CR2: 0000000000000000 CR3: 0000000001001000 CR4: 00000000000006e0
    [ 1723.056192] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [ 1723.072546] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    [ 1723.080562] Process swapper (pid: 0, threadinfo ffff88107e464000, task ffff88047e5a2550)
    [ 1723.096144] Stack:
    [ 1723.099071] 0000000000000046 ffffc9000e253168 966912b6c78fddbd ffffc9000e253140
    [ 1723.115471] ffff880c7d4304d0 ffffc9000e253168 ffffc900010b6f28 ffffffff81011022
    [ 1723.132428] ffffc900010b6f48 966912b6c78fddbd ffffc900010b6f48 ffffffff8100b83b
    [ 1723.141973] Call Trace:
    [ 1723.142981] [] kvm_arch_hardware_disable+0x26/0x3c
    [ 1723.158153] [] hardware_disable+0x3f/0x55
    [ 1723.172168] [] generic_smp_call_function_interrupt+0x76/0x13c
    [ 1723.178836] [] smp_call_function_interrupt+0x3a/0x5e
    [ 1723.194689] [] call_function_interrupt+0x13/0x20
    [ 1723.199750] [] ? acpi_idle_enter_c1+0xd3/0xf4
    [ 1723.217508] [] ? acpi_idle_enter_c1+0xcd/0xf4
    [ 1723.232172] [] ? acpi_idle_enter_bm+0xe7/0x2ce
    [ 1723.235141] [] ? __atomic_notifier_call_chain+0x0/0xac
    [ 1723.253381] [] ? menu_select+0x58/0xd2
    [ 1723.258179] [] ? cpuidle_idle_call+0xa4/0xf3
    [ 1723.272828] [] ? cpu_idle+0xb8/0x101
    [ 1723.277085] [] ? start_secondary+0x1bc/0x1d7
    [ 1723.293708] Code: b0 00 00 65 48 8b 04 25 28 00 00 00 48 89 45 e0 31 c0 48 8b 04 cd 30 ee 27 82 49 89 cc 49 89 d5 48 8b 04 10 48 8d b8 90 d7 ff ff 8b 87 70 28 00 00 48 8d 98 90 d7 ff ff eb 16 e8 e9 fe ff ff
    [ 1723.335524] RIP [] hardware_disable+0x4c/0xb4
    [ 1723.342076] RSP
    [ 1723.352021] CR2: 0000000000000000
    [ 1723.354348] ---[ end trace e2aec53dae150aa1 ]---

    it turns out that we need clear cpus_hardware_enabled in that case.

    Reported-and-tested-by: Yinghai Lu
    Signed-off-by: Yinghai Lu
    Signed-off-by: Rusty Russell

    Avi Kivity
     
  • These are defined as static cpumask_var_t so if MAXSMP is not used,
    they are cleared already. Avoid surprises when MAXSMP is enabled.

    Signed-off-by: Yinghai Lu
    Signed-off-by: Rusty Russell

    Yinghai Lu
     
  • So can get cpumask_var with cpumask_clear

    Signed-off-by: Yinghai Lu
    Signed-off-by: Rusty Russell

    Yinghai Lu
     
  • I found a bug in cls_cgroup_change() in cls_cgroup.c.
    cls_cgroup_change() expected tca[TCA_OPTIONS] was set from user space properly,
    but tc in iproute2-2.6.29-1 (which I used) didn't set it.

    In the current source code of tc in git, it set tca[TCA_OPTIONS].

    git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git

    If we always use a newest iproute2 in git when we use cls_cgroup,
    we don't face this oops probably.
    But I think, kernel shouldn't panic regardless of use program's behaviour.

    Signed-off-by: Minoru Usui
    Signed-off-by: David S. Miller

    Minoru Usui
     
  • Michael Tokarev reported receiving a large packet could crash
    a machine with RTL8169 NIC.
    ( original thread at http://lkml.org/lkml/2009/6/8/192 )

    Problem is this driver tells that NIC frames up to 16383 bytes
    can be received but provides skb to rx ring allocated with
    smaller sizes (1536 bytes in case standard 1500 bytes MTU is used)

    When a frame larger than what was allocated by driver is received,
    dma transfert can occurs past the end of buffer and corrupt
    kernel memory.

    Fix is to tell to NIC what is the maximum size a frame can be.

    This bug is very old, (before git introduction, linux-2.6.10), and
    should be backported to stable versions.

    Reported-by: Michael Tokarev
    Signed-off-by: Eric Dumazet
    Tested-by: Michael Tokarev
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • Now that we support changing the chunksize, we calculate
    "reshape_sectors" to be the max of number of sectors in old
    and new chunk size.
    However there is one please where we still use 'chunksize'
    rather than 'reshape_sectors'.
    This causes a reshape that reduces the size of chunks to freeze.

    Signed-off-by: NeilBrown

    NeilBrown
     
  • md has functionality to 'quiesce' and array so that all pending
    IO completed and no new IO starts. This is used to achieve a
    stable state before making internal changes.

    Currently this quiescing applies equally to normal IO, resync
    IO, and reshape IO.
    However there is a problem with applying it to reshape IO.
    Reshape can have multiple 'stripe_heads' that must be active together.
    If the quiesce come between allocating the first and the last of
    such a collection, then we deadlock, as the last will not be allocated
    until the quiesce is lifted, the quiesce will not be lifted until the
    first (which has been allocated) gets used, and that first cannot be
    used until the last is allocated.

    It is not necessary to inhibit reshape IO when a quiesce is
    requested. Those places in the code that require a full quiesce will
    ensure the reshape thread is not running at all.

    So allow reshape requests to get access to new stripe_heads without
    being blocked by a 'quiesce'.

    This only affects in-place reshapes (i.e. where the array does not
    grow or shrink) and these are only newly supported. So this patch is
    not needed in earlier kernels.

    Signed-off-by: NeilBrown

    NeilBrown
     
  • mddev->raid_disks can be changed and any time by a request from
    user-space. It is a suggestion as to what number of raid_disks is
    desired.

    conf->raid_disks can only be changed by the raid5 module with suitable
    locks in place. It is a statement as to the current number of
    raid_disks.

    There are two places where the latter should be used, but the former
    is used. This can lead to a crash when reshaping an array.

    This patch changes to mddev-> to conf->

    Signed-off-by: NeilBrown

    NeilBrown
     
  • Our async work synchronization was broken by "async: make sure
    independent async domains can't accidentally entangle" (commit
    d5a877e8dd409d8c702986d06485c374b705d340), because it would report
    the wrong lowest active async ID when there was both running and
    pending async work.

    This caused things like no being able to read the root filesystem,
    resulting in missing console devices and inability to run 'init',
    causing a boot-time panic.

    This fixes it by properly returning the lowest pending async ID: if
    there is any running async work, that will have a lower ID than any
    pending work, and we should _not_ look at the pending work list.

    There were alternative patches from Jaswinder and James, but this one
    also cleans up the code by removing the pointless 'ret' variable and
    the unnecesary testing for an empty list around 'for_each_entry()' (if
    the list is empty, the for_each_entry() thing just won't execute).

    Fixes-bug: http://bugzilla.kernel.org/show_bug.cgi?id=13474
    Reported-and-tested-by: Chris Clayton
    Cc: Jaswinder Singh Rajput
    Cc: James Bottomley
    Cc: Arjan van de Ven
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • * 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus:
    MIPS: Outline udelay and fix a few issues.
    MIPS: ioctl.h: Fix headers_check warnings
    MIPS: Cobalt: PCI bus is always required to obtain the board ID
    MIPS: Kconfig: Remove "Support for" from Cavium system type
    MIPS: Sibyte: Honor CONFIG_CMDLINE
    SSB: BCM47xx: Export ssb_watchdog_timer_set

    Linus Torvalds
     
  • The previous patch submission had a I typo I didn't catch but Bartlomiej
    noted. Guess this proves the point about any patch being risky late in an rc

    Signed-off-by: Alan Cox
    Signed-off-by: Linus Torvalds

    Alan Cox
     
  • * 'kvm-updates/2.6.30' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
    KVM: Explicity initialize cpus_hardware_enabled

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6:
    pdc202xx_old: fix resetproc() method
    pdc202xx_old: fix 'pdc20246_dma_ops'

    Linus Torvalds
     

08 Jun, 2009

3 commits