aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/acpi/processor_idle.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 63a3d4b8c238..43fe52f9834b 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -859,6 +859,7 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
859 struct acpi_processor *pr; 859 struct acpi_processor *pr;
860 struct acpi_processor_cx *cx = cpuidle_get_statedata(state); 860 struct acpi_processor_cx *cx = cpuidle_get_statedata(state);
861 ktime_t kt1, kt2; 861 ktime_t kt1, kt2;
862 s64 idle_time_ns;
862 s64 idle_time; 863 s64 idle_time;
863 s64 sleep_ticks = 0; 864 s64 sleep_ticks = 0;
864 865
@@ -900,12 +901,14 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
900 sched_clock_idle_sleep_event(); 901 sched_clock_idle_sleep_event();
901 acpi_idle_do_entry(cx); 902 acpi_idle_do_entry(cx);
902 kt2 = ktime_get_real(); 903 kt2 = ktime_get_real();
903 idle_time = ktime_to_us(ktime_sub(kt2, kt1)); 904 idle_time_ns = ktime_to_ns(ktime_sub(kt2, kt1));
905 idle_time = idle_time_ns;
906 do_div(idle_time, NSEC_PER_USEC);
904 907
905 sleep_ticks = us_to_pm_timer_ticks(idle_time); 908 sleep_ticks = us_to_pm_timer_ticks(idle_time);
906 909
907 /* Tell the scheduler how much we idled: */ 910 /* Tell the scheduler how much we idled: */
908 sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS); 911 sched_clock_idle_wakeup_event(idle_time_ns);
909 912
910 local_irq_enable(); 913 local_irq_enable();
911 current_thread_info()->status |= TS_POLLING; 914 current_thread_info()->status |= TS_POLLING;
@@ -933,6 +936,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
933 struct acpi_processor *pr; 936 struct acpi_processor *pr;
934 struct acpi_processor_cx *cx = cpuidle_get_statedata(state); 937 struct acpi_processor_cx *cx = cpuidle_get_statedata(state);
935 ktime_t kt1, kt2; 938 ktime_t kt1, kt2;
939 s64 idle_time_ns;
936 s64 idle_time; 940 s64 idle_time;
937 s64 sleep_ticks = 0; 941 s64 sleep_ticks = 0;
938 942
@@ -1015,11 +1019,13 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
1015 spin_unlock(&c3_lock); 1019 spin_unlock(&c3_lock);
1016 } 1020 }
1017 kt2 = ktime_get_real(); 1021 kt2 = ktime_get_real();
1018 idle_time = ktime_to_us(ktime_sub(kt2, kt1)); 1022 idle_time_ns = ktime_to_us(ktime_sub(kt2, kt1));
1023 idle_time = idle_time_ns;
1024 do_div(idle_time, NSEC_PER_USEC);
1019 1025
1020 sleep_ticks = us_to_pm_timer_ticks(idle_time); 1026 sleep_ticks = us_to_pm_timer_ticks(idle_time);
1021 /* Tell the scheduler how much we idled: */ 1027 /* Tell the scheduler how much we idled: */
1022 sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS); 1028 sched_clock_idle_wakeup_event(idle_time_ns);
1023 1029
1024 local_irq_enable(); 1030 local_irq_enable();
1025 current_thread_info()->status |= TS_POLLING; 1031 current_thread_info()->status |= TS_POLLING;