Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7e2041e authored by David S. Miller's avatar David S. Miller
Browse files
parents 92d76e81 0174b0c3
Loading
Loading
Loading
Loading
+11 −7
Original line number Original line Diff line number Diff line
@@ -97,22 +97,26 @@ void vhost_poll_stop(struct vhost_poll *poll)
	remove_wait_queue(poll->wqh, &poll->wait);
	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)
static void vhost_work_flush(struct vhost_dev *dev, struct vhost_work *work)
{
{
	unsigned seq;
	unsigned seq;
	int left;
	int flushing;
	int flushing;


	spin_lock_irq(&dev->work_lock);
	spin_lock_irq(&dev->work_lock);
	seq = work->queue_seq;
	seq = work->queue_seq;
	work->flushing++;
	work->flushing++;
	spin_unlock_irq(&dev->work_lock);
	spin_unlock_irq(&dev->work_lock);
	wait_event(work->done, ({
	wait_event(work->done, vhost_work_seq_done(dev, work, seq));
		   spin_lock_irq(&dev->work_lock);
		   left = seq - work->done_seq <= 0;
		   spin_unlock_irq(&dev->work_lock);
		   left;
	}));
	spin_lock_irq(&dev->work_lock);
	spin_lock_irq(&dev->work_lock);
	flushing = --work->flushing;
	flushing = --work->flushing;
	spin_unlock_irq(&dev->work_lock);
	spin_unlock_irq(&dev->work_lock);