Can I use a virtqueue asynchronously between guest and backend? By that I mean that any end of the communication channel (virtqueue) can push/pop how much data he wants anytime, without worrying that it will pop a thing that it pushed on the queue, and in fact the other end should have popped it? Or do I have to use 2 virtqueues for this to happen? What I'm trying to do is to process jobs in the backend continuously and then send a little more detailed result of the job. The job itself will run async on some piece of hardware while I continue popping jobs from the queue (the backend itself will just schedule them, will not busy wait till they get done). When a job is done, a callback will be called which will push the result one the virtqueue. What I am worrying about is what if I use the same queue for job request and job result? Is there a possibility for a job result to be processed by the same entity that put it there, instead of the other end?