25 Oct, 2006

1 commit

  • The Cell CPU timebase has an erratum. When reading the entire 64 bits
    of the timebase with one mftb instruction, there is a handful of cycles
    window during which one might read a value with the low order 32 bits
    already reset to 0x00000000 but the high order bits not yet incremeted
    by one. This fixes it by reading the timebase again until the low order
    32 bits is no longer 0. That might introduce occasional latencies if
    hitting mftb just at the wrong time, but no more than 70ns on a cell
    blade, and that was considered acceptable.

    Signed-off-by: Benjamin Herrenschmidt
    Acked-by: Olof Johansson
    Signed-off-by: Paul Mackerras

    Benjamin Herrenschmidt
     

26 Apr, 2006

1 commit


24 Feb, 2006

1 commit

  • This implements accurate task and cpu time accounting for 64-bit
    powerpc kernels. Instead of accounting a whole jiffy of time to a
    task on a timer interrupt because that task happened to be running at
    the time, we now account time in units of timebase ticks according to
    the actual time spent by the task in user mode and kernel mode. We
    also count the time spent processing hardware and software interrupts
    accurately. This is conditional on CONFIG_VIRT_CPU_ACCOUNTING. If
    that is not set, we do tick-based approximate accounting as before.

    To get this accurate information, we read either the PURR (processor
    utilization of resources register) on POWER5 machines, or the timebase
    on other machines on

    * each entry to the kernel from usermode
    * each exit to usermode
    * transitions between process context, hard irq context and soft irq
    context in kernel mode
    * context switches.

    On POWER5 systems with shared-processor logical partitioning we also
    read both the PURR and the timebase at each timer interrupt and
    context switch in order to determine how much time has been taken by
    the hypervisor to run other partitions ("steal" time). Unfortunately,
    since we need values of the PURR on both threads at the same time to
    accurately calculate the steal time, and since we can only calculate
    steal time on a per-core basis, the apportioning of the steal time
    between idle time (time which we ceded to the hypervisor in the idle
    loop) and actual stolen time is somewhat approximate at the moment.

    This is all based quite heavily on what s390 does, and it uses the
    generic interfaces that were added by the s390 developers,
    i.e. account_system_time(), account_user_time(), etc.

    This patch doesn't add any new interfaces between the kernel and
    userspace, and doesn't change the units in which time is reported to
    userspace by things such as /proc/stat, /proc//stat, getrusage(),
    times(), etc. Internally the various task and cpu times are stored in
    timebase units, but they are converted to USER_HZ units (1/100th of a
    second) when reported to userspace. Some precision is therefore lost
    but there should not be any accumulating error, since the internal
    accumulation is at full precision.

    Signed-off-by: Paul Mackerras

    Paul Mackerras
     

13 Jan, 2006

1 commit

  • This patch consolidates the variety of macros used for loading 32 or
    64-bit constants in assembler (LOADADDR, LOADBASE, SET_REG_TO_*). The
    idea is to make the set of macros consistent across 32 and 64 bit and
    to make it more obvious which is the appropriate one to use in a given
    situation. The new macros and their semantics are described in the
    comments in ppc_asm.h.

    In the process, we change several places that were unnecessarily using
    immediate loads on ppc64 to use the GOT/TOC. Likewise we cleanup a
    couple of places where we were clumsily subtracting PAGE_OFFSET with
    asm instructions to use assemble-time arithmetic or the toreal() macro
    instead.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     

09 Jan, 2006

1 commit

  • include/asm-ppc/ had #ifdef __KERNEL__ in all header files that
    are not meant for use by user space, include/asm-powerpc does
    not have this yet.

    This patch gets us a lot closer there. There are a few cases
    where I was not sure, so I left them out. I have verified
    that no CONFIG_* symbols are used outside of __KERNEL__
    any more and that there are no obvious compile errors when
    including any of the headers in user space libraries.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     

10 Nov, 2005

1 commit

  • This patch consolidates macros used to generate assembly for
    compatibility across different CPUs or configs. A new header,
    asm-powerpc/asm-compat.h contains the main compatibility macros. It
    uses some preprocessor magic to make the macros suitable both for use
    in .S files, and in inline asm in .c files. Headers (bitops.h,
    uaccess.h, atomic.h, bug.h) which had their own such compatibility
    macros are changed to use asm-compat.h.

    ppc_asm.h is now for use in .S files *only*, and a #error enforces
    that. As such, we're a lot more careless about namespace pollution
    here than in asm-compat.h.

    While we're at it, this patch adds a call to the PPC405_ERR77 macro in
    futex.h which should have had it already, but didn't.

    Built and booted on pSeries, Maple and iSeries (ARCH=powerpc). Built
    for 32-bit powermac (ARCH=powerpc) and Walnut (ARCH=ppc).

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     

02 Nov, 2005

1 commit

  • This patch merges the ppc32 and ppc64 versions of futex.h, essentially
    by taking the ppc64 version as the powerpc version. The old ppc32
    version did not implement the futex_atomic_op_inuser() callback (it
    always returned -ENOSYS), so FUTEX_WAKE_OP would not work on ppc32.
    In fact the ppc64 version of this function is almost suitable for
    ppc32 as well - the only change needed is to extend ppc_asm.h with a
    macro expanding to to the right pseudo-op to store a pointer (either
    ".long" or ".llong").

    Built and booted on pSeries. Built for 32-bit powermac.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     

28 Oct, 2005

1 commit

  • The merged version follows the ppc64 version pretty closely mostly,
    and in fact ARCH=ppc64 now uses the arch/powerpc/xmon version.
    The main difference for ppc64 is that the 'p' command to call
    show_state (which was always pretty dodgy) has been replaced by
    the ppc32 'p' command, which calls a given procedure (so in fact
    the old 'p' command behaviour can be achieved with 'p $show_state').

    Signed-off-by: Paul Mackerras

    Paul Mackerras
     

27 Oct, 2005

1 commit

  • On 32-bit platforms, these convert from kernel virtual addresses
    to real (physical addresses), like tophys/tovirt but they use
    the same register for the source and destination. On 64-bit
    platforms, they do nothing because the hardware ignores the top
    two bits of the address in real mode.

    These new macros are used in fpu.S now.

    Signed-off-by: Paul Mackerras

    Paul Mackerras
     

26 Oct, 2005

1 commit


17 Oct, 2005

1 commit


13 Oct, 2005

1 commit


10 Oct, 2005

1 commit


06 Oct, 2005

1 commit


25 Sep, 2005

1 commit

  • powerpc: Merge atomic.h and memory.h into powerpc

    Merged atomic.h into include/powerpc. Moved asm-style HMT_ defines from
    memory.h into ppc_asm.h, where there were already HMT_defines; moved c-style
    HMT_ defines to processor.h. Renamed memory.h to synch.h to better reflect
    its contents.

    Signed-off-by: Kumar Gala
    Signed-off-by: Becky Bruce
    Signed-off-by: Jon Loeliger
    Signed-off-by: Paul Mackerras

    Becky Bruce
     

19 Sep, 2005

1 commit

  • Merged ppc_asm.h between ppc32 & ppc64. The majority of the file is
    common between the two architectures excluding how a single GPR is
    saved/restored and which GPRs are non-volatile.

    Additionally, moved the ASM_CONST macro used on ppc64 into ppc_asm.h.

    Signed-off-by: Kumar Gala
    Signed-off-by: Paul Mackerras

    Kumar Gala