Merge branch 'vhost-net' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
This commit is contained in:
commit
b7e2041e2a
|
@ -97,22 +97,26 @@ void vhost_poll_stop(struct vhost_poll *poll)
|
|||
remove_wait_queue(poll->wqh, &poll->wait);
|
||||
}
|
||||
|
||||
static bool vhost_work_seq_done(struct vhost_dev *dev, struct vhost_work *work,
|
||||
unsigned seq)
|
||||
{
|
||||
int left;
|
||||
spin_lock_irq(&dev->work_lock);
|
||||
left = seq - work->done_seq;
|
||||
spin_unlock_irq(&dev->work_lock);
|
||||
return left <= 0;
|
||||
}
|
||||
|
||||
static void vhost_work_flush(struct vhost_dev *dev, struct vhost_work *work)
|
||||
{
|
||||
unsigned seq;
|
||||
int left;
|
||||
int flushing;
|
||||
|
||||
spin_lock_irq(&dev->work_lock);
|
||||
seq = work->queue_seq;
|
||||
work->flushing++;
|
||||
spin_unlock_irq(&dev->work_lock);
|
||||
wait_event(work->done, ({
|
||||
spin_lock_irq(&dev->work_lock);
|
||||
left = seq - work->done_seq <= 0;
|
||||
spin_unlock_irq(&dev->work_lock);
|
||||
left;
|
||||
}));
|
||||
wait_event(work->done, vhost_work_seq_done(dev, work, seq));
|
||||
spin_lock_irq(&dev->work_lock);
|
||||
flushing = --work->flushing;
|
||||
spin_unlock_irq(&dev->work_lock);
|
||||
|
|
Loading…
Reference in New Issue