[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] linux/x86: fix long timeout handling in stop_hz_timer()
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1266832998 0 # Node ID ff275dae07eecb5bbcd99cc0f8cb9fd41d400145 # Parent 05a04247f0576a71dc4d897d0b03cbfd4c2ed57b linux/x86: fix long timeout handling in stop_hz_timer() Other than for HYPERVISOR_set_timer_op, zero doesn't mean "no timeout" for VCPUOP_set_singleshot_timer (but should be retained rather than adjusted by NS_PER_TICK/2 for the former). Also properly cancel the singleshot timer is start_hz_timer(). Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> --- arch/i386/kernel/time-xen.c | 17 +++++++++++++++-- 1 files changed, 15 insertions(+), 2 deletions(-) diff -r 05a04247f057 -r ff275dae07ee arch/i386/kernel/time-xen.c --- a/arch/i386/kernel/time-xen.c Mon Feb 15 17:44:01 2010 +0000 +++ b/arch/i386/kernel/time-xen.c Mon Feb 22 10:03:18 2010 +0000 @@ -1022,7 +1022,10 @@ static void stop_hz_timer(void) j = jiffies + 1; } - singleshot.timeout_abs_ns = jiffies_to_st(j) + NS_PER_TICK/2; + singleshot.timeout_abs_ns = jiffies_to_st(j); + if (!singleshot.timeout_abs_ns) + return; + singleshot.timeout_abs_ns += NS_PER_TICK / 2; singleshot.flags = 0; rc = HYPERVISOR_vcpu_op(VCPUOP_set_singleshot_timer, cpu, &singleshot); #if CONFIG_XEN_COMPAT <= 0x030004 @@ -1036,7 +1039,17 @@ static void stop_hz_timer(void) static void start_hz_timer(void) { - cpu_clear(smp_processor_id(), nohz_cpu_mask); + unsigned int cpu = smp_processor_id(); + int rc = HYPERVISOR_vcpu_op(VCPUOP_stop_singleshot_timer, cpu, NULL); + +#if CONFIG_XEN_COMPAT <= 0x030004 + if (rc) { + BUG_ON(rc != -ENOSYS); + rc = HYPERVISOR_set_timer_op(0); + } +#endif + BUG_ON(rc); + cpu_clear(cpu, nohz_cpu_mask); } void raw_safe_halt(void) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |