1. 29 6月, 2007 6 次提交
  2. 28 6月, 2007 4 次提交
  3. 25 6月, 2007 7 次提交
  4. 14 6月, 2007 23 次提交
    • D
      [POWERPC] Merge CPU features pertaining to icache coherency · 4508dc21
      David Gibson 提交于
      Currently the powerpc kernel has a 64-bit only feature,
      COHERENT_ICACHE used for those CPUS which maintain icache/dcache
      coherency in hardware (POWER5, essentially).  It also has a feature,
      SPLIT_ID_CACHE, which is used on CPUs which have separate i and
      d-caches, which is to say everything except 601 and Freescale E200.
      
      In nearly all the places we check the SPLIT_ID_CACHE, what we actually
      care about is whether the i and d-caches are coherent (which they will
      be, trivially, if they're the same cache).
      
      This tries to clarify the situation a little.  The COHERENT_ICACHE
      feature becomes availble on 32-bit and is set for all CPUs where i and
      d-cache are effectively coherent, whether this is due to special logic
      (POWER5) or because they're unified.  We check this, instead of
      SPLIT_ID_CACHE nearly everywhere.
      
      The SPLIT_ID_CACHE feature itself is replaced by a UNIFIED_ID_CACHE
      feature with reversed sense, set only on 601 and Freescale E200.  In
      the two places (one Freescale BookE specific) where we really care
      whether it's a unified cache, not whether they're coherent, we check
      this feature.  The CPUs with unified cache are so few, we could
      consider replacing this feature bit with explicit checks against the
      PVR.
      
      This will make unifying the 32-bit and 64-bit cache flush code a
      little more straightforward.
      Signed-off-by: NDavid Gibson <dwg@au1.ibm.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      4508dc21
    • D
      [POWERPC] Remove the dregs of APUS support from arch/powerpc · f21f49ea
      David Gibson 提交于
      APUS (the Amiga Power-Up System) is not supported under arch/powerpc
      and it's unlikely it ever will be.  Therefore, this patch removes the
      fragments of APUS support code from arch/powerpc which have been
      copied from arch/ppc.
      
      A few APUS references are left in asm-powerpc in .h files which are
      still used from arch/ppc.
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      f21f49ea
    • J
      [POWERPC] Donate idle CPU cycles on dedicated partitions · d8c391a5
      Jake Moilanen 提交于
      A Power6 can give up CPU cycles on a dedicated CPU (as opposed to a
      shared CPU) to other shared processors if the administrator asks for it
      (via the HMC).
      
      This enables that to work properly on P6.
      
      This just involves setting a bit in the CAS structure as well as the
      VPA.  To donate cycles, a CPU has to have all SMT threads idle and
      have the donate bit set in the VPA.  Then call H_CEDE.
      
      The reason why shared processors just aren't used is because dedicated
      CPUs are guaranteed an actual processor, yet the system is still able to
      increase the capacity of the shared CPU pool.
      
      Also rename the VPA's cpuctls_task_attrs field to a more accurate name.
      Signed-off-by: NJake Moilanen <moilanen@austin.ibm.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      d8c391a5
    • B
      [POWERPC] Less ifdef's in signal.c/signal.h · 2f97cd39
      Benjamin Herrenschmidt 提交于
      This patch moves things around a little bit in the new common signal.c
      and signal.h files to remove the last #ifdef in the middle of the
      common do_signal().
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      2f97cd39
    • B
      [POWERPC] Remove #ifdef around set_dabr in signal code · 0edc4ffd
      Benjamin Herrenschmidt 提交于
      set_dabr() and thread.dabr exist on 32 bits as well nowadays (they
      actually may do something even, depending on what CPU you have).
      
      So this removes the ifdef.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      0edc4ffd
    • B
      [POWERPC] Merge creation of signal frame · a3f61dc0
      Benjamin Herrenschmidt 提交于
      The code for creating signal frames was still duplicated and split
      in strange ways between 32 and 64 bits, including the SA_ONSTACK
      handling being in do_signal on 32 bits but inside handle_rt_signal
      on 64 bits etc...
      
      This moves the 64 bits get_sigframe() to the generic signal.c,
      cleans it a bit, moves the access_ok() call done by all callers to
      it as well, and adapts/cleanups the 3 different signal handling cases
      to use that common function.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      a3f61dc0
    • B
      [POWERPC] Remove obsolete freezer bits · 5f9f375a
      Benjamin Herrenschmidt 提交于
      The powerpc signal code still had some obsolete freezer bits that
      have long been removed from x86 (it's now done in generic code).
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      5f9f375a
    • C
      [POWERPC] Consolidate do_signal · f478f543
      Christoph Hellwig 提交于
      do_signal has exactly the same behaviour on 32bit and 64bit and 32bit
      compat on 64bit for handling 32bit signals.  Consolidate all these
      into one common function in signal.c.  The only odd left over is
      the try_to_free in the 32bit version that no other architecture has
      in mainline (only in i386 for some odd SuSE release).  We should
      probably get rid of it in a separate patch.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      f478f543
    • C
      [POWERPC] Consolidate restore_sigmask · db277e9a
      Christoph Hellwig 提交于
      restore_sigmask is exactly the same on 32 and 64bit, so move it to
      common code.  Also move _BLOCKABLE to signal.h to avoid defining it
      multiple times.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      db277e9a
    • C
      [POWERPC] Consolidate sys_sigaltstack · 69d15f6b
      Christoph Hellwig 提交于
      sys_sigaltstack is the same on 32bit and 64 and we can consolidate it
      to signal.c.  The only difference is that the 32bit code uses ints
      for the unused register paramaters and 64bit unsigned long.  I've
      changed it to unsigned long because it's the same width on 32bit.
      
      (I also wonder who came up with this awkward calling convention.. :))
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      69d15f6b
    • B
      [POWERPC] Make syscall restart code more common · 22e38f29
      Benjamin Herrenschmidt 提交于
      This patch moves the code in signal_32.c and signal_64.c for handling
      syscall restart into a common signal.c file and converge around a single
      implementation that is based on the 32 bits one, using trap, ccr
      and r3 rather than the special "result" field for deciding what to do.
      
      The "result" field is now pretty much deprecated. We still set it for
      the sake of whatever might rely on it in userland but we no longer use
      it's content.
      
      This, along with a previous patch that enables ptracers to write to
      "trap" and "orig_r3" should allow gdb to properly handle syscall
      restarting.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      22e38f29
    • B
      [POWERPC] Always apply DABR changes on context switches · 791cc501
      Benjamin Herrenschmidt 提交于
      This patch removes the #ifdef CONFIG_PPC64 around setting the DABR.
      
      The actual setting of the SPR inside of the set_dabr() function is dependent
      on CONFIG_PPC64 || CONFIG_6xx but you can always provide a ppc_md hook to
      override that.  We should improve support for different HW breakpoints
      facilities but this is a first step.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      791cc501
    • B
      [POWERPC] powerpc: ptrace can set DABR on both 32 and 64 bits · 6d110da8
      Benjamin Herrenschmidt 提交于
      Allow ptrace to set dabr in the thread structure for both 32 and 64 bits,
      though only 64 bits actually uses that field, it's actually defined in both.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      6d110da8
    • B
      [POWERPC] ptrace shouldn't touch FP exec mode · abd06505
      Benjamin Herrenschmidt 提交于
      One of the gratuitous difference between 32 and 64-bit ptrace is
      whether you can whack the MSR:FE0 and FE1 bits from ptrace.  This
      patch forbids it unconditionally.  In addition, the 64-bit kernels
      used to return the exception mode in the MSR on reads, but 32-bit
      kernels didn't.  This patch makes it return those bits on both.
      
      Finally, since ptrace-ppc32.h and ptrace-ppc64.h are mostly empty now, and
      since the previous patch made ptrace32.c no longer need the MSR_DEBUGCHANGE
      definition, we just remove those 2 files and move back the remaining bits
      to ptrace.c (they were short lived heh ?).
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      abd06505
    • B
      [POWERPC] Allow ptrace write to pt_regs trap and orig_r3 · 912000e7
      Benjamin Herrenschmidt 提交于
      This patch allows a ptracer to write to the "trap" and "orig_r3" words
      of the pt_regs.
      
      This, along with a subsequent patch to the signal restart code, should
      enable gdb to properly handle syscall restarting after executing a separate
      function (at least when there's no restart block).
      
      This patch also removes ptrace32.c code toying directly with the registers
      and makes it use the ptrace_get/put_reg() accessors for everything so that
      the logic for checking what is permitted is in only one place.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      912000e7
    • B
      [POWERPC] Remove some useless ifdef's in ptrace · 1b6610d6
      Benjamin Herrenschmidt 提交于
      CHECK_FULL_REGS() exist on both 32 and 64 bits, so there's no need
      to make it conditional on CONFIG_PPC32.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      1b6610d6
    • B
      [POWERPC] Uninline common ptrace bits · 865418d8
      Benjamin Herrenschmidt 提交于
      This folds back the ptrace-common.h bits back into ptrace.c and removes
      that file. The FSL SPE bits from ptrace-ppc32.h are folded back in as
      well.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      865418d8
    • B
      [POWERPC] ptrace updates & new, better requests · e17666ba
      Benjamin Herrenschmidt 提交于
      The powerpc ptrace interface is dodgy at best. We have defined our
      "own" versions of GETREGS/SETREGS/GETFPREGS/SETFPREGS that strangely
      take arguments in reverse order from other archs (in addition to having
      different request numbers) and have subtle issue, like not accessing
      all of the registers in their respective categories.
      
      This patch moves the implementation of those to a separate function
      in order to facilitate their deprecation in the future, and provides
      new ptrace requests that mirror the x86 and sparc ones and use the
      same numbers:
      
         PTRACE_GETREGS    : returns an entire pt_regs (the whole thing,
                             not only the 32 GPRs, though that doesn't
                             include the FPRs etc... There's a compat version
                             for 32 bits that returns a 32 bits compatible
                             pt_regs (44 uints)
      
         PTRACE_SETREGS    : sets an entire pt_regs (the whole thing,
                             not only the 32 GPRs, though that doesn't
                             include the FPRs etc... Some registers cannot be
                             written to and will just be dropped, this is the
                             same as with POKEUSR, that is anything above MQ
                             on 32 bits and CCR on 64 bits. There is a compat
                             version as well.
      
         PTRACE_GETFPREGS  : returns all the FP registers -including- the FPSCR
                             that is 33 doubles (regardless of 32/64 bits)
      
         PTRACE_SETFPREGS  : sets all the FP registers -including- the FPSCR
                             that is 33 doubles (regardless of 32/64 bits)
      
      And two that only exist on 64 bits kernels:
      
         PTRACE_GETREGS64  : Same as PTRACE_GETREGS, except there is no compat
                             function, a 32 bits process will obtain the full 64
                             bits registers
      
         PTRACE_SETREGS64  : Same as PTRACE_SETREGS, except there is no compat
                             function, a 32 bits process will set the full 64
                             bits registers
      
      The two later ones makes things easier to have a 32 bits debugger on a
      64 bits program (or on a 32 bits program that uses the full 64 bits of
      the GPRs, which is possible though has issues that will be fixed in a
      later patch).
      
      Finally, while at it, the patch removes a whole bunch of code duplication
      between ptrace32.c and ptrace.c, in large part by having the former call
      into the later for all requests that don't need any special "compat"
      treatment.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      e17666ba
    • B
      [POWERPC] ptrace cleanups · acd89828
      Benjamin Herrenschmidt 提交于
      The powerpc ptrace code has some weirdness, like a ptrace-common.h file that
      is actually ppc64 only and some of the 32 bits code ifdef'ed inside ptrace.c.
      
      There are also separate implementations for things like get/set_vrregs for
      32 and 64 bits which is totally unnecessary.
      
      This patch cleans that up a bit by having a ptrace-common.h which contains
      really common code (and makes a lot more code common), and ptrace-ppc32.h and
      ptrace-ppc64.h files that contain the few remaining different bits.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      acd89828
    • B
      [POWERPC] Disable broken PPC_PTRACE_GETFPREGS on 32 bits · 0b3d5c48
      Benjamin Herrenschmidt 提交于
      The handling of PPC_PTRACE_GETFPREGS is broken on 32 bits kernel,
      it will only return half of the registers. Since that call didn't
      initially exist for 32 bits kernel (added recently), rather than
      fixing it, let's just remove it.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      0b3d5c48
    • B
      [POWERPC] Rewrite IO allocation & mapping on powerpc64 · 3d5134ee
      Benjamin Herrenschmidt 提交于
      This rewrites pretty much from scratch the handling of MMIO and PIO
      space allocations on powerpc64.  The main goals are:
      
       - Get rid of imalloc and use more common code where possible
       - Simplify the current mess so that PIO space is allocated and
         mapped in a single place for PCI bridges
       - Handle allocation constraints of PIO for all bridges including
         hot plugged ones within the 2GB space reserved for IO ports,
         so that devices on hotplugged busses will now work with drivers
         that assume IO ports fit in an int.
       - Cleanup and separate tracking of the ISA space in the reserved
         low 64K of IO space. No ISA -> Nothing mapped there.
      
      I booted a cell blade with IDE on PIO and MMIO and a dual G5 so
      far, that's it :-)
      
      With this patch, all allocations are done using the code in
      mm/vmalloc.c, though we use the low level __get_vm_area with
      explicit start/stop constraints in order to manage separate
      areas for vmalloc/vmap, ioremap, and PCI IOs.
      
      This greatly simplifies a lot of things, as you can see in the
      diffstat of that patch :-)
      
      A new pair of functions pcibios_map/unmap_io_space() now replace
      all of the previous code that used to manipulate PCI IOs space.
      The allocation is done at mapping time, which is now called from
      scan_phb's, just before the devices are probed (instead of after,
      which is by itself a bug fix). The only other caller is the PCI
      hotplug code for hot adding PCI-PCI bridges (slots).
      
      imalloc is gone, as is the "sub-allocation" thing, but I do beleive
      that hotplug should still work in the sense that the space allocation
      is always done by the PHB, but if you unmap a child bus of this PHB
      (which seems to be possible), then the code should properly tear
      down all the HPTE mappings for that area of the PHB allocated IO space.
      
      I now always reserve the first 64K of IO space for the bridge with
      the ISA bus on it. I have moved the code for tracking ISA in a separate
      file which should also make it smarter if we ever are capable of
      hot unplugging or re-plugging an ISA bridge.
      
      This should have a side effect on platforms like powermac where VGA IOs
      will no longer work. This is done on purpose though as they would have
      worked semi-randomly before. The idea at this point is to isolate drivers
      that might need to access those and fix them by providing a proper
      function to obtain an offset to the legacy IOs of a given bus.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      3d5134ee
    • S
      [POWERPC] Fix VDSO compile warning · 31fe5bf6
      Segher Boessenkool 提交于
      Maybe the type should have been char[] instead of __u8[]
      in the first place, but this will do.
      Signed-off-by: NSegher Boessenkool <segher@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      31fe5bf6
    • M
      [POWERPC] Fix console output getting dropped on platforms without udbg_putc · 220ddc08
      Milton Miller 提交于
      Previously, registering this early console would just result
      in dropping early buffered printk output until a udbg_putc
      was registered.
      
      However, commit 69331af7
      clears the CON_PRINTBUFFER flag on the main console when a
      CON_BOOT (early) console has been registered, resulting in
      the buffered messages never being displayed to the user.
      
      This fixes the problem by making sure we don't register udbg_console
      on platforms that don't implement udbg_putc.
      Signed-off-by: NMilton Miller <miltonm@bga.com>
      Acked-by: NMark A. Greer <mgreer@mvista.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      220ddc08