From: Linus Torvalds Date: Fri, 28 May 2010 23:14:17 +0000 (-0700) Subject: Merge branch 'idle-release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb... X-Git-Tag: v2.6.35-rc1~19 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e4f2e5eaac8f5f903ca4a8cc944d26e68745d6bb;p=platform%2Fkernel%2Flinux-exynos.git Merge branch 'idle-release' of git://git./linux/kernel/git/lenb/linux-idle-2.6 * 'idle-release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-idle-2.6: intel_idle: native hardware cpuidle driver for latest Intel processors ACPI: acpi_idle: touch TS_POLLING only in the non-MWAIT case acpi_pad: uses MONITOR/MWAIT, so it doesn't need to clear TS_POLLING sched: clarify commment for TS_POLLING ACPI: allow a native cpuidle driver to displace ACPI cpuidle: make cpuidle_curr_driver static cpuidle: add cpuidle_unregister_driver() error check cpuidle: fail to register if !CONFIG_CPU_IDLE --- e4f2e5eaac8f5f903ca4a8cc944d26e68745d6bb diff --cc arch/x86/include/asm/thread_info.h index 62ba940,8121869..f0b6e5d --- a/arch/x86/include/asm/thread_info.h +++ b/arch/x86/include/asm/thread_info.h @@@ -239,9 -241,10 +239,9 @@@ static inline struct thread_info *curre #define TS_USEDFPU 0x0001 /* FPU was used by this task this quantum (SMP) */ #define TS_COMPAT 0x0002 /* 32bit syscall active (64BIT)*/ - #define TS_POLLING 0x0004 /* true if in idle loop - and not sleeping */ + #define TS_POLLING 0x0004 /* idle task polling need_resched, + skip sending interrupt */ #define TS_RESTORE_SIGMASK 0x0008 /* restore signal mask in do_signal() */ -#define TS_XSAVE 0x0010 /* Use xsave/xrstor */ #define tsk_is_polling(t) (task_thread_info(t)->status & TS_POLLING) diff --cc drivers/acpi/processor_idle.c index 13c6cb7,a4166e2..2e8c27d --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c @@@ -908,10 -916,11 +909,11 @@@ static int acpi_idle_enter_simple(struc sleep_ticks = us_to_pm_timer_ticks(idle_time); /* Tell the scheduler how much we idled: */ - sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS); + sched_clock_idle_wakeup_event(idle_time_ns); local_irq_enable(); - current_thread_info()->status |= TS_POLLING; + if (cx->entry_method != ACPI_CSTATE_FFH) + current_thread_info()->status |= TS_POLLING; cx->usage++; @@@ -1025,10 -1032,11 +1028,11 @@@ static int acpi_idle_enter_bm(struct cp sleep_ticks = us_to_pm_timer_ticks(idle_time); /* Tell the scheduler how much we idled: */ - sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS); + sched_clock_idle_wakeup_event(idle_time_ns); local_irq_enable(); - current_thread_info()->status |= TS_POLLING; + if (cx->entry_method != ACPI_CSTATE_FFH) + current_thread_info()->status |= TS_POLLING; cx->usage++;