19 Dec, 2007

1 commit

  • Resolve the following regression of a choppy, almost unusable laptop:

    http://lkml.org/lkml/2007/12/7/299
    http://bugzilla.kernel.org/show_bug.cgi?id=9525

    A previous version of the code did the reprogramming of the broadcast
    device in the return from idle code. This was removed, but the logic in
    tick_handle_oneshot_broadcast() was kept the same.

    When a broadcast interrupt happens we signal the expiry to all CPUs
    which have an expired event. If none of the CPUs has an expired event,
    which can happen in dyntick mode, then we reprogram the broadcast
    device. We do not reprogram otherwise, but this is only correct if all
    CPUs, which are in the idle broadcast state have been woken up.

    The code ignores, that there might be pending not yet expired events on
    other CPUs, which are in the idle broadcast state. So the delivery of
    those events can be delayed for quite a time.

    Change the tick_handle_oneshot_broadcast() function to check for CPUs,
    which are in broadcast state and are not woken up by the current event,
    and enforce the rearming of the broadcast device for those CPUs.

    Signed-off-by: Thomas Gleixner
    Signed-off-by: Ingo Molnar

    Thomas Gleixner
     

08 Dec, 2007

1 commit


28 Nov, 2007

1 commit

  • David Miller reported soft lockup false-positives that trigger
    on NOHZ due to CPUs idling for more than 10 seconds.

    The solution is touch the softlockup watchdog when we return from
    idle. (by definition we are not 'locked up' when we were idle)

    http://bugzilla.kernel.org/show_bug.cgi?id=9409

    Reported-by: David Miller
    Signed-off-by: Thomas Gleixner
    Signed-off-by: Ingo Molnar

    Thomas Gleixner
     

27 Nov, 2007

1 commit

  • Michael Kerrisk reported that a long standing bug in the adjtimex()
    system call causes glibc's adjtime(3) function to deliver the wrong
    results if 'delta' is NULL.

    add the ADJ_OFFSET_SS_READ API detail, which will be used by glibc
    to fix this API compatibility bug.

    Also see: http://bugzilla.kernel.org/show_bug.cgi?id=6761

    [ mingo@elte.hu: added patch description and made it backwards compatible ]

    NOTE: the new flag is defined 0xa001 so that it returns -EINVAL on
    older kernels - this way glibc can use it safely. Suggested by Ulrich
    Drepper.

    Acked-by: Ulrich Drepper
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    John Stultz
     

17 Nov, 2007

1 commit

  • Fix a typo in ntp.c that has caused updating of the persistent (RTC)
    clock when synced to NTP to behave erratically.

    When debugging a freeze that arises on my AMD64 machines when I
    run the ntpd service, I added a number of printk's to monitor the
    sync_cmos_clock procedure. I discovered that it was not syncing to
    cmos RTC every 11 minutes as documented, but instead would keep trying
    every second for hours at a time. The reason turned out to be a typo
    in sync_cmos_clock, where it attempts to ensure that
    update_persistent_clock is called very close to 500 msec. after a 1
    second boundary (required by the PC RTC's spec). That typo referred to
    "xtime" in one spot, rather than "now", which is derived from "xtime"
    but not equal to it. This makes the test erratic, creating a
    "coin-flip" that decides when update_persistent_clock is called - when
    it is called, which is rarely, it may be at any time during the one
    second period, rather than close to 500 msec, so the value written is
    needlessly incorrect, too.

    Signed-off-by: David P. Reed
    Signed-off-by: Thomas Gleixner

    David P. Reed
     

06 Nov, 2007

1 commit


29 Oct, 2007

2 commits


20 Oct, 2007

2 commits

  • * 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: (41 commits)
    ACPICA: hw: Don't carry spinlock over suspend
    ACPICA: hw: remove use_lock flag from acpi_hw_register_{read, write}
    ACPI: cpuidle: port idle timer suspend/resume workaround to cpuidle
    ACPI: clean up acpi_enter_sleep_state_prep
    Hibernation: Make sure that ACPI is enabled in acpi_hibernation_finish
    ACPI: suppress uninitialized var warning
    cpuidle: consolidate 2.6.22 cpuidle branch into one patch
    ACPI: thinkpad-acpi: skip blanks before the data when parsing sysfs
    ACPI: AC: Add sysfs interface
    ACPI: SBS: Add sysfs alarm
    ACPI: SBS: Add ACPI_PROCFS around procfs handling code.
    ACPI: SBS: Add support for power_supply class (and sysfs)
    ACPI: SBS: Make SBS reads table-driven.
    ACPI: SBS: Simplify data structures in SBS
    ACPI: SBS: Split host controller (ACPI0001) from SBS driver (ACPI0002)
    ACPI: EC: Add new query handler to list head.
    ACPI: Add acpi_bus_generate_event4() function
    ACPI: Battery: add sysfs alarm
    ACPI: Battery: Add sysfs support
    ACPI: Battery: Misc clean-ups, no functional changes
    ...

    Fix up conflicts in drivers/misc/thinkpad_acpi.[ch] manually

    Linus Torvalds
     
  • kernel/time/clocksource.c: Convert list_for_each to
    list_for_each_entry in clocksource_resume(),
    sysfs_override_clocksource() and show_available_clocksources()

    Signed-off-by: Matthias Kaehlcke
    Acked-by: Thomas Gleixner
    Cc: john stultz
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Matthias Kaehlcke
     

18 Oct, 2007

1 commit


17 Oct, 2007

4 commits

  • To avoid lock contention, we distribute the sched_timer calls across the
    cpus so they do not trigger at the same instant. However, I used NR_CPUS,
    which can cause needless grouping on small smp systems depending on your
    kernel config. This patch converts to using num_possible_cpus() so we
    spread it as evenly as possible on every machine.

    Briefly tested w/ NR_CPUS=255 and verified reduced contention.

    Signed-off-by: John Stultz
    Acked-by: Thomas Gleixner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    john stultz
     
  • - remove the no longer required __attribute__((weak)) of xtime_lock
    - remove the following no longer used EXPORT_SYMBOL's:
    - xtime
    - xtime_lock

    Signed-off-by: Adrian Bunk
    Cc: Thomas Gleixner
    Cc: john stultz
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     
  • smp_call_function_single() now knows how to call the function on the
    current cpu.

    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Signed-off-by: Avi Kivity
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Avi Kivity
     
  • improve performance of sys_time(). sys_time() returns time in seconds,
    but it does so by calling do_gettimeofday() and then returning the
    tv_sec portion of the GTOD time. But the data structure "xtime", which
    is updated by every timer/scheduler tick, already offers HZ granularity
    time.

    the patch improves the sysbench oltp macrobenchmark by 4-5% on an AMD
    dual-core system:

    v2.6.23:

    #threads

    1: transactions: 4073 (407.23 per sec.)
    2: transactions: 8530 (852.81 per sec.)
    3: transactions: 8321 (831.88 per sec.)
    4: transactions: 8407 (840.58 per sec.)
    5: transactions: 8070 (806.74 per sec.)

    v2.6.23 + sys_time-speedup.patch:

    1: transactions: 4281 (428.09 per sec.)
    2: transactions: 8910 (890.85 per sec.)
    3: transactions: 8659 (865.79 per sec.)
    4: transactions: 8676 (867.34 per sec.)
    5: transactions: 8532 (852.91 per sec.)

    and by 4-5% on an Intel dual-core system too:

    2.6.23:

    1: transactions: 4560 (455.94 per sec.)
    2: transactions: 10094 (1009.30 per sec.)
    3: transactions: 9755 (975.36 per sec.)
    4: transactions: 9859 (985.78 per sec.)
    5: transactions: 9701 (969.72 per sec.)

    2.6.23 + sys_time-speedup.patch:

    1: transactions: 4779 (477.84 per sec.)
    2: transactions: 10103 (1010.14 per sec.)
    3: transactions: 10141 (1013.93 per sec.)
    4: transactions: 10371 (1036.89 per sec.)
    5: transactions: 10178 (1017.50 per sec.)

    (the more CPUs the system has, the more speedup this patch gives for
    this particular workload.)

    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner
    Signed-off-by: Linus Torvalds

    Ingo Molnar
     

15 Oct, 2007

1 commit

  • The 64bit SMP bootup is slightly different to the 32bit one. It enables
    the boot CPU local APIC timer before all CPUs are brought up. Some AMD C1E
    systems have the C1E feature flag only set in the secondary CPU. Due to
    the early enable of the boot CPU local APIC timer the APIC timer is
    registered as a fully functional device. When we detect the wreckage during
    the bringup of the secondary CPU, we need to force the boot CPU into
    broadcast mode.

    Add a new notifier reason and implement the force broadcast in the clock
    events layer.

    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     

13 Oct, 2007

3 commits


10 Oct, 2007

1 commit

  • commit e5a16b1f9eec0af7cfa0830304b41c1c0833cf9f
    Author: Len Brown
    Date: Tue Oct 2 23:44:44 2007 -0400

    cpuidle: shrink diff

    processor_idle.c | 440 +++++++++++++++++++++++++++++++++++++++++--
    1 file changed, 429 insertions(+), 11 deletions(-)

    Signed-off-by: Len Brown

    commit dfbb9d5aedfb18848a3e0d6f6e3e4969febb209c
    Author: Len Brown
    Date: Wed Sep 26 02:17:55 2007 -0400

    cpuidle: reduce diff size

    Reduces the cpuidle processor_idle.c diff vs 2.6.22 from this
    processor_idle.c | 2006 ++++++++++++++++++++++++++-----------------
    1 file changed, 1219 insertions(+), 787 deletions(-)

    to this:
    processor_idle.c | 502 +++++++++++++++++++++++++++++++++++++++----
    1 file changed, 458 insertions(+), 44 deletions(-)

    ...for the purpose of making the cpuilde patch less invasive
    and easier to review.

    no functional changes. build tested only.

    Signed-off-by: Len Brown

    commit 889172fc915f5a7fe20f35b133cbd205ce69bf6c
    Author: Venki Pallipadi
    Date: Thu Sep 13 13:40:05 2007 -0700

    cpuidle: Retain old ACPI policy for !CONFIG_CPU_IDLE

    Retain the old policy in processor_idle, so that when CPU_IDLE is not
    configured, old C-state policy will still be used. This provides a
    clean gradual migration path from old ACPI policy to new cpuidle
    based policy.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit 9544a8181edc7ecc33b3bfd69271571f98ed08bc
    Author: Venki Pallipadi
    Date: Thu Sep 13 13:39:17 2007 -0700

    cpuidle: Configure governors by default

    Quoting Len "Do not give an option to users to shoot themselves in the foot".

    Remove the configurability of ladder and menu governors as they are
    needed for default policy of cpuidle. That way users will not be able to
    have cpuidle without any policy loosing all C-state power savings.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit 8975059a2c1e56cfe83d1bcf031bcf4cb39be743
    Author: Adam Belay
    Date: Tue Aug 21 18:27:07 2007 -0400

    CPUIDLE: load ACPI properly when CPUIDLE is disabled

    Change the registration return codes for when CPUIDLE
    support is not compiled into the kernel. As a result, the ACPI
    processor driver will load properly even if CPUIDLE is unavailable.
    However, it may be possible to cleanup the ACPI processor driver further
    and eliminate some dead code paths.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit e0322e2b58dd1b12ec669bf84693efe0dc2414a8
    Author: Adam Belay
    Date: Tue Aug 21 18:26:06 2007 -0400

    CPUIDLE: remove cpuidle_get_bm_activity()

    Remove cpuidle_get_bm_activity() and updates governors
    accordingly.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit 18a6e770d5c82ba26653e53d240caa617e09e9ab
    Author: Adam Belay
    Date: Tue Aug 21 18:25:58 2007 -0400

    CPUIDLE: max_cstate fix

    Currently max_cstate is limited to 0, resulting in no idle processor
    power management on ACPI platforms. This patch restores the value to
    the array size.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit 1fdc0887286179b40ce24bcdbde663172e205ef0
    Author: Adam Belay
    Date: Tue Aug 21 18:25:40 2007 -0400

    CPUIDLE: handle BM detection inside the ACPI Processor driver

    Update the ACPI processor driver to detect BM activity and
    limit state entry depth internally, rather than exposing such
    requirements to CPUIDLE. As a result, CPUIDLE can drop this
    ACPI-specific interface and become more platform independent. BM
    activity is now handled much more aggressively than it was in the
    original implementation, so some testing coverage may be needed to
    verify that this doesn't introduce any DMA buffer under-run issues.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit 0ef38840db666f48e3cdd2b769da676c57228dd9
    Author: Adam Belay
    Date: Tue Aug 21 18:25:14 2007 -0400

    CPUIDLE: menu governor updates

    Tweak the menu governor to more effectively handle non-timer
    break events. Non-timer break events are detected by comparing the
    actual sleep time to the expected sleep time. In future revisions, it
    may be more reliable to use the timer data structures directly.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit bb4d74fca63fa96cf3ace644b15ae0f12b7df5a1
    Author: Adam Belay
    Date: Tue Aug 21 18:24:40 2007 -0400

    CPUIDLE: fix 'current_governor' sysfs entry

    Allow the "current_governor" sysfs entry to properly handle
    input terminated with '\n'.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit df3c71559bb69b125f1a48971bf0d17f78bbdf47
    Author: Len Brown
    Date: Sun Aug 12 02:00:45 2007 -0400

    cpuidle: fix IA64 build (again)

    Signed-off-by: Len Brown

    commit a02064579e3f9530fd31baae16b1fc46b5a7bca8
    Author: Venkatesh Pallipadi
    Date: Sun Aug 12 01:39:27 2007 -0400

    cpuidle: Remove support for runtime changing of max_cstate

    Remove support for runtime changeability of max_cstate. Drivers can use
    use latency APIs.

    max_cstate can still be used as a boot time option and dmi override.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit 0912a44b13adf22f5e3f607d263aed23b4910d7e
    Author: Venkatesh Pallipadi
    Date: Sun Aug 12 01:39:16 2007 -0400

    cpuidle: Remove ACPI cstate_limit calls from ipw2100

    ipw2100 already has code to use accetable_latency interfaces to limit the
    C-state. Remove the calls to acpi_set_cstate_limit and acpi_get_cstate_limit
    as they are redundant.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    commit c649a76e76be6bff1fd770d0a775798813a3f6e0
    Author: Venkatesh Pallipadi
    Date: Sun Aug 12 01:35:39 2007 -0400

    cpuidle: compile fix for pause and resume functions

    Fix the compilation failure when cpuidle is not compiled in.

    Signed-off-by: Venkatesh Pallipadi
    Acked-by: Adam Belay
    Signed-off-by: Len Brown

    commit 2305a5920fb8ee6ccec1c62ade05aa8351091d71
    Author: Adam Belay
    Date: Thu Jul 19 00:49:00 2007 -0400

    cpuidle: re-write

    Some portions have been rewritten to make the code cleaner and lighter
    weight. The following is a list of changes:

    1.) the state name is now included in the sysfs interface
    2.) detection, hotplug, and available state modifications are handled by
    CPUIDLE drivers directly
    3.) the CPUIDLE idle handler is only ever installed when at least one
    cpuidle_device is enabled and ready
    4.) the menu governor BM code no longer overflows
    5.) the sysfs attributes are now printed as unsigned integers, avoiding
    negative values
    6.) a variety of other small cleanups

    Also, Idle drivers are no longer swappable during runtime through the
    CPUIDLE sysfs inteface. On i386 and x86_64 most idle handlers (e.g.
    poll, mwait, halt, etc.) don't benefit from an infrastructure that
    supports multiple states, so I think using a more general case idle
    handler selection mechanism would be cleaner.

    Signed-off-by: Adam Belay
    Acked-by: Venkatesh Pallipadi
    Acked-by: Shaohua Li
    Signed-off-by: Len Brown

    commit df25b6b56955714e6e24b574d88d1fd11f0c3ee5
    Author: Len Brown
    Date: Tue Jul 24 17:08:21 2007 -0400

    cpuidle: fix IA64 buid

    Signed-off-by: Len Brown

    commit fd6ada4c14488755ff7068860078c437431fbccd
    Author: Adrian Bunk
    Date: Mon Jul 9 11:33:13 2007 -0700

    cpuidle: static

    make cpuidle_replace_governor() static

    Signed-off-by: Adrian Bunk
    Cc: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit c1d4a2cebcadf2429c0c72e1d29aa2a9684c32e0
    Author: Adrian Bunk
    Date: Tue Jul 3 00:54:40 2007 -0400

    cpuidle: static

    This patch makes the needlessly global struct menu_governor static.

    Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit dbf8780c6e8d572c2c273da97ed1cca7608fd999
    Author: Andrew Morton
    Date: Tue Jul 3 00:49:14 2007 -0400

    export symbol tick_nohz_get_sleep_length

    ERROR: "tick_nohz_get_sleep_length" [drivers/cpuidle/governors/menu.ko] undefined!
    ERROR: "tick_nohz_get_idle_jiffies" [drivers/cpuidle/governors/menu.ko] undefined!

    And please be sure to get your changes to core kernel suitably reviewed.

    Cc: Adam Belay
    Cc: Venki Pallipadi
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: john stultz
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 29f0e248e7017be15f99febf9143a2cef00b2961
    Author: Andrew Morton
    Date: Tue Jul 3 00:43:04 2007 -0400

    tick.h needs hrtimer.h

    It uses hrtimers.

    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit e40cede7d63a029e92712a3fe02faee60cc38fb4
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:40:34 2007 -0400

    cpuidle: first round of documentation updates

    Documentation changes based on Pavel's feedback.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 83b42be2efece386976507555c29e7773a0dfcd1
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:39:25 2007 -0400

    cpuidle: add rating to the governors and pick the one with highest rating by default

    Introduce a governor rating scheme to pick the right governor by default.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit d2a74b8c5e8f22def4709330d4bfc4a29209b71c
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:38:08 2007 -0400

    cpuidle: make cpuidle sysfs driver governor switch off by default

    Make default cpuidle sysfs to show current_governor and current_driver in
    read-only mode. More elaborate available_governors and available_drivers with
    writeable current_governor and current_driver interface only appear with
    "cpuidle_sysfs_switch" boot parameter.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 1f60a0e80bf83cf6b55c8845bbe5596ed8f6307b
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:37:00 2007 -0400

    cpuidle: menu governor: change the early break condition

    Change the C-state early break out algorithm in menu governor.

    We only look at early breakouts that result in wakeups shorter than idle
    state's target_residency. If such a breakout is frequent enough, eliminate
    the particular idle state upto a timeout period.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 45a42095cf64b003b4a69be3ce7f434f97d7af51
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:35:38 2007 -0400

    cpuidle: fix uninitialized variable in sysfs routine

    Fix the uninitialized usage of ret.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 80dca7cdba3e6ee13eae277660873ab9584eb3be
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:34:16 2007 -0400

    cpuidle: reenable /proc/acpi//power interface for the time being

    Keep /proc/acpi/processor/CPU*/power around for a while as powertop depends
    on it. It will be marked deprecated and removed in future. powertop can use
    cpuidle interfaces instead.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 589c37c2646c5e3813a51255a5ee1159cb4c33fc
    Author: Venki Pallipadi
    Date: Tue Jul 3 00:32:37 2007 -0400

    cpuidle: menu governor and hrtimer compile fix

    Compile fix for menu governor.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 0ba80bd9ab3ed304cb4f19b722e4cc6740588b5e
    Author: Len Brown
    Date: Thu May 31 22:51:43 2007 -0400

    cpuidle: build fix - cpuidle vs ipw2100 module

    ERROR: "acpi_set_cstate_limit" [drivers/net/wireless/ipw2100.ko] undefined!

    Signed-off-by: Len Brown

    commit d7d8fa7f96a7f7682be7c6cc0cc53fa7a18c3b58
    Author: Adam Belay
    Date: Sat Mar 24 03:47:07 2007 -0400

    cpuidle: add the 'menu' governor

    Here is my first take at implementing an idle PM governor that takes
    full advantage of NO_HZ. I call it the 'menu' governor because it
    considers the full list of idle states before each entry.

    I've kept the implementation fairly simple. It attempts to guess the
    next residency time and then chooses a state that would meet at least
    the break-even point between power savings and entry cost. To this end,
    it selects the deepest idle state that satisfies the following
    constraints:
    1. If the idle time elapsed since bus master activity was detected
    is below a threshold (currently 20 ms), then limit the selection
    to C2-type or above.
    2. Do not choose a state with a break-even residency that exceeds
    the expected time remaining until the next timer interrupt.
    3. Do not choose a state with a break-even residency that exceeds
    the elapsed time between the last pair of break events,
    excluding timer interrupts.

    This governor has an advantage over "ladder" governor because it
    proactively checks how much time remains until the next timer interrupt
    using the tick infrastructure. Also, it handles device interrupt
    activity more intelligently by not including timer interrupts in break
    event calculations. Finally, it doesn't make policy decisions using the
    number of state entries, which can have variable residency times (NO_HZ
    makes these potentially very large), and instead only considers sleep
    time deltas.

    The menu governor can be selected during runtime using the cpuidle sysfs
    interface like so:
    "echo "menu" > /sys/devices/system/cpu/cpuidle/current_governor"

    Signed-off-by: Adam Belay
    Signed-off-by: Len Brown

    commit a4bec7e65aa3b7488b879d971651cc99a6c410fe
    Author: Adam Belay
    Date: Sat Mar 24 03:47:03 2007 -0400

    cpuidle: export time until next timer interrupt using NO_HZ

    Expose information about the time remaining until the next
    timer interrupt expires by utilizing the dynticks infrastructure.
    Also modify the main idle loop to allow dynticks to handle
    non-interrupt break events (e.g. DMA). Finally, expose sleep ticks
    information to external code. Thomas Gleixner is responsible for much
    of the code in this patch. However, I've made some additional changes,
    so I'm probably responsible if there are any bugs or oversights :)

    Signed-off-by: Adam Belay
    Signed-off-by: Len Brown

    commit 2929d8996fbc77f41a5ff86bb67cdde3ca7d2d72
    Author: Adam Belay
    Date: Sat Mar 24 03:46:58 2007 -0400

    cpuidle: governor API changes

    This patch prepares cpuidle for the menu governor. It adds an optional
    stage after idle state entry to give the governor an opportunity to
    check why the state was exited. Also it makes sure the idle loop
    returns after each state entry, allowing the appropriate dynticks code
    to run.

    Signed-off-by: Adam Belay
    Signed-off-by: Len Brown

    commit 3a7fd42f9825c3b03e364ca59baa751bb350775f
    Author: Venki Pallipadi
    Date: Thu Apr 26 00:03:59 2007 -0700

    cpuidle: hang fix

    Prevent hang on x86-64, when ACPI processor driver is added as a module on
    a system that does not support C-states.

    x86-64 expects all idle handlers to enable interrupts before returning from
    idle handler. This is due to enter_idle(), exit_idle() races. Make
    cpuidle_idle_call() confirm to this when there is no pm_idle_old.

    Also, cpuidle look at the return values of attch_driver() and set
    current_driver to NULL if attach fails on all CPUs.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 4893339a142afbd5b7c01ffadfd53d14746e858e
    Author: Shaohua Li
    Date: Thu Apr 26 10:40:09 2007 +0800

    cpuidle: add support for max_cstate limit

    With CPUIDLE framework, the max_cstate (to limit max cpu c-state)
    parameter is ingored. Some systems require it to ignore C2/C3
    and some drivers like ipw require it too.

    Signed-off-by: Shaohua Li
    Signed-off-by: Len Brown

    commit 43bbbbe1cb998cbd2df656f55bb3bfe30f30e7d1
    Author: Shaohua Li
    Date: Thu Apr 26 10:40:13 2007 +0800

    cpuidle: add cpuidle_fore_redetect_devices API

    add cpuidle_force_redetect_devices API,
    which forces all CPU redetect idle states.
    Next patch will use it.

    Signed-off-by: Shaohua Li
    Signed-off-by: Len Brown

    commit d1edadd608f24836def5ec483d2edccfb37b1d19
    Author: Shaohua Li
    Date: Thu Apr 26 10:40:01 2007 +0800

    cpuidle: fix sysfs related issue

    Fix the cpuidle sysfs issue.
    a. make kobject dynamicaly allocated
    b. fixed sysfs init issue to avoid suspend/resume issue

    Signed-off-by: Shaohua Li
    Signed-off-by: Len Brown

    commit 7169a5cc0d67b263978859672e86c13c23a5570d
    Author: Randy Dunlap
    Date: Wed Mar 28 22:52:53 2007 -0400

    cpuidle: 1-bit field must be unsigned

    A 1-bit bitfield has no room for a sign bit.
    drivers/cpuidle/governors/ladder.c:54:16: error: dubious bitfield without explicit `signed' or `unsigned'

    Signed-off-by: Randy Dunlap
    Cc: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 4658620158dc2fbd9e4bcb213c5b6fb5d05ba7d4
    Author: Venkatesh Pallipadi
    Date: Wed Mar 28 22:52:41 2007 -0400

    cpuidle: fix boot hang

    Patch for cpuidle boot hang reported by Larry Finger here.
    http://www.ussg.iu.edu/hypermail/linux/kernel/0703.2/2025.html

    Signed-off-by: Venkatesh Pallipadi
    Cc: Larry Finger
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit c17e168aa6e5fe3851baaae8df2fbc1cf11443a9
    Author: Len Brown
    Date: Wed Mar 7 04:37:53 2007 -0500

    cpuidle: ladder does not depend on ACPI

    build fix for CONFIG_ACPI=n

    In file included from drivers/cpuidle/governors/ladder.c:21:
    include/acpi/processor.h:88: error: expected specifier-qualifier-list before ‘acpi_integer’
    include/acpi/processor.h:106: error: expected specifier-qualifier-list before ‘acpi_integer’
    include/acpi/processor.h:168: error: expected specifier-qualifier-list before ‘acpi_handle’

    Signed-off-by: Len Brown

    commit 8c91d958246bde68db0c3f0c57b535962ce861cb
    Author: Adrian Bunk
    Date: Tue Mar 6 02:29:40 2007 -0800

    cpuidle: make code static

    This patch makes the following needlessly global code static:
    - driver.c: __cpuidle_find_driver()
    - governor.c: __cpuidle_find_governor()
    - ladder.c: struct ladder_governor

    Signed-off-by: Adrian Bunk
    Cc: Venkatesh Pallipadi
    Cc: Adam Belay
    Cc: Shaohua Li
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 0c39dc3187094c72c33ab65a64d2017b21f372d2
    Author: Venkatesh Pallipadi
    Date: Wed Mar 7 02:38:22 2007 -0500

    cpu_idle: fix build break

    This patch fixes a build breakage with !CONFIG_HOTPLUG_CPU and
    CONFIG_CPU_IDLE.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 8112e3b115659b07df340ef170515799c0105f82
    Author: Venkatesh Pallipadi
    Date: Tue Mar 6 02:29:39 2007 -0800

    cpuidle: build fix for !CPU_IDLE

    Fix the compile issues when CPU_IDLE is not configured.

    Signed-off-by: Venkatesh Pallipadi
    Cc: Adam Belay
    Cc: Shaohua Li
    Signed-off-by: Andrew Morton
    Signed-off-by: Len Brown

    commit 1eb4431e9599cd25e0d9872f3c2c8986821839dd
    Author: Venkatesh Pallipadi
    Date: Thu Feb 22 13:54:57 2007 -0800

    cpuidle take2: Basic documentation for cpuidle

    Documentation for cpuidle infrastructure

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Adam Belay
    Signed-off-by: Shaohua Li
    Signed-off-by: Len Brown

    commit ef5f15a8b79123a047285ec2e3899108661df779
    Author: Venkatesh Pallipadi
    Date: Thu Feb 22 13:54:03 2007 -0800

    cpuidle take2: Hookup ACPI C-states driver with cpuidle

    Hookup ACPI C-states onto generic cpuidle infrastructure.

    drivers/acpi/procesor_idle.c is now a ACPI C-states driver that registers as
    a driver in cpuidle infrastructure and the policy part is removed from
    drivers/acpi/processor_idle.c. We use governor in cpuidle instead.

    Signed-off-by: Shaohua Li
    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Adam Belay
    Signed-off-by: Len Brown

    commit 987196fa82d4db52c407e8c9d5dec884ba602183
    Author: Venkatesh Pallipadi
    Date: Thu Feb 22 13:52:57 2007 -0800

    cpuidle take2: Core cpuidle infrastructure

    Announcing 'cpuidle', a new CPU power management infrastructure to manage
    idle CPUs in a clean and efficient manner.
    cpuidle separates out the drivers that can provide support for multiple types
    of idle states and policy governors that decide on what idle state to use
    at run time.
    A cpuidle driver can support multiple idle states based on parameters like
    varying power consumption, wakeup latency, etc (ACPI C-states for example).
    A cpuidle governor can be usage model specific (laptop, server,
    laptop on battery etc).
    Main advantage of the infrastructure being, it allows independent development
    of drivers and governors and allows for better CPU power management.

    A huge thanks to Adam Belay and Shaohua Li who were part of this mini-project
    since its beginning and are greatly responsible for this patchset.

    This patch:

    Core cpuidle infrastructure.
    Introduces a new abstraction layer for cpuidle:
    * which manages drivers that can support multiple idles states. Drivers
    can be generic or particular to specific hardware/platform
    * allows pluging in multiple policy governors that can take idle state policy
    decision
    * The core also has a set of sysfs interfaces with which administrato can know
    about supported drivers and governors and switch them at run time.

    Signed-off-by: Adam Belay
    Signed-off-by: Shaohua Li
    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Len Brown

    Signed-off-by: Len Brown

    Len Brown
     

08 Oct, 2007

1 commit

  • When using /proc/timer_stats on ppc64 I noticed the events/sec field wasnt
    accurate. Sometimes the integer part was incorrect due to rounding (we
    werent taking the fractional seconds into consideration).

    The fraction part is also wrong, we need to pad the printf statement and
    take the bottom three digits of 1000 times the value.

    Signed-off-by: Anton Blanchard
    Acked-by: Ingo Molnar
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Anton Blanchard
     

23 Sep, 2007

1 commit

  • In a desparate attempt to fix the suspend/resume problem on Andrews
    VAIO I added a workaround which enforced the broadcast of the oneshot
    timer on resume. This was actually resolving the problem on the VAIO
    but was just a stupid workaround, which was not tackling the root
    cause: the assignement of lower idle C-States in the ACPI processor_idle
    code. The cpuidle patches, which utilize the dynamic tick feature and
    go faster into deeper C-states exposed the problem again. The correct
    solution is the previous patch, which prevents lower C-states across
    the suspend/resume.

    Remove the enforcement code, including the conditional broadcast timer
    arming, which helped to pamper over the real problem for quite a time.
    The oneshot broadcast flag for the cpu, which runs the resume code can
    never be set at the time when this code is executed. It only gets set,
    when the CPU is entering a lower idle C-State.

    Signed-off-by: Thomas Gleixner
    Tested-by: Andrew Morton
    Cc: Len Brown
    Cc: Venkatesh Pallipadi
    Cc: Rafael J. Wysocki
    Signed-off-by: Linus Torvalds

    Thomas Gleixner
     

