1. 20 Aug, 2009 11 commits
    • Benjamin Herrenschmidt's avatar
      powerpc/mm: Fix definitions of FORCE_MAX_ZONEORDER in Kconfig · 066c4b87
      Benjamin Herrenschmidt authored
      The current definitions set ranges and defaults for 32 and 64-bit
      only using "PPC_STD_MMU" which means hash based MMU. This uselessly
      restrict the usefulness for the upcoming 64-bit BookE port, but more
      than that, it's broken on 32-bit since the only 32-bit platform
      supporting multiple page sizes currently is 44x which does -not-
      have PPC_STD_MMU_32 set.
      
      This fixes it by using PPC64 and PPC32 instead.
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      066c4b87
    • roel kluin's avatar
      powerpc/cell: Replace strncpy by strlcpy · 2e2ddb24
      roel kluin authored
      Replace strncpy() and explicit null-termination by strlcpy()
      Signed-off-by: default avatarRoel Kluin <roel.kluin@gmail.com>
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      2e2ddb24
    • Benjamin Herrenschmidt's avatar
      powerpc: Remove use of a second scratch SPRG in STAB code · c5a8c0c9
      Benjamin Herrenschmidt authored
      The STAB code used on Power3 and RS/64 uses a second scratch SPRG to
      save a GPR in order to decide whether to go to do_stab_bolted_* or
      to handle a normal data access exception.
      
      This prevents our scheme of freeing SPRG3 which is user visible for
      user uses since we cannot use SPRG0 which, on RS/64, seems to be
      read-only for supervisor mode (like POWER4).
      
      This reworks the STAB exception entry to use the PACA as temporary
      storage instead.
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      c5a8c0c9
    • Benjamin Herrenschmidt's avatar
      powerpc: Use names rather than numbers for SPRGs (v2) · ee43eb78
      Benjamin Herrenschmidt authored
      The kernel uses SPRG registers for various purposes, typically in
      low level assembly code as scratch registers or to hold per-cpu
      global infos such as the PACA or the current thread_info pointer.
      
      We want to be able to easily shuffle the usage of those registers
      as some implementations have specific constraints realted to some
      of them, for example, some have userspace readable aliases, etc..
      and the current choice isn't always the best.
      
      This patch should not change any code generation, and replaces the
      usage of SPRN_SPRGn everywhere in the kernel with a named replacement
      and adds documentation next to the definition of the names as to
      what those are used for on each processor family.
      
      The only parts that still use the original numbers are bits of KVM
      or suspend/resume code that just blindly needs to save/restore all
      the SPRGs.
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      ee43eb78
    • Benjamin Herrenschmidt's avatar
      powerpc: Rename exception.h to exception-64s.h · 8aa34ab8
      Benjamin Herrenschmidt authored
      The file include/asm/exception.h contains definitions
      that are specific to exception handling on 64-bit server
      type processors.
      
      This renames the file to exception-64s.h to reflect that
      fact and avoid confusion.
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      8aa34ab8
    • Anton Blanchard's avatar
      powerpc: Preload application text segment instead of TASK_UNMAPPED_BASE · de4376c2
      Anton Blanchard authored
      TASK_UNMAPPED_BASE is not used with the new top down mmap layout. We can
      reuse this preload slot by loading in the segment at 0x10000000, where almost
      all PowerPC binaries are linked at.
      
      On a microbenchmark that bounces a token between two 64bit processes over pipes
      and calls gettimeofday each iteration (to access the VDSO), both the 32bit and
      64bit context switch rate improves (tested on a 4GHz POWER6):
      
      32bit: 273k/sec -> 283k/sec
      64bit: 277k/sec -> 284k/sec
      Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      de4376c2
    • Anton Blanchard's avatar
      powerpc: Rearrange SLB preload code · 5eb9bac0
      Anton Blanchard authored
      With the new top down layout it is likely that the pc and stack will be in the
      same segment, because the pc is most likely in a library allocated via a top
      down mmap. Right now we bail out early if these segments match.
      
      Rearrange the SLB preload code to sanity check all SLB preload addresses
      are not in the kernel, then check all addresses for conflicts.
      Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      5eb9bac0
    • Anton Blanchard's avatar
      powerpc: Move 64bit VDSO to improve context switch performance · 30d0b368
      Anton Blanchard authored
      On 64bit applications the VDSO is the only thing in segment 0. Since the VDSO
      is position independent we can remove the hint and let get_unmapped_area pick
      an area. This will mean the vdso will be near other mmaps and will share
      an SLB entry:
      
      10000000-10001000 r-xp 00000000 08:06 5778459        /root/context_switch_64
      10010000-10011000 r--p 00000000 08:06 5778459        /root/context_switch_64
      10011000-10012000 rw-p 00001000 08:06 5778459        /root/context_switch_64
      fffa92ae000-fffa92b0000 rw-p 00000000 00:00 0
      fffa92b0000-fffa9453000 r-xp 00000000 08:06 4334051  /lib64/power6/libc-2.9.so
      fffa9453000-fffa9462000 ---p 001a3000 08:06 4334051  /lib64/power6/libc-2.9.so
      fffa9462000-fffa9466000 r--p 001a2000 08:06 4334051  /lib64/power6/libc-2.9.so
      fffa9466000-fffa947c000 rw-p 001a6000 08:06 4334051  /lib64/power6/libc-2.9.so
      fffa947c000-fffa9480000 rw-p 00000000 00:00 0
      fffa9480000-fffa94a8000 r-xp 00000000 08:06 4333852  /lib64/ld-2.9.so
      fffa94b3000-fffa94b4000 rw-p 00000000 00:00 0
      
      fffa94b4000-fffa94b7000 r-xp 00000000 00:00 0        [vdso] <----- here I am
      
      fffa94b7000-fffa94b8000 r--p 00027000 08:06 4333852  /lib64/ld-2.9.so
      fffa94b8000-fffa94bb000 rw-p 00028000 08:06 4333852  /lib64/ld-2.9.so
      fffa94bb000-fffa94bc000 rw-p 00000000 00:00 0
      fffe4c10000-fffe4c25000 rw-p 00000000 00:00 0        [stack]
      
      On a microbenchmark that bounces a token between two 64bit processes over pipes
      and calls gettimeofday each iteration (to access the VDSO), our context switch
      rate goes from 268k to 277k ctx switches/sec (tested on a 4GHz POWER6).
      Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      30d0b368
    • Geoff Thorpe's avatar
      powerpc: expose the multi-bit ops that underlie single-bit ops. · 0d2d3e38
      Geoff Thorpe authored
      The bitops.h functions that operate on a single bit in a bitfield are
      implemented by operating on the corresponding word location. In all
      cases the inner logic is valid if the mask being applied has more than
      one bit set, so this patch exposes those inner operations. Indeed,
      set_bits() was already available, but it duplicated code from
      set_bit() (rather than making the latter a wrapper) - it was also
      missing the PPC405_ERR77() workaround and the "volatile" address
      qualifier present in other APIs. This corrects that, and exposes the
      other multi-bit equivalents.
      
      One advantage of these multi-bit forms is that they allow word-sized
      variables to essentially be their own spinlocks, eg. very useful for
      state machines where an atomic "flags" variable can obviate the need
      for any additional locking.
      Signed-off-by: default avatarGeoff Thorpe <geoff@geoffthorpe.net>
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      0d2d3e38
    • Michael Ellerman's avatar
      powerpc/mpic: Fix MPIC_BROKEN_REGREAD on non broken MPICs · 11a6b292
      Michael Ellerman authored
      The workaround enabled by CONFIG_MPIC_BROKEN_REGREAD does not work
      on non-broken MPICs. The symptom is no interrupts being received.
      
      The fix is twofold. Firstly the code was broken for multiple isus,
      we need to index into the shadow array with the src_no, not the idx.
      Secondly, we always do the read, but only use the VECPRI_MASK and
      VECPRI_ACTIVITY bits from the hardware, the rest of "val" comes
      from the shadow.
      Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      11a6b292
    • Gerhard Pircher's avatar
      powerpc/amigaone: Convert amigaone_init() to a machine_device_initcall() · 66dc3304
      Gerhard Pircher authored
      This allows to remove the ppc_md.init() hook in the setup code.
      Signed-off-by: default avatarGerhard Pircher <gerhard_pircher@gmx.net>
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      66dc3304
  2. 19 Aug, 2009 2 commits
  3. 18 Aug, 2009 20 commits
  4. 17 Aug, 2009 7 commits