1. 29 3月, 2006 1 次提交
  2. 16 3月, 2006 1 次提交
    • P
      powerpc: Fix problem with time going backwards · 0a45d449
      Paul Mackerras 提交于
      The recent changes to keep gettimeofday in sync with xtime had the side
      effect that it was occasionally possible for the time reported by
      gettimeofday to go back by a microsecond.  There were two reasons:
      (1) when we recalculated the offsets used by gettimeofday every 2^31
      timebase ticks, we lost an accumulated fractional microsecond, and
      (2) because the update is done some time after the notional start of
      jiffy, if ntp is slowing the clock, it is possible to see time go backwards
      when the timebase factor gets reduced.
      
      This fixes it by (a) slowing the gettimeofday clock by about 1us in
      2^31 timebase ticks (a factor of less than 1 in 3.7 million), and (b)
      adjusting the timebase offsets in the rare case that the gettimeofday
      result could possibly go backwards (i.e. when ntp is slowing the clock
      and the timer interrupt is late).  In this case the adjustment will
      reduce to zero eventually because of (a).
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      0a45d449
  3. 27 2月, 2006 1 次提交
  4. 24 2月, 2006 1 次提交
    • P
      powerpc: Implement accurate task and CPU time accounting · c6622f63
      Paul Mackerras 提交于
      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/<pid>/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: NPaul Mackerras <paulus@samba.org>
      c6622f63
  5. 20 2月, 2006 1 次提交
    • P
      powerpc: Keep xtime and gettimeofday in sync · 092b8f34
      Paul Mackerras 提交于
      This fixes a regression which was introduced by moving ppc32 to use
      the same sort of lockless gettimeofday as ppc64 has been using for
      some time.  This involves getting the timebase and performing some
      simple arithmetic to convert it to seconds and microseconds.  However,
      the factor and offset used there weren't being updated when NTP
      varied the tick length using adjtimex.  64-bit didn't notice the
      problem because it had a hook in the 32-bit adjtimex compat routine
      that attempted to work out what the generic timekeeping code would
      do and alter the factor and offset to match.  However, that code
      was very complex and it wasn't clear that it still matched what the
      generic code would do.
      
      Now we use the generic current_tick_length() routine that was recently
      added to check that the current tick will be as long as we expect; if
      not we recompute the factor and offset.  This keeps gettimeofday and
      xtime in sync.  In addition we check that gettimeofday hasn't got ahead
      of xtime on each timer interrupt; if it has, we resync.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      092b8f34
  6. 07 2月, 2006 1 次提交
  7. 13 1月, 2006 1 次提交
    • D
      [PATCH] powerpc: Remove lppaca structure from the PACA · 3356bb9f
      David Gibson 提交于
      At present the lppaca - the structure shared with the iSeries
      hypervisor and phyp - is contained within the PACA, our own low-level
      per-cpu structure.  This doesn't have to be so, the patch below
      removes it, making a separate array of lppaca structures.
      
      This saves approximately 500*NR_CPUS bytes of image size and kernel
      memory, because we don't need aligning gap between the Linux and
      hypervisor portions of every PACA.  On the other hand it means an
      extra level of dereference in many accesses to the lppaca.
      
      The patch also gets rid of several places where we assign the paca
      address to a local variable for no particular reason.
      Signed-off-by: NDavid Gibson <dwg@au1.ibm.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      3356bb9f
  8. 09 1月, 2006 1 次提交
    • D
      [PATCH] powerpc: Remove some unneeded fields from the paca · 404849bb
      David Gibson 提交于
      This patch removes several unnecessary fields from the paca:
      
      - next_jiffy_update_tb was simply unused.  Remove trivially.
      
      - The exdsi exception save area was not used.  There were plans to use
        it, but they never seem to have gone anywhere.  If they ever do, we
        can put it back.  Remove from the paca, and from asm-offsets.c
      
      - The default_decr field was used from asm, but was only ever assigned
        the value of tb_ticks_per_jiffy.  Just access tb_ticks_per_jiffy from
        asm directly instead.
      
      Built and booted on POWER5 LPAR and iSeries RS64.
      Signed-off-by: NDavid Gibson <dwg@au1.ibm.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      404849bb
  9. 18 11月, 2005 1 次提交
    • P
      powerpc: Fix delay functions for 601 processors · 6defa38b
      Paul Mackerras 提交于
      My earlier merge of delay.h introduced a timebase-based udelay for
      32-bit machines but also broke the 601, which doesn't have the
      timebase register.  This fixes it by using the 601's RTC register on
      the 601, and also moves __delay() and udelay() to be out-of-line in
      arch/powerpc/kernel/time.c.  These functions aren't really performance
      critical, after all.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      6defa38b
  10. 11 11月, 2005 1 次提交
    • B
      [PATCH] powerpc: Merge vdso's and add vdso support to 32 bits kernel · a7f290da
      Benjamin Herrenschmidt 提交于
      This patch moves the vdso's to arch/powerpc, adds support for the 32
      bits vdso to the 32 bits kernel, rename systemcfg (finally !), and adds
      some new (still untested) routines to both vdso's: clock_gettime() with
      support for CLOCK_REALTIME and CLOCK_MONOTONIC, clock_getres() (same
      clocks) and get_tbfreq() for glibc to retreive the timebase frequency.
      
      Tom,Steve: The implementation of get_tbfreq() I've done for 32 bits
      returns a long long (r3, r4) not a long. This is such that if we ever
      add support for >4Ghz timebases on ppc32, the userland interface won't
      have to change.
      
      I have tested gettimeofday() using some glibc patches in both ppc32 and
      ppc64 kernels using 32 bits userland (I haven't had a chance to test a
      64 bits userland yet, but the implementation didn't change and was
      tested earlier). I haven't tested yet the new functions.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      a7f290da
  11. 10 11月, 2005 2 次提交
  12. 07 11月, 2005 2 次提交
  13. 02 11月, 2005 2 次提交
  14. 31 10月, 2005 1 次提交
  15. 30 10月, 2005 1 次提交
    • P
      powerpc: Fix time setting bug on 32-bit · 5f6b5b97
      Paul Mackerras 提交于
      This fixes a bug where settimeofday would set the wrong parameters
      in do_gtod, resulting in gettimeofday returning a value about 4
      hours after the correct time.  The bug was that we divided a
      negative 64-bit value with do_div, which treated it as unsigned
      and gave us a result that was approximately 1.8e10 too large
      (since the divisor was 1e9).
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      5f6b5b97
  16. 26 10月, 2005 2 次提交
  17. 23 10月, 2005 1 次提交
    • P
      powerpc: Fix time code for 601 processors · 96c44507
      Paul Mackerras 提交于
      The 601 doesn't have the timebase register; instead it has an RTCL
      register that counts nanoseconds and wraps at 1000000000, and an
      RTCU register that counts seconds.  This makes the necessary changes
      for the merged time code to use the RTCL/U registers when the kernel
      is running on a 601.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      96c44507
  18. 22 10月, 2005 1 次提交
  19. 20 10月, 2005 3 次提交
  20. 23 9月, 2005 1 次提交
  21. 21 9月, 2005 1 次提交
  22. 08 9月, 2005 1 次提交
  23. 06 9月, 2005 1 次提交
  24. 29 8月, 2005 3 次提交
  25. 30 6月, 2005 4 次提交
  26. 28 6月, 2005 1 次提交
  27. 23 6月, 2005 1 次提交
  28. 01 6月, 2005 1 次提交
  29. 26 5月, 2005 1 次提交
    • S
      [PATCH] ppc64: fix initialisation of gettimeofday calculations · 8f80e5c9
      Stephen Rothwell 提交于
      On PPC64, we keep track of when we need to update jiffies (and the
      variables used to calculate the time of day) based on the time base.
      
      If the time base frequence is sufficiently high compared to the
      processor clock frequency, then it is possible for the time of day
      variables to be corrupted at the time of the first decrementer interrupt
      we take.  This became obvious on a legacy iSeries where the time base
      frequency is the same as the processor clock.
      
      This one line patch fixes the initialisation so that the time of day
      variables and the indicator we use to tell when updates are due are
      better synchronised.
      Signed-off-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      8f80e5c9