16 Sep, 2007

5 commits

  • Taking a cpu offline removes the cpu from the online mask before the
    CPU_DEAD notification is done. The clock events layer does the cleanup
    of the dead CPU from the CPU_DEAD notifier chain. tick_do_timer_cpu is
    used to avoid xtime lock contention by assigning the task of jiffies
    xtime updates to one CPU. If a CPU is taken offline, then this
    assignment becomes stale. This went unnoticed because most of the time
    the offline CPU went dead before the online CPU reached __cpu_die(),
    where the CPU_DEAD state is checked. In the case that the offline CPU did
    not reach the DEAD state before we reach __cpu_die(), the code in there
    goes to sleep for 100ms. Due to the stale time update assignment, the
    system is stuck forever.

    Take the assignment away when a cpu is not longer in the cpu_online_mask.
    We do this in the last call to tick_nohz_stop_sched_tick() when the offline
    CPU is on the way to the final play_dead() idle entry.

    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     
  • When a cpu goes offline it is removed from the broadcast masks. If the
    mask becomes empty the code shuts down the broadcast device. This is
    wrong, because the broadcast device needs to be ready for the online
    cpu going idle (into a c-state, which stops the local apic timer).

    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     
  • The jinxed VAIO refuses to resume without hitting keys on the keyboard
    when this is not enforced. It is unclear why the cpu ends up in a lower
    C State without notifying the clock events layer, but enforcing the
    oneshot broadcast here is safe.

    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     
  • Timekeeping resume adjusts xtime by adding the slept time in seconds and
    resets the reference value of the clock source (clock->cycle_last).
    clock->cycle last is used to calculate the delta between the last xtime
    update and the readout of the clock source in __get_nsec_offset(). xtime
    plus the offset is the current time. The resume code ignores the delta
    which had already elapsed between the last xtime update and the actual
    time of suspend. If the suspend time is short, then we can see time
    going backwards on resume.

    Suspend:
    offs_s = clock->read() - clock->cycle_last;
    now = xtime + offs_s;
    timekeeping_suspend_time = read_rtc();

    Resume:
    sleep_time = read_rtc() - timekeeping_suspend_time;
    xtime.tv_sec += sleep_time;
    clock->cycle_last = clock->read();
    offs_r = clock->read() - clock->cycle_last;
    now = xtime + offs_r;

    if sleep_time_seconds == 0 and offs_r < offs_s, then time goes
    backwards.

    Fix this by storing the offset from the last xtime update and add it to
    xtime during resume, when we reset clock->cycle_last:

    sleep_time = read_rtc() - timekeeping_suspend_time;
    xtime.tv_sec += sleep_time;
    xtime += offs_s; /* Fixup xtime offset at suspend time */
    clock->cycle_last = clock->read();
    offs_r = clock->read() - clock->cycle_last;
    now = xtime + offs_r;

    Thanks to Marcelo for tracking this down on the OLPC and providing the
    necessary details to analyze the root cause.

    Signed-off-by: Thomas Gleixner
    Cc: John Stultz
    Cc: Tosatti

    Thomas Gleixner
     
  • Lockdep complains about the access of rtc in timekeeping_suspend
    inside the interrupt disabled region of the write locked xtime lock.
    Move the access outside.

    Signed-off-by: Thomas Gleixner
    Cc: John Stultz

    Thomas Gleixner
     

12 Sep, 2007

1 commit


12 Aug, 2007

1 commit


01 Aug, 2007

1 commit


26 Jul, 2007

2 commits

  • This avoids xtime lag seen with dynticks, because while 'xtime' itself
    is still not updated often, we keep a 'xtime_cache' variable around that
    contains the approximate real-time that _is_ updated each time we do a
    'update_wall_time()', and is thus never off by more than one tick.

    IOW, this restores the original semantics for 'xtime' users, as long as
    you use the proper abstraction functions (ie 'current_kernel_time()' or
    'get_seconds()' depending on whether you want a timespec or just the
    seconds field).

    [ Updated Patch. As penance for my sins I've also yanked another #ifdef
    that was added to avoid the xtime lag w/ hrtimers. ]

    Signed-off-by: John Stultz
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Signed-off-by: Linus Torvalds

    john stultz
     
  • This avoids use of the kernel-internal "xtime" variable directly outside
    of the actual time-related functions. Instead, use the helper functions
    that we already have available to us.

    This doesn't actually change any behaviour, but this will allow us to
    fix the fact that "xtime" isn't updated very often with CONFIG_NO_HZ
    (because much of the realtime information is maintained as separate
    offsets to 'xtime'), which has caused interfaces that use xtime directly
    to get a time that is out of sync with the real-time clock by up to a
    third of a second or so.

    Signed-off-by: John Stultz
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Signed-off-by: Linus Torvalds

    john stultz
     

