On Tue, May 19, 2026 at 03:15:46PM -0400, Stefan Hajnoczi wrote:
Jorge Moreira <[email protected]> pointed out that the ring state
machine is underspecified. In the discussion that followed, we
discovered that the spec says one thing and implementations do something
else. This patch updates the spec to reflect how things are actually
implemented across widely-used front-ends and back-ends including QEMU,
crosvm, rust-vmm, and DPDK. Do this while taking care not to make any
other existing implementations non-compliant by changing the sepc.

s/sepc/spec


The spec says rings are started when a kick is received but the
implementations actually start rings when VHOST_USER_SET_VRING_KICK is
received.

Reconcile this as follows:
- Clarify that a ring can be stopped and then started again. The
 back-end must resume processing available requests when the ring is
 restarted.
- Update the spec to say rings are started when
 VHOST_USER_SET_VRING_KICK is received.
- Ensure compatibility by saying front-ends SHOULD inject a kick in case
 the back-end strictly implemented the old spec.
- Avoid future back-end dependencies on injected kicks by saying that
 back-ends SHOULD NOT expect a kick to start rings.

This way implementors have clarity on how things work while still
allowing compatibility for existing implementations.

Reported-by: Jorge Moreira <[email protected]>
Cc: "Michael S . Tsirkin" <[email protected]>
Cc: Stefano Garzarella <[email protected]>
Signed-off-by: Stefan Hajnoczi <[email protected]>
---
docs/interop/vhost-user.rst | 26 ++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)

Reviewed-by: Stefano Garzarella <[email protected]>


Reply via email to