summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_tc.c
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2011-07-14 21:00:26 +0000
committerjkim <jkim@FreeBSD.org>2011-07-14 21:00:26 +0000
commit96d6cc9832b1e44e9d22ebafdc953a241c07c9d9 (patch)
tree9a2f51e9df71efecc4be43c619d3287cabc1edf5 /sys/kern/kern_tc.c
parentaadbd5321a07ba56dde92245c908feb3e6e2cb94 (diff)
downloadFreeBSD-src-96d6cc9832b1e44e9d22ebafdc953a241c07c9d9.zip
FreeBSD-src-96d6cc9832b1e44e9d22ebafdc953a241c07c9d9.tar.gz
If TSC stops ticking in C3, disable deep sleep when the user forcefully
select TSC as timecounter hardware. Tested by: Fabian Keil (freebsd-listen at fabiankeil dot de)
Diffstat (limited to 'sys/kern/kern_tc.c')
-rw-r--r--sys/kern/kern_tc.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/kern/kern_tc.c b/sys/kern/kern_tc.c
index 39d6f23..0c52071 100644
--- a/sys/kern/kern_tc.c
+++ b/sys/kern/kern_tc.c
@@ -492,6 +492,12 @@ tc_windup(void)
/* Now is a good time to change timecounters. */
if (th->th_counter != timecounter) {
+#ifndef __arm__
+ if ((timecounter->tc_flags & TC_FLAGS_C3STOP) != 0)
+ cpu_disable_deep_sleep++;
+ if ((th->th_counter->tc_flags & TC_FLAGS_C3STOP) != 0)
+ cpu_disable_deep_sleep--;
+#endif
th->th_counter = timecounter;
th->th_offset_count = ncount;
tc_min_ticktock_freq = max(1, timecounter->tc_frequency /
OpenPOWER on IntegriCloud