22 Jul, 2007

5 commits

  • i386 and sparc64 have the identical code to update the cmos clock. Move it
    into kernel/time/ntp.c as there are other architectures coming along with the
    same requirements.

    [akpm@linux-foundation.org: build fixes]
    Signed-off-by: Thomas Gleixner
    Cc: Chris Wright
    Cc: Ingo Molnar
    Cc: john stultz
    Cc: David Miller
    Cc: Roman Zippel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Thomas Gleixner
     
  • Add some more debug information to the hrtimer and clock events code.

    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner
    Cc: john stultz
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ingo Molnar
     
  • After discussing w/ Thomas over IRC, it seems the issue is the sched tick
    fires on every cpu at the same time, causing extra lock contention.

    This smaller change, adds an extra offset per cpu so the ticks don't line up.
    This patch also drops the idle latency from 40us down to under 20us.

    Signed-off-by: john stultz
    Signed-off-by: Thomas Gleixner
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    john stultz
     
  • When a device is replaced by a better rated device, then the broadcast
    mode needs to be evaluated again. When the new device has no requirement
    for broadcasting, then the broadcast bits for the CPU must be cleared.

    Signed-off-by: Thomas Gleixner
    Cc: john stultz
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Thomas Gleixner
     
  • We need to make sure, that the clockevent devices are resumed, before
    the tick is resumed. The current resume logic does not guarantee this.

    Add CLOCK_EVT_MODE_RESUME and call the set mode functions of the clock
    event devices before resuming the tick / oneshot functionality.

    Fixup the existing users.

    Thanks to Nigel Cunningham for tracking down a long standing thinko,
    which affected the jinxed VAIO.

    [akpm@linux-foundation.org: xen build fix]
    Signed-off-by: Thomas Gleixner
    Cc: john stultz
    Cc: Rusty Russell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Thomas Gleixner
     

21 Jul, 2007

2 commits


20 Jul, 2007

1 commit