1. 13 2月, 2009 2 次提交
    • K
      powerpc/book-3e: Introduce concept of Book-3e MMU · 70fe3af8
      Kumar Gala 提交于
      The Power ISA 2.06 spec introduces a standard MMU programming model that
      is based on the Freescale Book-E MMU programing model.  The Freescale
      version is pretty backwards compatiable with the ISA 2.06 definition so
      we are starting to refactor some of the Freescale code so it can be
      easily shared.
      Signed-off-by: NKumar Gala <galak@kernel.crashing.org>
      70fe3af8
    • K
      powerpc/fsl-booke: Add new ISA 2.06 page sizes and MAS defines · d66c82ea
      Kumar Gala 提交于
      The Power ISA 2.06 added power of two page sizes to the embedded MMU
      architecture.  Its done it such a way to be code compatiable with the
      existing HW.  Made the minor code changes to support both power of two
      and power of four page sizes.  Also added some new MAS bits and macros
      that are defined as part of the 2.06 ISA.  Renamed some things to use
      the 'Book-3e' concept to convey the new MMU that is based on the
      Freescale Book-E MMU programming model.
      
      Note, its still invalid to try and use a page size that isn't supported
      by cpu.
      Signed-off-by: NKumar Gala <galak@kernel.crashing.org>
      d66c82ea
  2. 11 2月, 2009 2 次提交
  3. 10 2月, 2009 2 次提交
  4. 02 2月, 2009 1 次提交
  5. 29 1月, 2009 1 次提交
    • K
      powerpc/fsl-booke: Cleanup init/exception setup to be runtime · 105c31df
      Kumar Gala 提交于
      We currently have a few variants of fsl-booke processors (e500v1, e500v2,
      e500mc, and e200).  They all have minor differences that we had previously
      been handling via ifdefs.
      
      To move towards having this support the following changes have been made:
      
      * PID1, PID2 only exist on e500v1 & e500v2 and should not be accessed on
        e500mc or e200.  We use MMUCFG[NPIDS] to determine which case we are
        since we only touch PID1/2 in extremely early init code.
      
      * Not all IVORs exist on all the processors so introduce cpu_setup
        functions for each variant to setup the proper IVORs that are either
        unique or exist but have some variations between the processors
      Signed-off-by: NKumar Gala <galak@kernel.crashing.org>
      105c31df
  6. 28 1月, 2009 1 次提交
    • R
      powerpc/pseries: Correct VIO bus accounting problem in CMO env. · 69b052e8
      Robert Jennings 提交于
      In the VIO bus code the wrappers for dma alloc_coherent and free_coherent
      calls are rounding to IOMMU_PAGE_SIZE.  Taking a look at the underlying
      calls, the actual mapping is promoted to PAGE_SIZE.  Changing the
      rounding in these two functions fixes under-reporting the entitlement
      used by the system.  Without this change, the system could run out of
      entitlement before it believes it has and incur mapping failures at the
      firmware level.
      
      Also in the VIO bus code, the wrapper for dma map_sg is not exiting in
      an error path where it should.  Rather than fall through to code for the
      success case, this patch adds the return that is needed in the error path.
      Signed-off-by: NRobert Jennings <rcj@linux.vnet.ibm.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      69b052e8
  7. 16 1月, 2009 1 次提交
  8. 14 1月, 2009 1 次提交
  9. 13 1月, 2009 6 次提交
  10. 08 1月, 2009 9 次提交
    • K
      powerpc: Export cacheable_memzero as its now used in a driver · 1edda9c7
      Kumar Gala 提交于
      The Freescale PowerPC specific gianfar driver (gig-e) uses
      cacheable_memzero for performance reasons we need to export
      the symbol to allow the driver to be built as a module.
      Signed-off-by: NKumar Gala <galak@kernel.crashing.org>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      1edda9c7
    • I
      powerpc: Use correct type in prom_init.c · 2b931fb6
      Ingo Molnar 提交于
      tce_entryp is a "u64 *" not an "unsigned long *".
      
      [Split from a large patch -sfr]
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      2b931fb6
    • S
      powerpc: Remove unnecessary casts · 63277161
      Stephen Rothwell 提交于
      of_get_flat_dt_prop() returns a "void *", so we don't need to cast when
      assigning its result to a pointer variable.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      63277161
    • P
      powerpc: Fix pciconfig_iobase system call on PCI-Express powermac · 16124f10
      Paul Mackerras 提交于
      X has been failing to start on my quad G5 powermac since commit
      1fd0f525 ("powerpc: Fix domain numbers
      in /proc on 64-bit") went in.  The reason is that the change allows X
      to see the PCI-PCI bridge above the video card (previously it was
      obscured by the fact that there were two "00" directories in
      /proc/bus/pci), and the pciconfig_iobase system call on the bridge is
      failing because of a hack that we have to return information about the
      AGP bus when X asks about bus 0.  This machine doesn't have an AGP bus
      (it has PCI Express) and so the pciconfig_iobase call is returning -1,
      which ultimately causes X to fail to start.
      
      This fixes it by checking that we have an AGP bridge before
      redirecting the pciconfig_iobase call to return information about the
      AGP bus.  With this, X starts successfully both on a quad G5 with
      PCI Express and on an older dual G5 with AGP.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      Acked-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      16124f10
    • N
      powerpc: Rewrite sysfs processor cache info code · 93197a36
      Nathan Lynch 提交于
      The current code for providing processor cache information in sysfs
      has the following deficiencies:
      - several complex functions that are hard to understand
      - implicit recursion (cache_desc_release -> kobject_put -> cache_desc_release)
      - explicit recursion (create_cache_index_info)
      - use of two per-cpu arrays when one would suffice
      - duplication of work on systems where CPUs share cache
      
      Also, when I looked at implementing support for a shared_cpu_map
      attribute, it was pretty much impossible to handle hotplug without
      checking every single online CPU's cache_desc list and fixing things
      up... not that this is a hot path, but it would have introduced
      O(n^2)-ish behavior during boot.  Addressing this involved rethinking
      the core data structures used, which didn't lend itself to an
      incremental approach.
      
      This implementation maintains a "forest" (potentially more than one
      tree) of cache objects which reflects the system's cache topology.
      Cache objects are instantiated as needed as CPUs come online.  A
      per-cpu array is used mainly for sysfs-related bookkeeping; the
      objects in the array just point to the appropriate points in the
      forest.
      
      This maintains compatibility with the existing code and includes some
      enhancements:
      - Implement the shared_cpu_map attribute, which is essential for
        enabling userspace to discover the system's overall cache topology.
      - Use cache-block-size properties if cache-line-size is not available.
      
      I chose to place this implementation in a new file since it would have
      roughly doubled the size of sysfs.c, which is already kind of messy.
      Signed-off-by: NNathan Lynch <ntl@pobox.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      93197a36
    • B
      powerpc/pci: Reserve legacy regions on PCI · c1f34302
      Benjamin Herrenschmidt 提交于
      There's a problem on some embedded platforms when we re-assign
      everything on PCI, such as 44x. The generic code tries to avoid
      assigning devices to addresses overlapping the low legacy
      addresses such as VGA hard decoded areas using constants that
      are unfortunately no good for us, as they don't take into account
      the address translation we do to access PCI busses.
      
      Thus we end up allocating things like IO BARs to 0, which is
      technically legal, but will shadow hard decoded ports for use
      by things like VGA cards.
      
      This works around it by attempting to reserve legacy regions
      before we try to assign addresses.
      
      NOTE: This may have nasty side effects in cases I haven't tested
      yet:
      
       - We try to use FW mappings (ie. powermac) and the FW has allocated
      a conflicting address over those legacy regions. This will typically
      happen. I would expect the new code to just fail with an informative
      message without harm but I haven't had a chance to test that scenario
      yet.
      
       - A device with fixed BARs overlapping those legacy addresses such
      as an IDE controller in legacy mode is in the system. I don't know
      for sure yet what will happen there, I have to test :-)
      
      Ideally, we should change PCIBIOS_MIN_IO/MIN_MEM accross the board
      to take a bus pointer so they can provide appropriate per-bus translated
      values to the generic code but that's a more invasive patch. I will
      do that in the future, but in the meantime, this fixes the problem
      locally
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      c1f34302
    • T
      powerpc/fsl-booke: Remove num_tlbcam_entries · 6fd8be4b
      Trent Piepho 提交于
      This is a global variable defined in fsl_booke_mmu.c with a value that gets
      initialized in assembly code in head_fsl_booke.S.
      
      It's never used.
      
      If some code ever does want to know the number of entries in TLB1, then
      "numcams = mfspr(SPRN_TLB1CFG) & 0xfff", is a whole lot simpler than a
      global initialized during kernel boot from assembly.
      Signed-off-by: NTrent Piepho <tpiepho@freescale.com>
      Signed-off-by: NKumar Gala <galak@kernel.crashing.org>
      6fd8be4b
    • T
      powerpc/fsl-booke: Don't hard-code size of struct tlbcam · 19f5465e
      Trent Piepho 提交于
      Some assembly code in head_fsl_booke.S hard-coded the size of struct tlbcam
      to 20 when it indexed the TLBCAM table.  Anyone changing the size of struct
      tlbcam would not know to expect that.
      
      The kernel already has a system to get the size of C structures into
      assembly language files, asm-offsets, so let's use it.
      
      The definition of the struct gets moved to a header, so that asm-offsets.c
      can include it.
      Signed-off-by: NTrent Piepho <tpiepho@freescale.com>
      Signed-off-by: NKumar Gala <galak@kernel.crashing.org>
      19f5465e
    • B
      PCI: powerpc: use generic pci_swizzle_interrupt_pin() · 3f9455d4
      Bjorn Helgaas 提交于
      Use the generic pci_swizzle_interrupt_pin() instead of arch-specific code.
      Acked-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NBjorn Helgaas <bjorn.helgaas@hp.com>
      Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      3f9455d4
  11. 07 1月, 2009 1 次提交
  12. 06 1月, 2009 1 次提交
  13. 01 1月, 2009 1 次提交
  14. 31 12月, 2008 6 次提交
    • H
      KVM: ppc: Implement in-kernel exit timing statistics · 73e75b41
      Hollis Blanchard 提交于
      Existing KVM statistics are either just counters (kvm_stat) reported for
      KVM generally or trace based aproaches like kvm_trace.
      For KVM on powerpc we had the need to track the timings of the different exit
      types. While this could be achieved parsing data created with a kvm_trace
      extension this adds too much overhead (at least on embedded PowerPC) slowing
      down the workloads we wanted to measure.
      
      Therefore this patch adds a in-kernel exit timing statistic to the powerpc kvm
      code. These statistic is available per vm&vcpu under the kvm debugfs directory.
      As this statistic is low, but still some overhead it can be enabled via a
      .config entry and should be off by default.
      
      Since this patch touched all powerpc kvm_stat code anyway this code is now
      merged and simplified together with the exit timing statistic code (still
      working with exit timing disabled in .config).
      Signed-off-by: NChristian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
      Signed-off-by: NHollis Blanchard <hollisb@us.ibm.com>
      Signed-off-by: NAvi Kivity <avi@redhat.com>
      73e75b41
    • H
      KVM: ppc: directly insert shadow mappings into the hardware TLB · 7924bd41
      Hollis Blanchard 提交于
      Formerly, we used to maintain a per-vcpu shadow TLB and on every entry to the
      guest would load this array into the hardware TLB. This consumed 1280 bytes of
      memory (64 entries of 16 bytes plus a struct page pointer each), and also
      required some assembly to loop over the array on every entry.
      
      Instead of saving a copy in memory, we can just store shadow mappings directly
      into the hardware TLB, accepting that the host kernel will clobber these as
      part of the normal 440 TLB round robin. When we do that we need less than half
      the memory, and we have decreased the exit handling time for all guest exits,
      at the cost of increased number of TLB misses because the host overwrites some
      guest entries.
      
      These savings will be increased on processors with larger TLBs or which
      implement intelligent flush instructions like tlbivax (which will avoid the
      need to walk arrays in software).
      
      In addition to that and to the code simplification, we have a greater chance of
      leaving other host userspace mappings in the TLB, instead of forcing all
      subsequent tasks to re-fault all their mappings.
      Signed-off-by: NHollis Blanchard <hollisb@us.ibm.com>
      Signed-off-by: NAvi Kivity <avi@redhat.com>
      7924bd41
    • H
      KVM: ppc: create struct kvm_vcpu_44x and introduce container_of() accessor · db93f574
      Hollis Blanchard 提交于
      This patch doesn't yet move all 44x-specific data into the new structure, but
      is the first step down that path. In the future we may also want to create a
      struct kvm_vcpu_booke.
      
      Based on patch from Liu Yu <yu.liu@freescale.com>.
      Signed-off-by: NHollis Blanchard <hollisb@us.ibm.com>
      Signed-off-by: NAvi Kivity <avi@redhat.com>
      db93f574
    • H
      KVM: ppc: Rename "struct tlbe" to "struct kvmppc_44x_tlbe" · 0f55dc48
      Hollis Blanchard 提交于
      This will ease ports to other cores.
      
      Also remove unused "struct kvm_tlb" while we're at it.
      Signed-off-by: NHollis Blanchard <hollisb@us.ibm.com>
      Signed-off-by: NAvi Kivity <avi@redhat.com>
      0f55dc48
    • M
      [PATCH] idle cputime accounting · 79741dd3
      Martin Schwidefsky 提交于
      The cpu time spent by the idle process actually doing something is
      currently accounted as idle time. This is plain wrong, the architectures
      that support VIRT_CPU_ACCOUNTING=y can do better: distinguish between the
      time spent doing nothing and the time spent by idle doing work. The first
      is accounted with account_idle_time and the second with account_system_time.
      The architectures that use the account_xxx_time interface directly and not
      the account_xxx_ticks interface now need to do the check for the idle
      process in their arch code. In particular to improve the system vs true
      idle time accounting the arch code needs to measure the true idle time
      instead of just testing for the idle process.
      To improve the tick based accounting as well we would need an architecture
      primitive that can tell us if the pt_regs of the interrupted context
      points to the magic instruction that halts the cpu.
      
      In addition idle time is no more added to the stime of the idle process.
      This field now contains the system time of the idle process as it should
      be. On systems without VIRT_CPU_ACCOUNTING this will always be zero as
      every tick that occurs while idle is running will be accounted as idle
      time.
      
      This patch contains the necessary common code changes to be able to
      distinguish idle system time and true idle time. The architectures with
      support for VIRT_CPU_ACCOUNTING need some changes to exploit this.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      79741dd3
    • M
      [PATCH] fix scaled & unscaled cputime accounting · 457533a7
      Martin Schwidefsky 提交于
      The utimescaled / stimescaled fields in the task structure and the
      global cpustat should be set on all architectures. On s390 the calls
      to account_user_time_scaled and account_system_time_scaled never have
      been added. In addition system time that is accounted as guest time
      to the user time of a process is accounted to the scaled system time
      instead of the scaled user time.
      To fix the bugs and to prevent future forgetfulness this patch merges
      account_system_time_scaled into account_system_time and
      account_user_time_scaled into account_user_time.
      
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Jeremy Fitzhardinge <jeremy@xensource.com>
      Cc: Chris Wright <chrisw@sous-sol.org>
      Cc: Michael Neuling <mikey@neuling.org>
      Acked-by: NPaul Mackerras <paulus@samba.org>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      457533a7
  15. 29 12月, 2008 2 次提交
  16. 25 12月, 2008 1 次提交
    • M
      [S390] arch_setup_additional_pages arguments · fc5243d9
      Martin Schwidefsky 提交于
      arch_setup_additional_pages currently gets two arguments, the binary
      format descripton and an indication if the process uses an executable
      stack or not. The second argument is not used by anybody, it could
      be removed without replacement.
      
      What actually does make sense is to pass an indication if the process
      uses the elf interpreter or not. The glibc code will not use anything
      from the vdso if the process does not use the dynamic linker, so for
      statically linked binaries the architecture backend can choose not
      to map the vdso.
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      fc5243d9
  17. 23 12月, 2008 2 次提交