[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.