[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH] dpci: Put the dpci back on the list if running on another CPU.
>>> On 12.01.15 at 18:35, <konrad.wilk@xxxxxxxxxx> wrote: >> --- a/xen/drivers/passthrough/io.c >> +++ b/xen/drivers/passthrough/io.c >> @@ -804,7 +804,17 @@ static void dpci_softirq(void) >> d = pirq_dpci->dom; >> smp_mb(); /* 'd' MUST be saved before we set/clear the bits. */ >> if ( test_and_set_bit(STATE_RUN, &pirq_dpci->state) ) >> - BUG(); >> + { >> + unsigned long flags; >> + >> + /* Put back on the list and retry. */ >> + local_irq_save(flags); >> + list_add_tail(&pirq_dpci->softirq_list, &this_cpu(dpci_list)); > > I chatted with Jan on IRC this, and one worry is that if we add > on our per-cpu list an 'dpci' that is running on another CPU - if > the other CPU runs 'list_del' it will go BOOM. Looking at this again, I don't think this particular case is a concern: The list_del() happens before setting STATE_RUN and clearing STATE_SCHED, and the race window only opens (and the potential list_add() can only happen) after this CPU cleared STATE_SCHED. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |