|
@@ -26,6 +26,8 @@
|
|
|
#include <linux/major.h>
|
|
|
#include <linux/root_dev.h>
|
|
|
#include <linux/kernel.h>
|
|
|
+#include <linux/hrtimer.h>
|
|
|
+#include <linux/tick.h>
|
|
|
|
|
|
#include <asm/processor.h>
|
|
|
#include <asm/machdep.h>
|
|
@@ -561,6 +563,7 @@ static void yield_shared_processor(void)
|
|
|
static void iseries_shared_idle(void)
|
|
|
{
|
|
|
while (1) {
|
|
|
+ tick_nohz_stop_sched_tick();
|
|
|
while (!need_resched() && !hvlpevent_is_pending()) {
|
|
|
local_irq_disable();
|
|
|
ppc64_runlatch_off();
|
|
@@ -574,6 +577,7 @@ static void iseries_shared_idle(void)
|
|
|
}
|
|
|
|
|
|
ppc64_runlatch_on();
|
|
|
+ tick_nohz_restart_sched_tick();
|
|
|
|
|
|
if (hvlpevent_is_pending())
|
|
|
process_iSeries_events();
|
|
@@ -589,6 +593,7 @@ static void iseries_dedicated_idle(void)
|
|
|
set_thread_flag(TIF_POLLING_NRFLAG);
|
|
|
|
|
|
while (1) {
|
|
|
+ tick_nohz_stop_sched_tick();
|
|
|
if (!need_resched()) {
|
|
|
while (!need_resched()) {
|
|
|
ppc64_runlatch_off();
|
|
@@ -605,6 +610,7 @@ static void iseries_dedicated_idle(void)
|
|
|
}
|
|
|
|
|
|
ppc64_runlatch_on();
|
|
|
+ tick_nohz_restart_sched_tick();
|
|
|
preempt_enable_no_resched();
|
|
|
schedule();
|
|
|
preempt_disable();
|