aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2010-07-08 10:03:03 +0100
committerKeir Fraser <keir.fraser@citrix.com>2010-07-08 10:03:03 +0100
commit7a4e2b1920d3d5480cf33d8139199158979d046a (patch)
treee1f316d7482fd14b78815e2198550f96802bbf92
parent9d60094a16a24210b10e0580bfbf3a3ecc19ee4d (diff)
downloadxen-7a4e2b1920d3d5480cf33d8139199158979d046a.tar.gz
xen-7a4e2b1920d3d5480cf33d8139199158979d046a.tar.bz2
xen-7a4e2b1920d3d5480cf33d8139199158979d046a.zip
xen: use s_time_t for periodic timer deadlines.
Otherwise vcpu_periodic_timer_work() can think the next timer is in the future (and re-issue it unchanged) while timer_softirq_action() thinks it's in the past (and fires it immediately), leading to livelock. Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com> xen-unstable changeset: 21749:db35740574a5 xen-unstable date: Thu Jul 08 09:52:34 2010 +0100
-rw-r--r--xen/common/schedule.c2
-rw-r--r--xen/include/xen/sched.h4
2 files changed, 3 insertions, 3 deletions
diff --git a/xen/common/schedule.c b/xen/common/schedule.c
index 2534957a8c..beeab25738 100644
--- a/xen/common/schedule.c
+++ b/xen/common/schedule.c
@@ -828,7 +828,7 @@ long sched_adjust(struct domain *d, struct xen_domctl_scheduler_op *op)
static void vcpu_periodic_timer_work(struct vcpu *v)
{
s_time_t now = NOW();
- uint64_t periodic_next_event;
+ s_time_t periodic_next_event;
ASSERT(!active_timer(&v->periodic_timer));
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 00dfce50e4..5bda6c8f8f 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -83,8 +83,8 @@ struct vcpu
struct vcpu *next_in_list;
- uint64_t periodic_period;
- uint64_t periodic_last_event;
+ s_time_t periodic_period;
+ s_time_t periodic_last_event;
struct timer periodic_timer;
struct timer singleshot_timer;