[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH net v2 2/3] xen-netback: don't stop dealloc kthread too early
On Mon, Aug 11, 2014 at 03:13:41PM +0100, Zoltan Kiss wrote: [...] > > And cleaning it up a bit (the while() could be a for(;;)). > > I would recommend this: > --- > @@ -2066,7 +2066,7 @@ int xenvif_dealloc_kthread(void *data) > wait_event_interruptible(queue->dealloc_wq, > tx_dealloc_work_todo(queue) || > kthread_should_stop()); > - if (kthread_should_stop()) > + if (kthread_should_stop() && > !atomic_read(&queue->inflight_packets)) > break; > > xenvif_tx_dealloc_action(queue); > --- > If kthread_stop called, this will keep the main loop running until all > callbacks are called. > Then it proceeds to the exit branch, otherwise doesn't disrupt normal > operation. This snippet lacks change to while(). I would generally go for a shorter solution if the code is self-explanatory. @@ -2078,21 +2066,19 @@ int xenvif_dealloc_kthread(void *data) { struct xenvif_queue *queue = data; - while (!kthread_should_stop()) { + for (;;) { wait_event_interruptible(queue->dealloc_wq, tx_dealloc_work_todo(queue) || kthread_should_stop()); - if (kthread_should_stop()) + if (kthread_should_stop() && + !atomic_read(&queue->inflight_packets) && + !tx_dealloc_work_todo(queue)) break; xenvif_tx_dealloc_action(queue); cond_resched(); } - /* Unmap anything remaining*/ - if (tx_dealloc_work_todo(queue)) - xenvif_tx_dealloc_action(queue); - return 0; } _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |