On 05/31, Tejun Heo wrote: > > On 05/31/2010 04:39 PM, Oleg Nesterov wrote: > > > What I can't understand is why we do have ->queue_seq and ->done_seq. > > > > Isn't the single "bool poll->active" enough? vhost_poll_queue() sets > > ->active == T, vhost_poller() clears it before wake_up_all(poll->done). > > I might have slightly over engineered this part not knowing the > expected workload. ->queue_seq/->done_seq pair is to guarantee that > flushers never get starved. Ah, indeed. Well, afaics we do not need 2 counters anyway, both vhost_poll_queue() and vhost_poller() could increment the single counter and the flusher can take bit 0 into account. But I agree 2 counters are much more clean. > >> +static int vhost_poller(void *data) > >> +{ > >> + struct vhost_dev *dev = data; > >> + struct vhost_poll *poll; > >> + > >> +repeat: > >> + set_current_state(TASK_INTERRUPTIBLE); /* mb paired w/ kthread_stop */ > > > > I don't understand the comment... why do we need this barrier? > > So that either kthread_stop()'s should_stop = 1 in kthread_stop() is > visible to kthread_should_stop() or task state is set to RUNNING. Of course, you are right. I am really surprized I asked this question ;) Thanks, Oleg. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html