Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 277208
b: refs/heads/master
c: 280f067
h: refs/heads/master
v: v3
  • Loading branch information
Frederic Weisbecker authored and Paul E. McKenney committed Dec 11, 2011
1 parent 232d417 commit 04b8e08
Show file tree
Hide file tree
Showing 20 changed files with 100 additions and 78 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 867f236bd12f5091df6dc7cc75f94d7fd982d78a
refs/heads/master: 280f06774afedf849f0b34248ed6aff57d0f6908
4 changes: 2 additions & 2 deletions trunk/arch/arm/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ void cpu_idle(void)

/* endless idle loop with no priority at all */
while (1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
leds_event(led_idle_start);
while (!need_resched()) {
#ifdef CONFIG_HOTPLUG_CPU
Expand Down Expand Up @@ -213,7 +213,7 @@ void cpu_idle(void)
}
}
leds_event(led_idle_end);
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
schedule();
preempt_disable();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/avr32/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ void cpu_idle(void)
{
/* endless idle loop with no priority at all */
while (1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
while (!need_resched())
cpu_idle_sleep();
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
schedule();
preempt_disable();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/blackfin/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,10 @@ void cpu_idle(void)
#endif
if (!idle)
idle = default_idle;
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
while (!need_resched())
idle();
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
schedule();
preempt_disable();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/microblaze/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,10 @@ void cpu_idle(void)
if (!idle)
idle = default_idle;

tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
while (!need_resched())
idle();
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();

preempt_enable_no_resched();
schedule();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/mips/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ void __noreturn cpu_idle(void)

/* endless idle loop with no priority at all */
while (1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
while (!need_resched() && cpu_online(cpu)) {
#ifdef CONFIG_MIPS_MT_SMTC
extern void smtc_idle_loop_hook(void);
Expand All @@ -77,7 +77,7 @@ void __noreturn cpu_idle(void)
system_state == SYSTEM_BOOTING))
play_dead();
#endif
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
schedule();
preempt_disable();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/openrisc/kernel/idle.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ void cpu_idle(void)

/* endless idle loop with no priority at all */
while (1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();

while (!need_resched()) {
check_pgt_cache();
Expand All @@ -69,7 +69,7 @@ void cpu_idle(void)
set_thread_flag(TIF_POLLING_NRFLAG);
}

tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
schedule();
preempt_disable();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/powerpc/kernel/idle.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ void cpu_idle(void)

set_thread_flag(TIF_POLLING_NRFLAG);
while (1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
while (!need_resched() && !cpu_should_die()) {
ppc64_runlatch_off();

Expand Down Expand Up @@ -93,7 +93,7 @@ void cpu_idle(void)

HMT_medium();
ppc64_runlatch_on();
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
if (cpu_should_die())
cpu_die();
Expand Down
8 changes: 4 additions & 4 deletions trunk/arch/powerpc/platforms/iseries/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -563,7 +563,7 @@ static void yield_shared_processor(void)
static void iseries_shared_idle(void)
{
while (1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
while (!need_resched() && !hvlpevent_is_pending()) {
local_irq_disable();
ppc64_runlatch_off();
Expand All @@ -577,7 +577,7 @@ static void iseries_shared_idle(void)
}

ppc64_runlatch_on();
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();

if (hvlpevent_is_pending())
process_iSeries_events();
Expand All @@ -593,7 +593,7 @@ static void iseries_dedicated_idle(void)
set_thread_flag(TIF_POLLING_NRFLAG);

while (1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
if (!need_resched()) {
while (!need_resched()) {
ppc64_runlatch_off();
Expand All @@ -610,7 +610,7 @@ static void iseries_dedicated_idle(void)
}

ppc64_runlatch_on();
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
schedule();
preempt_disable();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/s390/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,10 @@ static void default_idle(void)
void cpu_idle(void)
{
for (;;) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
while (!need_resched())
default_idle();
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
schedule();
preempt_disable();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/sh/kernel/idle.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ void cpu_idle(void)

/* endless idle loop with no priority at all */
while (1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();

while (!need_resched()) {
check_pgt_cache();
Expand All @@ -111,7 +111,7 @@ void cpu_idle(void)
start_critical_timings();
}

tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
schedule();
preempt_disable();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/sparc/kernel/process_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,12 @@ void cpu_idle(void)
set_thread_flag(TIF_POLLING_NRFLAG);

while(1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();

while (!need_resched() && !cpu_is_offline(cpu))
sparc64_yield(cpu);

tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();

preempt_enable_no_resched();

Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/tile/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ void cpu_idle(void)

/* endless idle loop with no priority at all */
while (1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
while (!need_resched()) {
if (cpu_is_offline(cpu))
BUG(); /* no HOTPLUG_CPU */
Expand All @@ -105,7 +105,7 @@ void cpu_idle(void)
local_irq_enable();
current_thread_info()->status |= TS_POLLING;
}
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
schedule();
preempt_disable();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/um/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -246,10 +246,10 @@ void default_idle(void)
if (need_resched())
schedule();

tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
nsecs = disable_timer();
idle_sleep(nsecs);
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
}
}

Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/unicore32/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,15 @@ void cpu_idle(void)
{
/* endless idle loop with no priority at all */
while (1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
while (!need_resched()) {
local_irq_disable();
stop_critical_timings();
cpu_do_idle();
local_irq_enable();
start_critical_timings();
}
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
schedule();
preempt_disable();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/x86/kernel/process_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ void cpu_idle(void)

/* endless idle loop with no priority at all */
while (1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
while (!need_resched()) {

check_pgt_cache();
Expand All @@ -116,7 +116,7 @@ void cpu_idle(void)
pm_idle();
start_critical_timings();
}
tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
schedule();
preempt_disable();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/x86/kernel/process_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ void cpu_idle(void)

/* endless idle loop with no priority at all */
while (1) {
tick_nohz_stop_sched_tick(1);
tick_nohz_idle_enter();
while (!need_resched()) {

rmb();
Expand All @@ -149,7 +149,7 @@ void cpu_idle(void)
__exit_idle();
}

tick_nohz_restart_sched_tick();
tick_nohz_idle_exit();
preempt_enable_no_resched();
schedule();
preempt_disable();
Expand Down
13 changes: 7 additions & 6 deletions trunk/include/linux/tick.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,21 +121,22 @@ static inline int tick_oneshot_mode_active(void) { return 0; }
#endif /* !CONFIG_GENERIC_CLOCKEVENTS */

# ifdef CONFIG_NO_HZ
extern void tick_nohz_stop_sched_tick(int inidle);
extern void tick_nohz_restart_sched_tick(void);
extern void tick_nohz_idle_enter(void);
extern void tick_nohz_idle_exit(void);
extern void tick_nohz_irq_exit(void);
extern ktime_t tick_nohz_get_sleep_length(void);
extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time);
extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time);
# else
static inline void tick_nohz_stop_sched_tick(int inidle)
static inline void tick_nohz_idle_enter(void)
{
if (inidle)
rcu_idle_enter();
rcu_idle_enter();
}
static inline void tick_nohz_restart_sched_tick(void)
static inline void tick_nohz_idle_exit(void)
{
rcu_idle_exit();
}

static inline ktime_t tick_nohz_get_sleep_length(void)
{
ktime_t len = { .tv64 = NSEC_PER_SEC/HZ };
Expand Down
2 changes: 1 addition & 1 deletion trunk/kernel/softirq.c
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ void irq_exit(void)
#ifdef CONFIG_NO_HZ
/* Make sure that timer wheel updates are propagated */
if (idle_cpu(smp_processor_id()) && !in_interrupt() && !need_resched())
tick_nohz_stop_sched_tick(0);
tick_nohz_irq_exit();
#endif
preempt_enable_no_resched();
}
Expand Down
Loading

0 comments on commit 04b8e08

Please sign in to comment.