Merge git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (29 commits) [POWERPC] Fix rheap alignment problem [POWERPC] Use check_legacy_ioport() for ISAPnP [POWERPC] Avoid NULL pointer in gpio1_interrupt [POWERPC] Enable generic rtc hook for the MPC8349 mITX [POWERPC] Add powerpc get/set_rtc_time interface to new generic rtc class [POWERPC] Create a "wrapper" script and use it in arch/powerpc/boot [POWERPC] fix spin lock nesting in hvc_iseries [POWERPC] EEH failure to mark pci slot as frozen. [POWERPC] update powerpc defconfig files after libata kconfig breakage [POWERPC] enable sysrq in pmac32_defconfig [POWERPC] UPIO_TSI cleanup [POWERPC] rewrite mkprep and mkbugboot in sane C [POWERPC] maple/pci iomem annotations [POWERPC] powerpc oprofile __user annotations [POWERPC] cell spufs iomem annotations [POWERPC] NULL noise removal: spufs [POWERPC] ppc math-emu needs -fno-builtin-fabs for math.c and fabs.c [POWERPC] update mpc8349_itx_defconfig and remove some debug settings [POWERPC] Always call cede in pseries dedicated idle loop [POWERPC] Fix loop logic in irq_alloc_virt() ...
This commit is contained in:
@@ -477,7 +477,6 @@ static void pseries_dedicated_idle_sleep(void)
|
||||
{
|
||||
unsigned int cpu = smp_processor_id();
|
||||
unsigned long start_snooze;
|
||||
unsigned long *smt_snooze_delay = &__get_cpu_var(smt_snooze_delay);
|
||||
|
||||
/*
|
||||
* Indicate to the HV that we are idle. Now would be
|
||||
@@ -490,9 +489,9 @@ static void pseries_dedicated_idle_sleep(void)
|
||||
* has been checked recently. If we should poll for a little
|
||||
* while, do so.
|
||||
*/
|
||||
if (*smt_snooze_delay) {
|
||||
if (__get_cpu_var(smt_snooze_delay)) {
|
||||
start_snooze = get_tb() +
|
||||
*smt_snooze_delay * tb_ticks_per_usec;
|
||||
__get_cpu_var(smt_snooze_delay) * tb_ticks_per_usec;
|
||||
local_irq_enable();
|
||||
set_thread_flag(TIF_POLLING_NRFLAG);
|
||||
|
||||
@@ -512,24 +511,7 @@ static void pseries_dedicated_idle_sleep(void)
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* If not SMT, cede processor. If CPU is running SMT
|
||||
* cede if the other thread is not idle, so that it can
|
||||
* go single-threaded. If the other thread is idle,
|
||||
* we ask the hypervisor if it has pending work it
|
||||
* wants to do and cede if it does. Otherwise we keep
|
||||
* polling in order to reduce interrupt latency.
|
||||
*
|
||||
* Doing the cede when the other thread is active will
|
||||
* result in this thread going dormant, meaning the other
|
||||
* thread gets to run in single-threaded (ST) mode, which
|
||||
* is slightly faster than SMT mode with this thread at
|
||||
* very low priority. The cede enables interrupts, which
|
||||
* doesn't matter here.
|
||||
*/
|
||||
if (!cpu_has_feature(CPU_FTR_SMT) || !lppaca[cpu ^ 1].idle
|
||||
|| poll_pending() == H_PENDING)
|
||||
cede_processor();
|
||||
cede_processor();
|
||||
|
||||
out:
|
||||
HMT_medium();
|
||||
|
Reference in New Issue
Block a user