On 12.02.19 13:20, David Hildenbrand wrote: > On 12.02.19 13:08, Philippe Mathieu-Daudé wrote: >> Hi David, >> >> On 2/12/19 12:47 PM, David Hildenbrand wrote: >>> On 24.01.19 14:20, Gerd Hoffmann wrote: >>>> Get rid of the pcspk_state global, allow pc speaker >>>> be added using "-device isa-pcspk". >>>> >>>> Signed-off-by: Gerd Hoffmann <kra...@redhat.com> >>>> Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com> >>>> Message-id: 20190124110810.1040-1-kra...@redhat.com >>>> --- >>>> hw/audio/pcspk.c | 35 +++++++++++++++-------------------- >>>> 1 file changed, 15 insertions(+), 20 deletions(-) >>>> >>>> diff --git a/hw/audio/pcspk.c b/hw/audio/pcspk.c >>>> index 908696d483..b80a62ce90 100644 >>>> --- a/hw/audio/pcspk.c >>>> +++ b/hw/audio/pcspk.c >>>> @@ -57,7 +57,6 @@ typedef struct { >>>> } PCSpkState; >>>> >>>> static const char *s_spk = "pcspk"; >>>> -static PCSpkState *pcspk_state; >>>> >>>> static inline void generate_samples(PCSpkState *s) >>>> { >>>> @@ -111,22 +110,6 @@ static void pcspk_callback(void *opaque, int free) >>>> } >>>> } >>>> >>>> -static int pcspk_audio_init(ISABus *bus) >>>> -{ >>>> - PCSpkState *s = pcspk_state; >>>> - struct audsettings as = {PCSPK_SAMPLE_RATE, 1, AUD_FMT_U8, 0}; >>>> - >>>> - AUD_register_card(s_spk, &s->card); >>>> - >>>> - s->voice = AUD_open_out(&s->card, s->voice, s_spk, s, pcspk_callback, >>>> &as); >>>> - if (!s->voice) { >>>> - AUD_log(s_spk, "Could not open voice\n"); >>>> - return -1; >>>> - } >>>> - >>>> - return 0; >>>> -} >>>> - >>>> static uint64_t pcspk_io_read(void *opaque, hwaddr addr, >>>> unsigned size) >>>> { >>>> @@ -179,12 +162,20 @@ static void pcspk_initfn(Object *obj) >>>> >>>> static void pcspk_realizefn(DeviceState *dev, Error **errp) >>>> { >>>> + struct audsettings as = {PCSPK_SAMPLE_RATE, 1, AUD_FMT_U8, 0}; >>>> ISADevice *isadev = ISA_DEVICE(dev); >>>> PCSpkState *s = PC_SPEAKER(dev); >>>> >>>> isa_register_ioport(isadev, &s->ioport, s->iobase); >>>> >>>> - pcspk_state = s; >>>> + AUD_register_card(s_spk, &s->card); >>>> + >>>> + s->voice = AUD_open_out(&s->card, s->voice, s_spk, s, pcspk_callback, >>>> &as); >>>> + if (!s->voice) { >>>> + error_setg(errp, "Initializing audio voice failed"); >>>> + AUD_remove_card(&s->card); >>>> + return; >>>> + } >>>> } >>>> >>>> static bool migrate_needed(void *opaque) >>>> @@ -221,8 +212,6 @@ static void pcspk_class_initfn(ObjectClass *klass, >>>> void *data) >>>> set_bit(DEVICE_CATEGORY_SOUND, dc->categories); >>>> dc->vmsd = &vmstate_spk; >>>> dc->props = pcspk_properties; >>>> - /* Reason: realize sets global pcspk_state */ >>>> - dc->user_creatable = false; >>>> } >>>> >>>> static const TypeInfo pcspk_info = { >>>> @@ -233,6 +222,12 @@ static const TypeInfo pcspk_info = { >>>> .class_init = pcspk_class_initfn, >>>> }; >>>> >>>> +static int pcspk_audio_init(ISABus *bus) >>>> +{ >>>> + isa_create_simple(bus, TYPE_PC_SPEAKER); >>>> + return 0; >>>> +} >>>> + >>>> static void pcspk_register(void) >>>> { >>>> type_register_static(&pcspk_info); >>>> >>> >>> I suddenly get (under fedora 28) >>> >>> ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: >>> Connection refused >>> >>> alsa: Could not initialize DAC >>> alsa: Failed to open `default': >>> alsa: Reason: Connection refused >>> ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: >>> Connection refused >>> >>> alsa: Could not initialize DAC >>> alsa: Failed to open `default': >>> alsa: Reason: Connection refused >> >> This ALSA problem seems on your side. >> >>> audio: Failed to create voice `pcspk' >>> qemu-system-x86_64: Initialization of device isa-pcspk failed: >>> Initializing audio voice failed >> >> Previously the errors would be ignored and QEMU would start. > > I just did a fedora 28 uupdate + reboot. Problem still exists. Would be > strange if only I would be hitting this problem with stock alsa libraries. > >> >>> >>> >>> With >>> >>> sudo x86_64-softmmu/qemu-system-x86_64 \ >>> --enable-kvm \ >>> -m 4G,maxmem=40G,slots=2 \ >>> -smp sockets=2,cores=2 \ >>> -numa node,nodeid=0,cpus=0-1 -numa node,nodeid=1,cpus=2-3 \ >>> -kernel /boot/vmlinuz-4.19.6-200.fc28.x86_64 \ >>> -append "console=ttyS0 rd.shell rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0" \ >>> -initrd /boot/initramfs-4.19.6-200.fc28.x86_64.img \ >>> -machine pc,nvdimm \ >>> -nographic \ >>> -nodefaults \ >>> -chardev stdio,id=serial \ >>> --trace events=to_trace \ >>> -device isa-serial,chardev=serial \ >>> -chardev socket,id=monitor,path=/var/tmp/monitor,server,nowait \ >>> -mon chardev=monitor,mode=readline >>> >>> >>> Could this be related to this patch? (or is maybe something about my >>> system messed up? will try rebooting, but other audio - e.g. via firefox >>> - works fine) >> >> Does your Firefox uses ALSA? The default install uses PulseAudio. > > Yes, I think so. I will try to find another tool to test ALSA. > >> >> I think the behavior change you are experiencing comes from the patch 7 >> of this series "audio: probe audio drivers by default": >> >> @@ -879,7 +879,7 @@ >> Linux) >> - audio_drv_list="oss" >> + audio_drv_list="try-pa try-alsa try-sdl oss" >> >> Previously you were using OSS, and how the ./configure found via >> pkg-config that you have the ALSA libs installed, and use ALSA first. >> >> Can you share the relevant part of the ./configure output? > > ./configure > --target-list=s390x-linux-user,s390x-softmmu,s390x-linux-user,x86_64-softmmu,ppc-softmmu,ppc64-softmmu > --enable-sdl --enable-spice --enable-kvm --enable-trace-backends=log > --enable-debug-tcg > > Gives me > > Audio drivers alsa sdl oss > > Thanks! > >> >> Thanks, >> >> Phil. >> > >
Using speaker-test t460s: ~ $ aplay -L null Discard all samples (playback) or generate zero samples (capture) pulse PulseAudio Sound Server default Default ALSA Output (currently PulseAudio Sound Server) sysdefault:CARD=PCH HDA Intel PCH, ALC293 Analog Default Audio Device t460s: ~ $ LANG=C speaker-test -c 2 -d default speaker-test 1.1.6 Playback device is default Stream parameters are 48000Hz, S16_LE, 2 channels Using 16 octaves of pink noise Rate set to 48000Hz (requested 48000Hz) Buffer size range from 96 to 1048576 Period size range from 32 to 349526 Using max buffer size 1048576 Periods = 4 was set period_size = 262144 was set buffer_size = 1048576 ALSA <-> PulseAudio PCM I/O Plugin Its setup is: stream : PLAYBACK access : RW_INTERLEAVED format : S16_LE subformat : STD channels : 2 rate : 48000 exact rate : 48000 (48000/1) msbits : 16 buffer_size : 1048576 period_size : 262144 period_time : 5461333 tstamp_mode : NONE tstamp_type : GETTIMEOFDAY period_step : 1 avail_min : 262144 period_event : 0 start_threshold : 1048576 stop_threshold : 1048576 silence_threshold: 0 silence_size : 0 boundary : 4611686018427387904 However, root seems to be the issue t460s: ~ $ LANG=C sudo speaker-test -c 2 -d default speaker-test 1.1.6 Playback device is default Stream parameters are 48000Hz, S16_LE, 2 channels Using 16 octaves of pink noise ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection refused Playback open error: -111,Connection refused -- Thanks, David / dhildenb