Revision 20cd0c86553e14c495451ce7d1e2e4efd81041f0 authored by Manos Pitsidianakis on 24 March 2024, 10:04:59 UTC, committed by Michael Tokarev on 09 April 2024, 18:15:05 UTC
The current handling of invalid virtqueue elements inside the TX/RX virt
queue handlers is wrong.

They are added in a per-stream invalid queue to be processed after the
handler is done examining each message, but the invalid message might
not be specifying any stream_id; which means it's invalid to add it to
any stream->invalid queue since stream could be NULL at this point.

This commit moves the invalid queue to the VirtIOSound struct which
guarantees there will always be a valid temporary place to store them
inside the tx/rx handlers. The queue will be emptied before the handler
returns, so the queue must be empty at any other point of the device's
lifetime.

Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Message-Id: <virtio-snd-rewrite-invalid-tx-rx-message-handling-v1.manos.pitsidianakis@linaro.org>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
(cherry picked from commit 731655f87f319fd06f27282c6cafbc2467ac8045)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
1 parent 627aa46
History
File Mode Size
acpi.json -rw-r--r-- 4.0 KB
audio.json -rw-r--r-- 12.9 KB
authz.json -rw-r--r-- 2.5 KB
block-core.json -rw-r--r-- 182.1 KB
block-export.json -rw-r--r-- 12.9 KB
block.json -rw-r--r-- 16.9 KB
char.json -rw-r--r-- 17.1 KB
common.json -rw-r--r-- 3.6 KB
compat.json -rw-r--r-- 1.6 KB
control.json -rw-r--r-- 4.6 KB
crypto.json -rw-r--r-- 16.7 KB
cryptodev.json -rw-r--r-- 1.9 KB
cxl.json -rw-r--r-- 10.8 KB
dump.json -rw-r--r-- 5.7 KB
error.json -rw-r--r-- 766 bytes
introspect.json -rw-r--r-- 8.4 KB
job.json -rw-r--r-- 7.3 KB
machine-common.json -rw-r--r-- 455 bytes
machine-target.json -rw-r--r-- 16.3 KB
machine.json -rw-r--r-- 41.8 KB
meson.build -rw-r--r-- 3.2 KB
migration.json -rw-r--r-- 84.1 KB
misc-target.json -rw-r--r-- 10.6 KB
misc.json -rw-r--r-- 14.1 KB
net.json -rw-r--r-- 25.8 KB
opts-visitor.c -rw-r--r-- 15.4 KB
pci.json -rw-r--r-- 8.4 KB
pragma.json -rw-r--r-- 2.9 KB
qapi-clone-visitor.c -rw-r--r-- 5.4 KB
qapi-dealloc-visitor.c -rw-r--r-- 3.5 KB
qapi-forward-visitor.c -rw-r--r-- 9.1 KB
qapi-schema.json -rw-r--r-- 2.5 KB
qapi-type-helpers.c -rw-r--r-- 554 bytes
qapi-util.c -rw-r--r-- 4.1 KB
qapi-visit-core.c -rw-r--r-- 11.1 KB
qdev.json -rw-r--r-- 4.4 KB
qmp-dispatch.c -rw-r--r-- 8.3 KB
qmp-event.c -rw-r--r-- 1.0 KB
qmp-registry.c -rw-r--r-- 2.3 KB
qobject-input-visitor.c -rw-r--r-- 21.0 KB
qobject-output-visitor.c -rw-r--r-- 8.3 KB
qom.json -rw-r--r-- 31.0 KB
rdma.json -rw-r--r-- 809 bytes
replay.json -rw-r--r-- 2.8 KB
rocker.json -rw-r--r-- 7.6 KB
run-state.json -rw-r--r-- 16.2 KB
sockets.json -rw-r--r-- 4.5 KB
stats.json -rw-r--r-- 6.4 KB
string-input-visitor.c -rw-r--r-- 10.5 KB
string-output-visitor.c -rw-r--r-- 10.6 KB
tpm.json -rw-r--r-- 3.5 KB
trace-events -rw-r--r-- 2.2 KB
trace.h -rw-r--r-- 30 bytes
trace.json -rw-r--r-- 2.3 KB
transaction.json -rw-r--r-- 7.5 KB
ui.json -rw-r--r-- 40.7 KB
virtio.json -rw-r--r-- 28.9 KB
yank.json -rw-r--r-- 2.5 KB

back to top