[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 11/13] xen/arm: send IPIs to inject irqs into guest vcpus running on different pcpus
On Fri, 2013-04-26 at 14:39 +0100, Stefano Stabellini wrote: > On Thu, 25 Apr 2013, Ian Campbell wrote: > > On Wed, 2013-04-24 at 20:07 +0100, Stefano Stabellini wrote: > > > If we need to inject an irq into a guest that is running on a different > > > > ^VCPU > > > > > processor, we shouldn't just enqueue the irq into the lr_pending and > > > inflight lists and wait for something to interrupt the guest execution. > > > Send an IPI to the target pcpu so that Xen can inject the new interrupt > > > returning to guest. > > > > > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > > > > Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > > > > > --- > > > xen/arch/arm/vgic.c | 2 ++ > > > 1 files changed, 2 insertions(+), 0 deletions(-) > > > > > > diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c > > > index 8912aab..547a2ab 100644 > > > --- a/xen/arch/arm/vgic.c > > > +++ b/xen/arch/arm/vgic.c > > > @@ -664,6 +664,8 @@ out: > > > spin_unlock_irqrestore(&v->arch.vgic.lock, flags); > > > /* we have a new higher priority irq, inject it into the guest */ > > > vcpu_unblock(v); > > > + if ( v != current && v->is_running ) > > > + smp_send_event_check_mask(cpumask_of(v->processor)); > > > > I'm a bit concerned about races here, e.g. where v is busy going to > > sleep. > > I don't know enough about the behaviour of the scheduler and > > vcpu_unblock etc to say, but it worries me... > > That is that the vcpu_unblock call above is for. > I think that should be enough to make sure that the scheduler doesn't > shelve the vcpu. If the cpu is already running then vcpu_unblock won't do anything (useful). If between vcpu_unblock and if ( v->is_running ) the vcpu, currently running on another PCPU, blocks then you will not wake it up. > > x86 has vcpu_kick which saves v->is_running before the unblock and then > > sends a softirq with much the same checks as you have -- that seems like > > a plausible race avoidance strategy, although whether IPI vs softirq is > > an important distinction I've no idea... > > Yes, it looks like the code should be race free, although it might be > possible to improve it by checking is_running before vcpu_unblock to > avoid a useless IPI. I could make that change. I think you should, even if I'm worrying about nothing it is more obviously correct and a spurious wake is better than a missed one. > I don't think that the softirq vs IPI thing matters: the purpose is to > force the other vcpu to check for events in the near future, the exact > point in time shouldn't make a difference. The comment on x86 suggests that the softirq serves a wider purpose, which is why I was asking: /* * Nothing to do here: we merely prevent notifiers from racing with checks * executed on return to guest context with interrupts enabled. See, for * example, xxx_intr_assist() executed on return to HVM guest context. */ Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |