Thread (115 messages) flat view 115 messages, 7 authors, 2010-08-04

Re: [PATCH 1/3] vhost: replace vhost_workqueue with per-vhost kthread

From: Oleg Nesterov <oleg@redhat.com>
Date: 2010-05-31 15:32:47
Also in: kvm, lkml

On 05/31, Tejun Heo wrote:
On 05/31/2010 04:39 PM, Oleg Nesterov wrote:
quoted
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.
quoted
quoted
+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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help