RHEL Engineering is moving the tracking of its product development work on RHEL 6 through RHEL 9 to Red Hat Jira (issues.redhat.com). If you're a Red Hat customer, please continue to file support cases via the Red Hat customer portal. If you're not, please head to the "RHEL project" in Red Hat Jira and file new tickets here. Individual Bugzilla bugs in the statuses "NEW", "ASSIGNED", and "POST" are being migrated throughout September 2023. Bugs of Red Hat partners with an assigned Engineering Partner Manager (EPM) are migrated in late September as per pre-agreed dates. Bugs against components "kernel", "kernel-rt", and "kpatch" are only migrated if still in "NEW" or "ASSIGNED". If you cannot log in to RH Jira, please consult article #7032570. That failing, please send an e-mail to the RH Jira admins at rh-issues@redhat.com to troubleshoot your issue as a user management inquiry. The email creates a ServiceNow ticket with Red Hat. Individual Bugzilla bugs that are migrated will be moved to status "CLOSED", resolution "MIGRATED", and set with "MigratedToJIRA" in "Keywords". The link to the successor Jira issue will be found under "Links", have a little "two-footprint" icon next to it, and direct you to the "RHEL project" in Red Hat Jira (issue links are of type "https://issues.redhat.com/browse/RHEL-XXXX", where "X" is a digit). This same link will be available in a blue banner at the top of the page informing you that that bug has been migrated.
Bug 2043498 - Starting guest with spice audio backend should fail when SPICE graphics is disabled in QEMU
Summary: Starting guest with spice audio backend should fail when SPICE graphics is di...
Keywords:
Status: CLOSED UPSTREAM
Alias: None
Product: Red Hat Enterprise Linux 9
Classification: Red Hat
Component: qemu-kvm
Version: 9.0
Hardware: Unspecified
OS: Unspecified
low
low
Target Milestone: rc
: ---
Assignee: Martin Kletzander
QA Contact: Guo, Zhiyi
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2022-01-21 11:18 UTC by Martin Kletzander
Modified: 2023-04-20 07:35 UTC (History)
13 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of: 2035163
Environment:
Last Closed: 2023-04-20 07:34:53 UTC
Type: Bug
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Issue Tracker RHELPLAN-109086 0 None None None 2022-01-21 11:23:06 UTC

Description Martin Kletzander 2022-01-21 11:18:20 UTC
+++ This bug was initially created as a clone of Bug #2035163 +++

Description of problem:
Starting guest with spice audio backend should fail when SPICE graphics is disabled in QEMU

Version-Release number of selected component (if applicable):
libvirt-7.10.0-1.el9.x86_64
qemu-kvm-6.2.0-1.el9.x86_64

How reproducible:
100%

Steps to Reproduce:
1. check whether qemu support spice
# /usr/libexec/qemu-kvm -spice ?
qemu-kvm: -spice ?: spice support is disabled

2. define a guest with the following xml snippet
    <graphics type='vnc' port='-1' autoport='yes'>
      <listen type='address'/>
    </graphics>
    <audio id='1' type='spice'/>

3. start the guest
# virsh start avocado-vt-vm1
Domain 'avocado-vt-vm1' started

4. check the qemu cmd line
# ps aux |grep spice
...
-audiodev {"id":"audio1","driver":"spice"} -vnc 127.0.0.1:4,audiodev=audio1 -device
...


Expected results:
When define or start guest with spice audio, it should report the error like "spice support is disabled with this QEMU"


Additional info:

Comment 1 Martin Kletzander 2022-01-21 11:41:41 UTC
My question for QEMU is if this is going to be disabled as well, then how can we figure out whether this is supported or not as we do not capture a spice audio capability and starting to do that would break older QEMUs.  Can we depend on spice graphics being enabled when we are trying to figure out whether the QEMU supports the audio device?  Will that not break some use case?

Comment 2 Klaus Heinrich Kiwi 2022-01-24 17:27:04 UTC
So then the questions are really two I think:

 * how to detect / negotiate audio dev support between libvirt and qemu, so that we don't advertise support for something not there
 * in case qemu is called with an unsupported audio backend, should qemu explicitly fail?

I honestly think those are questions are not specific for audio/spice, so cc'in Paolo for his thoughts, and Gerd FYI only.

Comment 3 Martin Kletzander 2022-01-24 20:49:33 UTC
(In reply to Klaus Heinrich Kiwi from comment #2)
We have a way to detect most audio devices, but spice was always regarded as graphics, not audio, so we did not probe spice audio.  And when called with unsupported audio backend I think qemu fails, it's just spice that's acting out.  Anyway, any update helps, thanks.

Comment 4 Gerd Hoffmann 2022-01-25 08:45:26 UTC
kraxel@sirius ~/projects/qemu (queue/kraxel)# qemu-default -audiodev spice,id=a1
audio: Could not init `spice' audio driver
audio: warning: Using timer based audio emulation

So, yes, qemu silently picks something else instead of throwing an error
(which indeed looks like it is not specific to spice).

Detection: 
There is qemu-default -audio-help, not sure whenever we have a qmp version of that.

In general both spice audio and spice grapics depend on the same compile time option, so typically you should have either none or both, also spice audio wouldn't actually work with spice disabled.

The modules are packaged in different sub-rpms though (qemu-ui-spice-core, qemu-audio-spice) so it is in theory possible that you have the one and not the other.

Comment 5 Martin Kletzander 2022-01-25 10:36:04 UTC
OK, sorry for the presumption in my case, I really thought spice was special with the audio.  So it seems like the change for QEMU should be changing the behaviour so that it errors out instead of falling back to something else and for libvirt we can assume that qemu has spice audio support if and only if it has spice graphics support as well.  Or should we go a step further and only allow using spice audio if at least one of the graphics is spice?

I can try and do this in both qemu and libvirt.

Comment 6 Martin Kletzander 2022-01-25 13:03:23 UTC
Oh, I missed the part about sub-rpms.  Shouldn't one depend on the other in this case?

Comment 7 Gerd Hoffmann 2022-01-26 09:53:45 UTC
(In reply to Martin Kletzander from comment #5)
> OK, sorry for the presumption in my case, I really thought spice was special
> with the audio.  So it seems like the change for QEMU should be changing the
> behaviour so that it errors out instead of falling back to something else

Yes.

> and for libvirt we can assume that qemu has spice audio support if and only
> if it has spice graphics support as well.  Or should we go a step further
> and only allow using spice audio if at least one of the graphics is spice?

The latter given that spice audio will fail anyway in case spice is not
enabled (the audio stream is sent to the spice client for playback ...).

(In reply to Martin Kletzander from comment #6)
> Oh, I missed the part about sub-rpms.  Shouldn't one depend on the other in
> this case?

Yes, spice audio should depend on spice core.
Maybe that is actually the case, didn't check.

Alternatively merge them all into a single spice sub-rpm.

Comment 8 Jonathon Jongsma 2022-01-27 17:48:08 UTC
(In reply to Gerd Hoffmann from comment #7)
> (In reply to Martin Kletzander from comment #5)
> > OK, sorry for the presumption in my case, I really thought spice was special
> > with the audio.  So it seems like the change for QEMU should be changing the
> > behaviour so that it errors out instead of falling back to something else
> 
> Yes.
> 
> > and for libvirt we can assume that qemu has spice audio support if and only
> > if it has spice graphics support as well.  Or should we go a step further
> > and only allow using spice audio if at least one of the graphics is spice?
> 
> The latter given that spice audio will fail anyway in case spice is not
> enabled (the audio stream is sent to the spice client for playback ...).

As far as I can tell, libvirt does not prevent me from configuring a domain with other audio backends even when they are not available in the qemu that libvirt is using. At least, when I try configuring a domain with the 'coreaudio' macOS audio backend on my linux host, the domain starts without problem. (When running qemu directly on this host with '-audiodev coreaudio,...' it gives the same "Using timer based audio emulation" fallback warning that Gerd mentions above.)

I suppose the spice scenario is more important because there are so many existing domains that are configured to use the spice audio backend, but this seems like a more general issue, doesn't it?

Comment 9 Martin Kletzander 2022-01-27 22:40:04 UTC
(In reply to Jonathon Jongsma from comment #8)
Your question is similar to why I actually cloned this to QEMU initially.  Even though it is customary to error out for unavailable devices, maybe audio is using fallback for some particular reason. Maybe it is so that applications using audio do not get stuck if playing even a system sound?  Maybe that's a stretch, but it seems audio does fallback for some reason, not just out of spite.  We'll see how the conversation plays out if I ever get to post the patches upstream, it might end up being something completely unexpected.

Comment 10 John Ferlan 2023-04-14 23:20:08 UTC
Marc-Andre - in my review of older, open bugs destined to be closed in the next 6 months I came across this - since you've recently added yourself to the audio subsystem in qemu can you provide some thoughts / context?  Is this fixable or worth fixing for RHEL?  Thanks...

Comment 11 Marc-Andre Lureau 2023-04-15 09:10:35 UTC
-soundhw is now gone from upstream QEMU. (we have -audio instead)

Regarding the original issue, we simply exit(1) if -audiodev is invalid, since 7.2:

commit 0f957c53c84d655f2e99677d407cf2bbe1832de4
Author: Marc-André Lureau <marcandre.lureau>
Date:   Mon Aug 22 17:10:21 2022 +0400

    audio: exit(1) if audio backend failed to be found or initialized
    
    If you specify a known backend but it isn't compiled in, or failed to
    initialize, you get a simple warning and the "none" backend as a
    fallback, and QEMU runs happily:
    
    $ qemu-system-x86_64 -audiodev id=audio,driver=dsound
    audio: Unknown audio driver `dsound'
    audio: warning: Using timer based audio emulation
    ...
    
    Instead, QEMU should fail to start:
    $ qemu-system-x86_64 -audiodev id=audio,driver=dsound
    audio: Unknown audio driver `dsound'
    $
    
    Resolves:
    https://bugzilla.redhat.com/show_bug.cgi?id=1983493


I think we can consider this bug closed upstream.

Martin, your cleanup series "[PATCH 00/18] RFC: Remove deprecated audio features" (https://patchew.org/QEMU/cover.1650874791.git.mkletzan@redhat.com/) has not been applied. Do you plan to refresh it?

thanks

Comment 12 Martin Kletzander 2023-04-19 08:28:48 UTC
(In reply to Marc-Andre Lureau from comment #11)
> -soundhw is now gone from upstream QEMU. (we have -audio instead)
> 
> Regarding the original issue, we simply exit(1) if -audiodev is invalid,
> since 7.2:
> 
> commit 0f957c53c84d655f2e99677d407cf2bbe1832de4
> Author: Marc-André Lureau <marcandre.lureau>
> Date:   Mon Aug 22 17:10:21 2022 +0400
> 
>     audio: exit(1) if audio backend failed to be found or initialized
>     
>     If you specify a known backend but it isn't compiled in, or failed to
>     initialize, you get a simple warning and the "none" backend as a
>     fallback, and QEMU runs happily:
>     
>     $ qemu-system-x86_64 -audiodev id=audio,driver=dsound
>     audio: Unknown audio driver `dsound'
>     audio: warning: Using timer based audio emulation
>     ...
>     
>     Instead, QEMU should fail to start:
>     $ qemu-system-x86_64 -audiodev id=audio,driver=dsound
>     audio: Unknown audio driver `dsound'
>     $
>     
>     Resolves:
>     https://bugzilla.redhat.com/show_bug.cgi?id=1983493
> 
> 
> I think we can consider this bug closed upstream.
> 

I agree, this is handled in libvirt and does not need any explicit work in RHEL since then.

> Martin, your cleanup series "[PATCH 00/18] RFC: Remove deprecated audio
> features"
> (https://patchew.org/QEMU/cover.1650874791.git.mkletzan@redhat.com/) has not
> been applied. Do you plan to refresh it?
> 

I did, but there were some conflicts with other patches and more important things always came first.  Since I planned to do it to mostly get more familiar with qemu's codebase it was not that important anyway.

Is there anything left to do after the mentioned commit (and any previous relevant ones)?  I'm guessing it's already been done, no?

Comment 13 Marc-Andre Lureau 2023-04-20 07:34:53 UTC
(In reply to Martin Kletzander from comment #12)
> I did, but there were some conflicts with other patches and more important
> things always came first.  Since I planned to do it to mostly get more
> familiar with qemu's codebase it was not that important anyway.

It would still be welcome.

> Is there anything left to do after the mentioned commit (and any previous
> relevant ones)?  I'm guessing it's already been done, no?

not that I know, closing


Note You need to log in before you can comment on or make changes to this bug.