856a6fe4f4
hw/audio: Constify VMState
...
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20231221031652.119827-24-richard.henderson@linaro.org >
2023-12-29 11:17:30 +11:00
8e51bae8ab
Merge tag 'ui-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging
...
ui/audio fixes for 8.2
# -----BEGIN PGP SIGNATURE-----
#
# iQJQBAABCAA6FiEEh6m9kz+HxgbSdvYt2ujhCXWWnOUFAmVtiO0cHG1hcmNhbmRy
# ZS5sdXJlYXVAcmVkaGF0LmNvbQAKCRDa6OEJdZac5UDeEACvbixo8MuxOpBf9DK2
# JTCQeHYeVW7QtwDh9xUUnbcM77+lWgkr9OeCJ7FKxF1J7UHkQ7jIzISs/P0zuCw0
# JRkoOcfOnxV/Pn8XAq79F6Yq55EUdCdvsj0XgsVx+K096VHvjlK3fzNwNebJrkos
# NpwQnnqI37TYBUFSivjKkEkPf1Kp4R4abeNs3eEzsIMUzEmEZQwwi5zZAMxxZ41o
# fyItvdaEEDJxzupS6e0x4O4B5KkTo9RFwsJgstOAbkCxuJk67grV9dm3S3wFiUR3
# iFR2P/EyzctT9QOkU7oEIi87CiociKaYWgw/tDU4lFjXwbkt0a59b783Rha1RlN8
# ICFQ3B0NX+CNlc5PPsF1yp3+DNJRKz8Rap4PmU5IIVXTlPHm+YrWRw6vklw5kq7y
# nAvdcfIJ+UQGVCgqQiLkuZslz4ATFOypnUvSL+eds1jHMS6UQcGd3zD1QCEPhDSP
# jhFirqDQYWU/18ZU3b6VuDe5Ko3erd4V7hDikeQnjLjYfBFX1/Mts+6GmaGdfbqk
# JLOHYa7CUP7akTB7fQF1/4B6cSf3hOsXYlmDHQPZgi1OYEy/BdPuwM5pN4jAikwO
# b2z6TrXS3hQK61bUtU+XnhOOW98+gfz77UwluXDl22KHGV+c/SadyMFJWm8VYX4k
# DuNTQ78vApqCuAhjFcKSXPSt7A==
# =fpz/
# -----END PGP SIGNATURE-----
# gpg: Signature made Mon 04 Dec 2023 03:08:13 EST
# gpg: using RSA key 87A9BD933F87C606D276F62DDAE8E10975969CE5
# gpg: issuer "marcandre.lureau@redhat.com "
# gpg: Good signature from "Marc-André Lureau <marcandre.lureau@redhat.com >" [full]
# gpg: aka "Marc-André Lureau <marcandre.lureau@gmail.com >" [full]
# Primary key fingerprint: 87A9 BD93 3F87 C606 D276 F62D DAE8 E109 7596 9CE5
* tag 'ui-pull-request' of https://gitlab.com/marcandre.lureau/qemu :
hw/audio/virtio-sound: mark the device as unmigratable
ui/vnc-clipboard: fix inflate_buffer
ui/gtk-egl: move function calls back to regular code path
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com >
2023-12-04 08:03:42 -05:00
551ef0fa05
hw/audio/virtio-sound: mark the device as unmigratable
...
The virtio-sound device is currently not migratable. QEMU crashes
on the source machine at some point during the migration with a
segmentation fault.
Even with this bug fixed, the virtio-sound device doesn't migrate
the state of the audio streams. For example, running streams leave
the device on the destination machine in a broken condition.
Mark the device as unmigratable until these issues have been fixed.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de >
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com >
Message-Id: <20231204072837.6058-1-vr_qemu@t-online.de >
2023-12-04 12:04:36 +04:00
f785618184
virtio-sound: add realize() error cleanup path
...
QEMU crashes on exit when a virtio-sound device has failed to
realise. Its vmstate field was not cleaned up properly with
qemu_del_vm_change_state_handler().
This patch changes the realize() order as
1. Validate the given configuration values (no resources allocated
by us either on success or failure)
2. Try AUD_register_card() and return on failure (no resources allocated
by us on failure)
3. Initialize vmstate, virtio device, heap allocations and stream
parameters at once.
If error occurs, goto error_cleanup label which calls
virtio_snd_unrealize(). This cleans up all resources made in steps
1-3.
Reported-by: Volker Rümelin <vr_qemu@t-online.de >
Fixes: 2880e676c0
("Add virtio-sound device stub")
Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org >
Message-Id: <20231116072046.4002957-1-manos.pitsidianakis@linaro.org >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
2023-12-02 15:56:49 -05:00
691d3d8bbd
virtio-snd: check AUD_register_card return value
...
AUD_register_card might fail. Even though errp was passed as an
argument, the call's return value was not checked for failure.
Fixes: Coverity CID 1523899
Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org >
Message-Id: <20231109162034.2108018-1-manos.pitsidianakis@linaro.org >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Michael S. Tsirkin <mst@redhat.com >
2023-12-02 15:56:49 -05:00
aaf851a20c
hw/audio/virtio-snd.c: spelling: initalize
...
Fixes: eb9ad377bb
"virtio-sound: handle control messages and streams"
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru >
Reviewed-by: Stefan Weil <sw@weilnetz.de >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
2023-11-15 11:09:17 +03:00
d8d64acbec
virtio-sound: implement audio capture (RX)
...
To perform audio capture we duplicate the TX logic of the previous
commit with the following difference: we receive data from the QEMU
audio backend and write it in the virt queue IO buffers the guest sends
to QEMU. When they are full (i.e. they have `period_bytes` amount of
data) or when recording stops in QEMU's audio backend, the buffer is
returned to the guest by notifying it.
Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org >
Tested-by: Alex Bennée <alex.bennee@linaro.org >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <e56a17741a24ccadfbbea19d3c60c9406b795b23.1698062525.git.manos.pitsidianakis@linaro.org >
Acked-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Michael S. Tsirkin <mst@redhat.com >
2023-11-07 03:39:10 -05:00
18a752810f
virtio-sound: implement audio output (TX)
...
Handle output IO messages in the transmit (TX) virtqueue.
It allocates a VirtIOSoundPCMBuffer for each IO message and copies the
data buffer to it. When the IO buffer is written to the host's sound
card, the guest will be notified that it has been consumed.
The lifetime of an IO message is:
1. Guest sends IO message to TX virtqueue.
2. QEMU adds it to the appropriate stream's IO buffer queue.
3. Sometime later, the host audio backend calls the output callback,
virtio_snd_pcm_out_cb(), which is defined with an AUD_open_out()
call. The callback gets an available number of bytes the backend can
receive. Then it writes data from the IO buffer queue to the backend.
If at any time a buffer is exhausted, it is returned to the guest as
completed.
4. If the guest releases the stream, its buffer queue is flushed by
attempting to write any leftover data to the audio backend and
releasing all IO messages back to the guest. This is how according to
the spec the guest knows the release was successful.
Based-on: 5a2f350eec
Signed-off-by: Igor Skalkin <Igor.Skalkin@opensynergy.com >
Signed-off-by: Anton Yakovlev <Anton.Yakovlev@opensynergy.com >
Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Tested-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <b7c6fc458c763d09a4abbcb620ae9b220afa5b8f.1698062525.git.manos.pitsidianakis@linaro.org >
Acked-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Michael S. Tsirkin <mst@redhat.com >
2023-11-07 03:39:10 -05:00
d48800d740
virtio-sound: handle VIRTIO_SND_R_PCM_RELEASE
...
Handle the PCM release control request, which is necessary for flushing
pending sound IO. No IO is handled yet so currently it only replies to
the request.
Based-on: 5a2f350eec
Signed-off-by: Igor Skalkin <Igor.Skalkin@opensynergy.com >
Signed-off-by: Anton Yakovlev <Anton.Yakovlev@opensynergy.com >
Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Tested-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <ae0afa16461429df1a2f268313d5bfcca27479ec.1698062525.git.manos.pitsidianakis@linaro.org >
Acked-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Michael S. Tsirkin <mst@redhat.com >
2023-11-07 03:39:10 -05:00
e5788b8fbf
virtio-sound: handle VIRTIO_SND_R_PCM_PREPARE
...
Handles the PCM prepare control request. It initializes a PCM stream
when the guests asks for it.
Based-on: 5a2f350eec
Signed-off-by: Igor Skalkin <Igor.Skalkin@opensynergy.com >
Signed-off-by: Anton Yakovlev <Anton.Yakovlev@opensynergy.com >
Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Tested-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <c6a9c437ef48e45f083fc957dcf7fe18a028e657.1698062525.git.manos.pitsidianakis@linaro.org >
Acked-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Michael S. Tsirkin <mst@redhat.com >
2023-11-07 03:39:10 -05:00
64704ce04b
virtio-sound: handle VIRTIO_SND_R_PCM_SET_PARAMS
...
Handle the set parameters control request. It reconfigures a stream
based on a guest's preference if the values are valid and supported.
Based-on: 5a2f350eec
Signed-off-by: Igor Skalkin <Igor.Skalkin@opensynergy.com >
Signed-off-by: Anton Yakovlev <Anton.Yakovlev@opensynergy.com >
Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Tested-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <d0d19928691f9375bfd83388806786cb7b161301.1698062525.git.manos.pitsidianakis@linaro.org >
Acked-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Michael S. Tsirkin <mst@redhat.com >
2023-11-07 03:39:10 -05:00
fa131d4a82
virtio-sound: handle VIRTIO_SND_R_PCM_{START,STOP}
...
Handle the start and stop control messages for a stream_id. This request
does nothing at the moment except for replying to it. Audio playback
or capture will be started/stopped here in follow-up commits.
Based-on: 5a2f350eec
Signed-off-by: Igor Skalkin <Igor.Skalkin@opensynergy.com >
Signed-off-by: Anton Yakovlev <Anton.Yakovlev@opensynergy.com >
Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Tested-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <9657dbfe3cb4a48ceb033ceb5977dc08669dfefd.1698062525.git.manos.pitsidianakis@linaro.org >
Acked-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Michael S. Tsirkin <mst@redhat.com >
2023-11-07 03:39:10 -05:00
0ff05dd209
virtio-sound: handle VIRTIO_SND_R_PCM_INFO request
...
Respond to the VIRTIO_SND_R_PCM_INFO control request with the parameters
of each requested PCM stream.
Based-on: 5a2f350eec
Signed-off-by: Igor Skalkin <Igor.Skalkin@opensynergy.com >
Signed-off-by: Anton Yakovlev <Anton.Yakovlev@opensynergy.com >
Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Tested-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <5ecea6ba2fb0e3957d7d90bc4dbac521a3d1f678.1698062525.git.manos.pitsidianakis@linaro.org >
Acked-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Michael S. Tsirkin <mst@redhat.com >
2023-11-07 03:39:10 -05:00
eb9ad377bb
virtio-sound: handle control messages and streams
...
Receive guest requests in the control (CTRL) queue of the virtio sound
device and reply with a NOT SUPPORTED error to all control commands.
The receiving handler is virtio_snd_handle_ctrl(). It stores all control
messages in the queue in the device's command queue. Then it calls
virtio_snd_process_cmdq() to handle each message.
The handler is process_cmd() which replies with VIRTIO_SND_S_NOT_SUPP.
Based-on: 5a2f350eec
Signed-off-by: Igor Skalkin <Igor.Skalkin@opensynergy.com >
Signed-off-by: Anton Yakovlev <Anton.Yakovlev@opensynergy.com >
Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Tested-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <3224aff87e7c4f2777bfe1bbbbca93b72525992c.1698062525.git.manos.pitsidianakis@linaro.org >
Acked-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Michael S. Tsirkin <mst@redhat.com >
2023-11-07 03:39:10 -05:00
2880e676c0
Add virtio-sound device stub
...
Add a new VIRTIO device for the virtio sound device id. Functionality
will be added in the following commits.
Based-on: 5a2f350eec
Signed-off-by: Igor Skalkin <Igor.Skalkin@opensynergy.com >
Signed-off-by: Anton Yakovlev <Anton.Yakovlev@opensynergy.com >
Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Tested-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <f9678a41fe97b5886c1b04795f1be046509de866.1698062525.git.manos.pitsidianakis@linaro.org >
Acked-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Michael S. Tsirkin <mst@redhat.com >
2023-11-07 03:39:10 -05:00