[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/2] xen/arm: support the ARM generic virtual timer
On Thu, 2013-02-14 at 11:46 +0000, Stefano Stabellini wrote: > On Thu, 24 Jan 2013, Tim Deegan wrote: > > At 16:17 +0000 on 09 Jan (1357748277), Stefano Stabellini wrote: > > > +static void vtimer_interrupt(int irq, void *dev_id, struct cpu_user_regs > > > *regs) > > > +{ > > > + current->arch.virt_timer.ctl = READ_CP32(CNTV_CTL); > > > + WRITE_CP32(current->arch.virt_timer.ctl | CNTx_CTL_MASK, CNTV_CTL); > > > > This is masking the vtimer interrupt in a way that's visible to the > > currently running guest. Is that going to confuse the guest? > > > > When we talked about this before I had imagined that the masking would > > happen in the GIC, where the guest doesn't see it. > > I know it is not ideal but it is safe, it is not creating any problems to > Linux and it is even the same thing that KVM does). > More importantly I just couldn't get the GIC strategy to work correctly > (actually it work decently well on the physical Versatile Express but it > hangs the emulator, this tells me that it is not the way it was intended > to be used by the ARM people). I think we should ask ARM about this, it could just be a model bug. I'm sure that they would be interested in cases where the virtualness leaks out of the hardware like this. Ian. > > > > > + vgic_vcpu_inject_irq(current, irq, 1); > > > +} > > > + > > > /* Set up the timer interrupt on this CPU */ > > > void __cpuinit init_timer_interrupt(void) > > > { > > > @@ -172,6 +183,7 @@ void __cpuinit init_timer_interrupt(void) > > > > > > /* XXX Need to find this IRQ number from devicetree? */ > > > request_irq(26, timer_interrupt, 0, "hyptimer", NULL); > > > + request_irq(27, vtimer_interrupt, 0, "virtimer", NULL); > > > request_irq(30, timer_interrupt, 0, "phytimer", NULL); > > > } > > > > > > +static void virt_timer_expired(void *data) > > > +{ > > > + struct vtimer *t = data; > > > + vcpu_wake(t->v); > > > > Shouldn't this also inject the irq? Otherwise when an unscheduled > > guest's timer goes off, we take two interrupts - one for the hyp timer > > to call this function and then another immediately after > > virt_timer_restore() which causes us to inject the vtimer irq. > > If we injected the irq here (and arranged to mask the vtimer irq) we'd > > avoid a second interrupt. > > This might be a good idea, I'll give it a try. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |