25 Sep, 2010

2 commits

  • * 'stable' of git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile:
    arch/tile: remove dead code from intvec_32.S

    Linus Torvalds
     
  • This "bpt_code" instruction was killed off in our development line a while
    ago (the actual definition of bpt_code that is used is in kernel/traps.c)
    but I didn't push it for 2.6.36 because it seemed harmless and I didn't
    want to try to push more than absolutely necessary.

    However, we recently fixed a bug in our gcc that had been causing
    "-gdwarf2" not to be passed to the assembler, and passing this flag causes
    an erroneous assembler failure in the presence of code in a data section,
    sometimes. While we'd like to track down the bug in the assembler,
    we'd also like to make sure 2.6.36 builds with the current toolchain,
    so I'm removing this dead code as well.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     

17 Sep, 2010

1 commit


15 Sep, 2010

6 commits

  • This cut-and-paste bug was caused by rewriting the register dump
    code to use only a single printk per line of output.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • This tripped up a driver (not yet committed to git). Fix it now.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • During context switch, save and restore a couple of additional bits of
    tilegx user state that can be persistently modified by userspace.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • Rather than just using pt_regs, it now contains the actual saved
    state explicitly, similar to pt_regs. By doing it this way, we
    provide a cleaner API for userspace (or equivalently, we avoid the
    need for libc to provide its own definition of sigcontext).

    While we're at it, move PT_FLAGS_xxx to where they are not visible
    from userspace. And always pass siginfo and mcontext to signal
    handlers, even if they claim they don't need it, since sometimes
    they actually try to use it anyway in practice.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • The sys_execve() implementation was properly const-ified but not
    the declaration, the syscall wrappers, or the compat version.
    This change completes the constification process.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • compat_alloc_user_space() expects the caller to independently call
    access_ok() to verify the returned area. A missing call could
    introduce problems on some architectures.

    This patch incorporates the access_ok() check into
    compat_alloc_user_space() and also adds a sanity check on the length.
    The existing compat_alloc_user_space() implementations are renamed
    arch_compat_alloc_user_space() and are used as part of the
    implementation of the new global function.

    This patch assumes NULL will cause __get_user()/__put_user() to either
    fail or access userspace on all architectures. This should be
    followed by checking the return value of compat_access_user_space()
    for NULL in the callers, at which time the access_ok() in the callers
    can also be removed.

    Reported-by: Ben Hawkes
    Signed-off-by: H. Peter Anvin
    Acked-by: Benjamin Herrenschmidt
    Acked-by: Chris Metcalf
    Acked-by: David S. Miller
    Acked-by: Ingo Molnar
    Acked-by: Thomas Gleixner
    Acked-by: Tony Luck
    Cc: Andrew Morton
    Cc: Arnd Bergmann
    Cc: Fenghua Yu
    Cc: H. Peter Anvin
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: James Bottomley
    Cc: Kyle McMartin
    Cc: Martin Schwidefsky
    Cc: Paul Mackerras
    Cc: Ralf Baechle
    Cc:

    H. Peter Anvin
     

18 Aug, 2010

1 commit

  • Make do_execve() take a const filename pointer so that kernel_execve() compiles
    correctly on ARM:

    arch/arm/kernel/sys_arm.c:88: warning: passing argument 1 of 'do_execve' discards qualifiers from pointer target type

    This also requires the argv and envp arguments to be consted twice, once for
    the pointer array and once for the strings the array points to. This is
    because do_execve() passes a pointer to the filename (now const) to
    copy_strings_kernel(). A simpler alternative would be to cast the filename
    pointer in do_execve() when it's passed to copy_strings_kernel().

    do_execve() may not change any of the strings it is passed as part of the argv
    or envp lists as they are some of them in .rodata, so marking these strings as
    const should be fine.

    Further kernel_execve() and sys_execve() need to be changed to match.

    This has been test built on x86_64, frv, arm and mips.

    Signed-off-by: David Howells
    Tested-by: Ralf Baechle
    Acked-by: Russell King
    Signed-off-by: Linus Torvalds

    David Howells
     

16 Aug, 2010

3 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile:
    arch/tile: don't validate CROSS_COMPILE needlessly
    arch/tile: export only COMMAND_LINE_SIZE to userspace.
    arch/tile: rename ARCH_KMALLOC_MINALIGN to ARCH_DMA_MINALIGN
    arch/tile: Rename the hweight() implementations to __arch_hweight()
    arch/tile: extend syscall ABI to set r1 on return as well.
    arch/tile: Various cleanups.
    arch/tile: support backtracing on TILE-Gx
    arch/tile: Fix a couple of issues with the COMPAT code for TILE-Gx.
    arch/tile: Use separate, better minsec values for clocksource and sched_clock.
    arch/tile: correct a bug in freeing bootmem by VA for the optional second initrd.
    arch: tile: mm: pgtable.c: Removed duplicated #include
    arch: tile: kernel/proc.c Removed duplicated #include
    Add fanotify syscalls to .
    arch/tile: support new kunmap_atomic() naming convention.
    tile: remove unused ISA_DMA_THRESHOLD define

    Conflicts in arch/tile/configs/tile_defconfig (pick the mainline version
    with the reduced defconfig).

    Linus Torvalds
     
  • With this change, the arch/tile Makefile will only check for a valid
    combination of CROSS_COMPILE vs "uname -m" for a few common targets
    that are typically the ones we get wrong (vmlinux, all, and modules).
    The change handles the case of an empty "make" goal like "make all".

    Signed-off-by: Chris Metcalf
    Reviewed-by: Sam Ravnborg

    Chris Metcalf
     
  • This fixes a failure in "make headers_check" for tile.
    I hadn't realized this file was exported to userspace by default.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     

15 Aug, 2010

2 commits


14 Aug, 2010

3 commits

  • See commit 1527bc8b928dd1399c3d3467dd47d9ede210978a.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • Chris Metcalf
     
  • Until now, the tile architecture ABI for syscall return has just been
    that r0 holds the return value, and an error is only signalled like it is
    for kernel code, with a negative small number.

    However, this means that in multiple places in userspace we end up writing
    the same three-cycle idiom that tests for a small negative number for
    error. It seems cleaner to instead move that code into the kernel, and
    set r1 to hold zero on success or errno on failure; previously, r1 was
    just zeroed on return from the kernel (to avoid leaking kernel state).
    This way a single conditional branch after the syscall is sufficient
    to test for the failure case. The number of cycles taken is the same,
    but the error-checking code is in just one place, so total code size is
    smaller, and random userspace syscall code is easier to understand.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     

13 Aug, 2010

7 commits


11 Aug, 2010

