eae69cc36b
Currently, the vhost-user documentation says that rings are to be initialized in a disabled state when VHOST_USER_F_PROTOCOL_FEATURES is negotiated. However, by the time of feature negotiation, all rings have already been initialized, so it is not entirely clear what this means. At least the vhost-user-backend Rust crate's implementation interpreted it to mean that whenever this feature is negotiated, all rings are to put into a disabled state, which means that every SET_FEATURES call would disable all rings, effectively halting the device. This is problematic because the VHOST_F_LOG_ALL feature is also set or cleared this way, which happens during migration. Doing so should not halt the device. Other implementations have interpreted this to mean that the device is to be initialized with all rings disabled, and a subsequent SET_FEATURES call that does not set VHOST_USER_F_PROTOCOL_FEATURES will enable all of them. Here, SET_FEATURES will never disable any ring. This interpretation does not suffer the problem of unintentionally halting the device whenever features are set or cleared, so it seems better and more reasonable. We can clarify this in the documentation by making it explicit that the enabled/disabled state is tracked even while the vring is stopped. Every vring is initialized in a disabled state, and SET_FEATURES without VHOST_USER_F_PROTOCOL_FEATURES simply becomes one way to enable all vrings. Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Hanna Czenczek <hreitz@redhat.com> Message-Id: <20231016134243.68248-3-hreitz@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> |
||
---|---|---|
.. | ||
barrier.rst | ||
bitmaps.rst | ||
dbus-display.rst | ||
dbus-vmstate.rst | ||
dbus.rst | ||
firmware.json | ||
index.rst | ||
live-block-operations.rst | ||
nbd.txt | ||
parallels.txt | ||
pr-helper.rst | ||
prl-xml.txt | ||
qcow2.txt | ||
qed_spec.txt | ||
qemu-ga-ref.rst | ||
qemu-ga.rst | ||
qemu-qmp-ref.rst | ||
qemu-storage-daemon-qmp-ref.rst | ||
qmp-spec.rst | ||
vhost-user-gpu.rst | ||
vhost-user.json | ||
vhost-user.rst | ||
vhost-vdpa.rst | ||
virtio-balloon-stats.rst | ||
vnc-ledstate-pseudo-encoding.rst |