[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Changeset 15943 broke Linux 2.6.23-rc4?
What's the meaning of "division by zero" in the change log of changeset 15943 : c0d1825f5189 (Don't count "missed ticks" on one-shot timers.)? I found the c/s breaks Linux 2.6.23-rc4 when ACPI=1 in HVM config file. I don't think the 2 lines below are correct for one_shot vpt: pt->enabled = 0; list_del(&pt->list); because i.e., it may drop one-shot local timer interrupt wrongly (this breaks ACPI Linux 2.6.23-rc4...): 1) an one-shot timer interrupt is triggered in pt_timer_fn(), then c/s 15943 sets pt->enabled to 0, and removes the vpt from the tm_list; 2) in vmx_intr_assit() - > pt_update_irq(), we can't find the pt in the tm_list, so the timer interrupt is dropped... Actually we don't need to remove an one_shot vpt from tm_list, since pt_update_irq() ignores a vpt if pt->pending_intr_nr == 0. Am I missing something? -- Dexuan > # Node ID c0d1825f51899b329495efb2078dd15e0fb3b479 > # Parent d17532dc1725e58b787329f64ce2e4e0e79516f0 > [HVM] Don't count "missed ticks" on one-shot timers. > It's not clear what it would mean, and it leads to division by zero. > Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxxxxx > <mailto:Tim.Deegan@xxxxxxxxxxxxx> > --- > xen/arch/x86/hvm/vpt.c | 19 ++++++++++++++----- > 1 files changed, 14 insertions(+), 5 deletions(-) > > diff -r d17532dc1725 -r c0d1825f5189 xen/arch/x86/hvm/vpt.c > --- a/xen/arch/x86/hvm/vpt.c Sun Sep 23 12:56:11 2007 +0100 > +++ b/xen/arch/x86/hvm/vpt.c Mon Sep 24 13:44:29 2007 +0100 > @@ -46,6 +46,9 @@ static void missed_ticks(struct periodic > { > s_time_t missed_ticks; > > + if ( unlikely(pt->one_shot) ) > + return; > + > missed_ticks = NOW() - pt->scheduled; > if ( missed_ticks <= 0 ) > return; > @@ -111,12 +114,18 @@ static void pt_timer_fn(void *data) > pt_lock(pt); > > pt->pending_intr_nr++; > - pt->scheduled += pt->period; > - > - missed_ticks(pt); > - > - if ( !pt->one_shot ) > + > + if ( unlikely(pt->one_shot) ) > + { > + pt->enabled = 0; > + list_del(&pt->list); > + } > + else > + { > + pt->scheduled += pt->period; > + missed_ticks(pt); > set_timer(&pt->timer, pt->scheduled); > + } > > vcpu_kick(pt->vcpu); > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |