14 Dec, 2014

1 commit


04 Apr, 2014

1 commit


20 Nov, 2013

2 commits


08 Nov, 2013

2 commits

  • Each CPU has it's own Control Register 16 (CR16) which is used as time source
    for the udelay() function. But since the CR16 registers across different CPUs
    are not synced, we need to recalculate the loop count if we get switched away
    to ensure that we really delay as much time as requested.

    Signed-off-by: Helge Deller

    Helge Deller
     
  • Provide a macro ASM_EXCEPTIONTABLE_ENTRY() to create exception table
    entries and convert all open-coded places to use that macro.

    This patch is a first step toward creating a exception table which only
    holds 32bit pointers even on a 64bit kernel. That way in my own kernel
    I was able to reduce the in-kernel exception table from 44kB to 22kB.

    Signed-off-by: Helge Deller

    Helge Deller
     

13 Oct, 2013

1 commit


10 Jul, 2013

1 commit

  • When running the LTP testsuite one may hit this kernel BUG() with the
    write06 testcase:

    kernel BUG at mm/filemap.c:2023!
    CPU: 1 PID: 8614 Comm: writev01 Not tainted 3.10.0-rc7-64bit-c3000+ #6
    IASQ: 0000000000000000 0000000000000000 IAOQ: 00000000401e6e84 00000000401e6e88
    IIR: 03ffe01f ISR: 0000000010340000 IOR: 000001fbe0380820
    CPU: 1 CR30: 00000000bef80000 CR31: ffffffffffffffff
    ORIG_R28: 00000000bdc192c0
    IAOQ[0]: iov_iter_advance+0x3c/0xc0
    IAOQ[1]: iov_iter_advance+0x40/0xc0
    RP(r2): generic_file_buffered_write+0x204/0x3f0
    Backtrace:
    [] generic_file_buffered_write+0x204/0x3f0
    [] __generic_file_aio_write+0x244/0x448
    [] generic_file_aio_write+0x98/0x150
    [] do_sync_readv_writev+0xc0/0x130
    [] compat_do_readv_writev+0x12c/0x340
    [] compat_writev+0x68/0xa0
    [] compat_SyS_writev+0x98/0xf8

    Reason for this crash is a gcc miscompilation in the fault handlers of
    pa_memcpy() which return the fault address instead of the copied bytes.
    Since this seems to be a generic problem with gcc-4.7.x (and below), it's
    better to simplify the fault handlers in pa_memcpy to avoid this problem.

    Here is a simple reproducer for the problem:

    int main(int argc, char **argv)
    {
    int fd, nbytes;
    struct iovec wr_iovec[] = {
    { "TEST STRING ",32},
    { (char*)0x40005000,32} }; // random memory.
    fd = open(DATA_FILE, O_RDWR | O_CREAT, 0666);
    nbytes = writev(fd, wr_iovec, 2);
    printf("return value = %d, errno %d (%s)\n",
    nbytes, errno, strerror(errno));
    return 0;
    }

    In addition, John David Anglin wrote:
    There is no gcc PR as pa_memcpy is not legitimate C code. There is an
    implicit assumption that certain variables will contain correct values
    when an exception occurs and the code randomly jumps to one of the
    exception blocks. There is no guarantee of this. If a PR was filed, it
    would likely be marked as invalid.

    Signed-off-by: Helge Deller
    Signed-off-by: John David Anglin
    Cc: # 3.8+
    Signed-off-by: Helge Deller

    Helge Deller
     

26 Apr, 2013

1 commit

  • The Debian experimental linux source package (3.8.5-1) build fails
    with the following errors:
    ...
    MODPOST 2016 modules
    ERROR: "__ucmpdi2" [fs/btrfs/btrfs.ko] undefined!
    ERROR: "__ucmpdi2" [drivers/md/dm-verity.ko] undefined!

    The attached patch resolves this problem. It is based on the s390
    implementation of ucmpdi2.c.

    Signed-off-by: John David Anglin
    Cc: "James E.J. Bottomley"
    Signed-off-by: Helge Deller

    John David Anglin
     

03 Mar, 2013

1 commit


31 May, 2012

1 commit


29 Mar, 2012

1 commit


29 Nov, 2011

1 commit


01 Nov, 2011

1 commit


27 Jul, 2011

1 commit

  • This allows us to move duplicated code in
    (atomic_inc_not_zero() for now) to

    Signed-off-by: Arun Sharma
    Reviewed-by: Eric Dumazet
    Cc: Ingo Molnar
    Cc: David Miller
    Cc: Eric Dumazet
    Acked-by: Mike Frysinger
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Arun Sharma
     

07 Mar, 2010

1 commit


05 Jan, 2010

1 commit


15 Dec, 2009

2 commits

  • Further name space cleanup. No functional change

    Signed-off-by: Thomas Gleixner
    Acked-by: Peter Zijlstra
    Acked-by: David S. Miller
    Acked-by: Ingo Molnar
    Cc: linux-arch@vger.kernel.org

    Thomas Gleixner
     
  • The raw_spin* namespace was taken by lockdep for the architecture
    specific implementations. raw_spin_* would be the ideal name space for
    the spinlocks which are not converted to sleeping locks in preempt-rt.

    Linus suggested to convert the raw_ to arch_ locks and cleanup the
    name space instead of using an artifical name like core_spin,
    atomic_spin or whatever

    No functional change.

    Signed-off-by: Thomas Gleixner
    Acked-by: Peter Zijlstra
    Acked-by: David S. Miller
    Acked-by: Ingo Molnar
    Cc: linux-arch@vger.kernel.org

    Thomas Gleixner
     

29 Oct, 2009

1 commit

  • Now that the return from alloc_percpu is compatible with the address
    of per-cpu vars, it makes sense to hand around the address of per-cpu
    variables. To make this sane, we remove the per_cpu__ prefix we used
    created to stop people accidentally using these vars directly.

    Now we have sparse, we can use that (next patch).

    tj: * Updated to convert stuff which were missed by or added after the
    original patch.

    * Kill per_cpu_var() macro.

    Signed-off-by: Rusty Russell
    Signed-off-by: Tejun Heo
    Reviewed-by: Christoph Lameter

    Rusty Russell
     

03 Jul, 2009

2 commits


06 Jan, 2009

1 commit

  • Make the following needlessly global code static:

    - iomap.c: struct iomap_ops[]
    - memcpy.c: pa_memcpy()

    Signed-off-by: Adrian Bunk
    Cc: Matthew Wilcox
    Cc: Grant Grundler
    Signed-off-by: Andrew Morton
    Signed-off-by: Kyle McMartin

    Adrian Bunk
     

13 Jun, 2008

1 commit


15 May, 2008

2 commits

  • __FUNCTION__ is gcc-specific, use __func__

    Signed-off-by: Harvey Harrison
    Cc: Kyle McMartin
    Cc: Matthew Wilcox
    Cc: Grant Grundler
    Signed-off-by: Andrew Morton
    Signed-off-by: Kyle McMartin

    Harvey Harrison
     
  • This trivial patch fixes the following section warnings on PARISC:
    > WARNING: vmlinux.o (.text.1): unexpected section name.
    >The (.[number]+) following section name are ld generated and not expected.
    > Did you forget to use "ax"/"aw" in a .S file?
    > Note that for example contains
    > section definitions for use in .S files.

    Signed-off-by: Helge Deller
    Signed-off-by: Kyle McMartin

    Helge Deller
     

29 Apr, 2008

1 commit

  • Almost all implementations of pci_iomap() in the kernel, including the generic
    lib/iomap.c one, copies the content of a struct resource into unsigned long's
    which will break on 32 bits platforms with 64 bits resources.

    This fixes all definitions of pci_iomap() to use resource_size_t. I also
    "fixed" the 64bits arch for consistency.

    Signed-off-by: Benjamin Herrenschmidt
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Benjamin Herrenschmidt
     

07 Dec, 2007

1 commit


18 Oct, 2007

2 commits


17 Feb, 2007

2 commits


03 Dec, 2006

1 commit


01 Jul, 2006

1 commit


31 Mar, 2006

1 commit


22 Oct, 2005

2 commits


11 Sep, 2005

1 commit

  • This patch (written by me and also containing many suggestions of Arjan van
    de Ven) does a major cleanup of the spinlock code. It does the following
    things:

    - consolidates and enhances the spinlock/rwlock debugging code

    - simplifies the asm/spinlock.h files

    - encapsulates the raw spinlock type and moves generic spinlock
    features (such as ->break_lock) into the generic code.

    - cleans up the spinlock code hierarchy to get rid of the spaghetti.

    Most notably there's now only a single variant of the debugging code,
    located in lib/spinlock_debug.c. (previously we had one SMP debugging
    variant per architecture, plus a separate generic one for UP builds)

    Also, i've enhanced the rwlock debugging facility, it will now track
    write-owners. There is new spinlock-owner/CPU-tracking on SMP builds too.
    All locks have lockup detection now, which will work for both soft and hard
    spin/rwlock lockups.

    The arch-level include files now only contain the minimally necessary
    subset of the spinlock code - all the rest that can be generalized now
    lives in the generic headers:

    include/asm-i386/spinlock_types.h | 16
    include/asm-x86_64/spinlock_types.h | 16

    I have also split up the various spinlock variants into separate files,
    making it easier to see which does what. The new layout is:

    SMP | UP
    ----------------------------|-----------------------------------
    asm/spinlock_types_smp.h | linux/spinlock_types_up.h
    linux/spinlock_types.h | linux/spinlock_types.h
    asm/spinlock_smp.h | linux/spinlock_up.h
    linux/spinlock_api_smp.h | linux/spinlock_api_up.h
    linux/spinlock.h | linux/spinlock.h

    /*
    * here's the role of the various spinlock/rwlock related include files:
    *
    * on SMP builds:
    *
    * asm/spinlock_types.h: contains the raw_spinlock_t/raw_rwlock_t and the
    * initializers
    *
    * linux/spinlock_types.h:
    * defines the generic type and initializers
    *
    * asm/spinlock.h: contains the __raw_spin_*()/etc. lowlevel
    * implementations, mostly inline assembly code
    *
    * (also included on UP-debug builds:)
    *
    * linux/spinlock_api_smp.h:
    * contains the prototypes for the _spin_*() APIs.
    *
    * linux/spinlock.h: builds the final spin_*() APIs.
    *
    * on UP builds:
    *
    * linux/spinlock_type_up.h:
    * contains the generic, simplified UP spinlock type.
    * (which is an empty structure on non-debug builds)
    *
    * linux/spinlock_types.h:
    * defines the generic type and initializers
    *
    * linux/spinlock_up.h:
    * contains the __raw_spin_*()/etc. version of UP
    * builds. (which are NOPs on non-debug, non-preempt
    * builds)
    *
    * (included on UP-non-debug builds:)
    *
    * linux/spinlock_api_up.h:
    * builds the _spin_*() APIs.
    *
    * linux/spinlock.h: builds the final spin_*() APIs.
    */

    All SMP and UP architectures are converted by this patch.

    arm, i386, ia64, ppc, ppc64, s390/s390x, x64 was build-tested via
    crosscompilers. m32r, mips, sh, sparc, have not been tested yet, but should
    be mostly fine.

    From: Grant Grundler

    Booted and lightly tested on a500-44 (64-bit, SMP kernel, dual CPU).
    Builds 32-bit SMP kernel (not booted or tested). I did not try to build
    non-SMP kernels. That should be trivial to fix up later if necessary.

    I converted bit ops atomic_hash lock to raw_spinlock_t. Doing so avoids
    some ugly nesting of linux/*.h and asm/*.h files. Those particular locks
    are well tested and contained entirely inside arch specific code. I do NOT
    expect any new issues to arise with them.

    If someone does ever need to use debug/metrics with them, then they will
    need to unravel this hairball between spinlocks, atomic ops, and bit ops
    that exist only because parisc has exactly one atomic instruction: LDCW
    (load and clear word).

    From: "Luck, Tony"

    ia64 fix

    Signed-off-by: Ingo Molnar
    Signed-off-by: Arjan van de Ven
    Signed-off-by: Grant Grundler
    Cc: Matthew Wilcox
    Signed-off-by: Hirokazu Takata
    Signed-off-by: Mikael Pettersson
    Signed-off-by: Benoit Boissinot
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ingo Molnar
     

10 Sep, 2005

1 commit


17 Apr, 2005

1 commit

  • In the new io infrastructure, all of our operators are expecting the
    underlying device to be little endian (because the PCI bus, their main
    consumer, is LE).

    However, there are a fair few devices and busses in the world that are
    actually Big Endian. There's even evidence that some of these BE bus and
    chip types are attached to LE systems. Thus, there's a need for a BE
    equivalent of our io{read,write}{16,32} operations.

    The attached patch adds this as io{read,write}{16,32}be. When it's in,
    I'll add the first consume (the 53c700 SCSI chip driver).

    Signed-off-by: James Bottomley
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    James Bottomley