4 commits

  • Architectures implement dma_is_consistent() in different ways (some
    misinterpret the definition of API in DMA-API.txt). So it hasn't been so
    useful for drivers. We have only one user of the API in tree. Unlikely
    out-of-tree drivers use the API.

    Even if we fix dma_is_consistent() in some architectures, it doesn't look
    useful at all. It was invented long ago for some old systems that can't
    allocate coherent memory at all. It's better to export only APIs that are
    definitely necessary for drivers.

    Let's remove this API.

    Signed-off-by: FUJITA Tomonori
    Cc: James Bottomley
    Reviewed-by: Konrad Rzeszutek Wilk
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    FUJITA Tomonori
     
  • dma_get_cache_alignment returns the minimum DMA alignment. Architectures
    defines it as ARCH_DMA_MINALIGN (formally ARCH_KMALLOC_MINALIGN). So we
    can unify dma_get_cache_alignment implementations.

    Note that some architectures implement dma_get_cache_alignment wrongly.
    dma_get_cache_alignment() should return the minimum DMA alignment. So
    fully-coherent architectures should return 1. This patch also fixes this
    issue.

    Signed-off-by: FUJITA Tomonori
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    FUJITA Tomonori
     
  • See commit 597781f3e51f48ef8e67be772196d9e9673752c4.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • No need to define ISA_DMA_THRESHOLD

    Signed-off-by: FUJITA Tomonori
    [cmetcalf@tilera.com: converted to a single-line #include file]
    Signed-off-by: Chris Metcalf

    FUJITA Tomonori
     

17 Jul, 2010

1 commit


07 Jul, 2010

10 commits

  • None of these changes fix any actual bugs, but are just various cleanups
    that fell out along the way. In particular, some unused #defines and
    includes are removed, PREFETCH_STRIDE is added (the default is right for
    our shipping chips, but wrong for our next generation), our tile-specific
    prefetching code is removed so the (identical) generic prefetching code
    can be used instead, a comment is fixed to be proper GPL and not just a
    "paste GPL here" token, a "//" comment is converted to "/* */", etc.

    Signed-off-by: Chris Metcalf
    Acked-by: Arnd Bergmann

    Chris Metcalf
     
  • Signed-off-by: Chris Metcalf
    Acked-by: Arnd Bergmann

    Chris Metcalf
     
  • Architectures that handle DMA-non-coherent memory need to set
    ARCH_KMALLOC_MINALIGN to make sure that kmalloc'ed buffer is DMA-safe:
    the buffer doesn't share a cache with the others.

    Signed-off-by: FUJITA Tomonori
    Acked-by: Chris Metcalf

    FUJITA Tomonori
     
  • Let's use the standard L1_CACHE_ALIGN macro instead.

    Signed-off-by: FUJITA Tomonori
    Acked-by: Chris Metcalf

    FUJITA Tomonori
     
  • This commit is primarily changes caused by reviewing "sparse"
    and "checkpatch" output on our sources, so is somewhat noisy, since
    things like "printk() -> pr_err()" (or whatever) throughout the
    codebase tend to get tedious to read. Rather than trying to tease
    apart precisely which things changed due to which type of code
    review, this commit includes various cleanups in the code:

    - sparse: Add declarations in headers for globals.
    - sparse: Fix __user annotations.
    - sparse: Using gfp_t consistently instead of int.
    - sparse: removing functions not actually used.
    - checkpatch: Clean up printk() warnings by using pr_info(), etc.;
    also avoid partial-line printks except in bootup code.
    - checkpatch: Use exposed structs rather than typedefs.
    - checkpatch: Change some C99 comments to C89 comments.

    In addition, a couple of minor other changes are rolled in
    to this commit:

    - Add support for a "raise" instruction to cause SIGFPE, etc., to be raised.
    - Remove some compat code that is unnecessary when we fully eliminate
    some of the deprecated syscalls from the generic syscall ABI.
    - Update the tile_defconfig to reflect current config contents.

    Signed-off-by: Chris Metcalf
    Acked-by: Arnd Bergmann

    Chris Metcalf
     
  • This code is used in other places in our system than in Linux, so
    to share it we now implement it as an inline function in our low-level
    headers, and instantiate it in one file in Linux's arch/tile/lib.
    The file is now cacheflush.c and is C code rather than the strangely-named
    and assembler-implemented __invalidate_icache.S.

    Signed-off-by: Chris Metcalf
    Acked-by: Arnd Bergmann

    Chris Metcalf
     
  • This wasn't properly tested until the perf-event subsystem started
    to get brought up under the tile architecture.

    The bug caused bogus atomic64_cmpxchg() values to be returned,
    among other things.

    Signed-off-by: Chris Metcalf
    Acked-by: Arnd Bergmann

    Chris Metcalf
     
  • The C file (tile-desc_{32,64}.c) was about 300KB before this change,
    and is now shrunk down to 100K. The original file included support
    for BFD in the binutils toolchain, which is not necessary in the
    kernel; the kernel version only needs to include enough support to
    enable the single-stepper and backtracer.

    Signed-off-by: Chris Metcalf
    Acked-by: Arnd Bergmann

    Chris Metcalf
     
  • This network (the "UDN") connects all the cpus on the chip in a
    wormhole-routed dynamic network. Subrectangles of the chip can
    be allocated by a "create" ioctl on /dev/hardwall, and then to access the
    UDN in that rectangle, tasks must perform an "activate" ioctl on that
    same file object after affinitizing themselves to a single cpu in
    the region. Sending a wormhole-routed message that tries to leave
    that subrectangle causes all activated tasks to receive a SIGILL
    (just as they would if they tried to access the UDN without first
    activating themselves to a hardwall rectangle).

    The original submission of this code to LKML had the driver
    instantiated under /proc/tile/hardwall. Now we just use a character
    device for this, conventionally /dev/hardwall. Some futures planning
    for the TILE-Gx chip suggests that we may want to have other types of
    devices that share the general model of "bind a task to a cpu, then
    'activate' a file descriptor on a pseudo-device that gives access to
    some hardware resource". As such, we are using a device rather
    than, for example, a syscall, to set up and activate this code.

    As part of this change, the compat_ptr() declaration was fixed and used
    to pass the compat_ioctl argument to the normal ioctl. So far we limit
    compat code to 2GB, so the difference between zero-extend and sign-extend
    (the latter being correct, eventually) had been overlooked.

    Signed-off-by: Chris Metcalf
    Acked-by: Arnd Bergmann

    Chris Metcalf
     
  • This model is based on the on-chip interrupt model used by the
    TILE-Gx next-generation hardware, and interacts much more cleanly
    with the Linux generic IRQ layer.

    The change includes modifications to the Tilera hypervisor, which
    are reflected in the hypervisor headers in arch/tile/include/arch/.

    Signed-off-by: Chris Metcalf
    Acked-by: Thomas Gleixner

    Chris Metcalf