|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v10 03/32] ARM: vGIC: move irq_to_pending() calls under the VGIC VCPU lock
On Tue, 6 Jun 2017, Andre Przywara wrote:
> Maybe we should consider to merge this one for 4.9 still,
> as currently enabling the ITS in .config and running it on an ITS
> machine will fail to boot Dom0.
Here, you are talking about this patch, patch #3, right?
Although it should be "safe", it touches a lot of common code. I think
it is too risky to commit it now to fix an experimental feature. I would
rather wait until it is committed to staging in the 4.10 dev window,
then backport it.
> >> - if ( p->desc != NULL )
> >> + desc = p->desc;
> >> + spin_unlock_irqrestore(&v_target->arch.vgic.lock, flags);
> >> +
> >> + if ( desc != NULL )
> >> {
> >> - spin_lock_irqsave(&p->desc->lock, flags);
> >> - p->desc->handler->disable(p->desc);
> >> - spin_unlock_irqrestore(&p->desc->lock, flags);
> >> + spin_lock_irqsave(&desc->lock, flags);
> >> + desc->handler->disable(desc);
> >> + spin_unlock_irqrestore(&desc->lock, flags);
> >> }
> >> i++;
> >> }
> >> @@ -349,9 +368,9 @@ void vgic_enable_irqs(struct vcpu *v, uint32_t r,
> >> int n)
> >> while ( (i = find_next_bit(&mask, 32, i)) < 32 ) {
> >> irq = i + (32 * n);
> >> v_target = vgic_get_target_vcpu(v, irq);
> >> + spin_lock_irqsave(&v_target->arch.vgic.lock, flags);
> >> p = irq_to_pending(v_target, irq);
> >> set_bit(GIC_IRQ_GUEST_ENABLED, &p->status);
> >> - spin_lock_irqsave(&v_target->arch.vgic.lock, flags);
> >> if ( !list_empty(&p->inflight) &&
> >> !test_bit(GIC_IRQ_GUEST_VISIBLE, &p->status) )
> >> gic_raise_guest_irq(v_target, irq, p->priority);
> >> spin_unlock_irqrestore(&v_target->arch.vgic.lock, flags);
> >> @@ -460,7 +479,7 @@ void vgic_clear_pending_irqs(struct vcpu *v)
> >> void vgic_vcpu_inject_irq(struct vcpu *v, unsigned int virq)
> >> {
> >> uint8_t priority;
> >> - struct pending_irq *iter, *n = irq_to_pending(v, virq);
> >> + struct pending_irq *iter, *n;
> >> unsigned long flags;
> >> bool running;
> >>
> >> @@ -468,6 +487,8 @@ void vgic_vcpu_inject_irq(struct vcpu *v, unsigned
> >> int virq)
> >>
> >> spin_lock_irqsave(&v->arch.vgic.lock, flags);
> >>
> >> + n = irq_to_pending(v, virq);
> >> +
> >> /* vcpu offline */
> >> if ( test_bit(_VPF_down, &v->pause_flags) )
> >> {
> >>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |