[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [for-xen-4.5 PATCH v2 2/2] dpci: Add ZOMBIE state to allow the softirq to finish with the dpci_pirq.
>>> On 21.11.14 at 16:14, <konrad.wilk@xxxxxxxxxx> wrote: > On Fri, Nov 21, 2014 at 01:03:43PM +0100, Jan Beulich wrote: >> >>> On 21.11.14 at 12:50, <konrad.wilk@xxxxxxxxxx> wrote: >> > On November 21, 2014 2:51:33 AM EST, Jan Beulich <JBeulich@xxxxxxxx> wrote: >> >>>>> On 20.11.14 at 20:51, <konrad.wilk@xxxxxxxxxx> wrote: >> >>> @@ -669,7 +670,7 @@ static void hvm_dirq_assist(struct domain *d, >> >>struct hvm_pirq_dpci *pirq_dpci) >> >>> ASSERT(d->arch.hvm_domain.irq.dpci); >> >>> >> >>> spin_lock(&d->event_lock); >> >>> - if ( pirq_dpci->state ) >> >>> + if ( test_and_clear_bool(pirq_dpci->masked) ) >> >>> { >> >>> struct pirq *pirq = dpci_pirq(pirq_dpci); >> >>> const struct dev_intx_gsi_link *digl; >> >> >> >>So this now guards solely against the timeout enforced EOI? Why do >> >>you no longer need to guard against cancellation (i.e. why isn't this >> >>looking at both ->state and ->masked)? >> >> >> > >> > The previous state check was superfluous as the dpci_softirq would check >> > for >> > the valid STATE_ before calling hvm_dirq_assist (and deal with >> > cancellation). >> >> I thought so first too, but then how is the guarding against >> cancellation working now? > > Since there are two forms of cancellation, lets consider each one seperatly: > > 1). pt_irq_create_bind and pt_irq_destroy_bind. Each of them calling > pt_pirq_softirq_reset in the 'error' case or in the normal path of > destruction. > When that happens the action handler for the IRQ is removed the moment we > call > pirq_guest_unbind. As such we only have to deal with the potential > outstanding > pirq_dpci waiting to be serviced. Since we did the 'pt_pirq_softirq_reset' > we have changed the state from STATE_SCHED to zero. That means > dpci_softirq will > NOT go in: > if ( test_and_clear_bit(STATE_SCHED, &pirq_dpci->state) ) Unless the flag got set again in the meantime. Since the event lock is being acquired right before the line quoted above, _that_ is what needs closely looking at (and why I was asking about the deletion of the [at the first glance unnecessary] checking of ->state in hvm_dirq_assist()). Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |