qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: "Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	qemu-devel@nongnu.org
Cc: Brad Smith <brad@comstyle.com>
Subject: Re: [Qemu-devel] [PULL 1/7] audio: fix pc speaker init
Date: Tue, 12 Feb 2019 13:25:08 +0100	[thread overview]
Message-ID: <d53d221e-3f5f-3854-c44f-bf310237d1c9@redhat.com> (raw)
In-Reply-To: <d068cf4a-f191-820c-032d-5e70caa999ce@redhat.com>

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 <kraxel@redhat.com>
>>>> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>>>> Message-id: 20190124110810.1040-1-kraxel@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

  reply	other threads:[~2019-02-12 12:35 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-24 13:20 [Qemu-devel] [PULL 0/7] Audio 20190124 patches Gerd Hoffmann
2019-01-24 13:20 ` [Qemu-devel] [PULL 1/7] audio: fix pc speaker init Gerd Hoffmann
2019-02-12 11:47   ` David Hildenbrand
2019-02-12 12:08     ` Philippe Mathieu-Daudé
2019-02-12 12:20       ` David Hildenbrand
2019-02-12 12:25         ` David Hildenbrand [this message]
2019-01-24 13:20 ` [Qemu-devel] [PULL 2/7] audio: use pkg-config Gerd Hoffmann
2019-01-24 13:20 ` [Qemu-devel] [PULL 3/7] audio: allow optional audio drivers Gerd Hoffmann
2019-01-24 13:20 ` [Qemu-devel] [PULL 4/7] audio: use try-sdl for openbsd Gerd Hoffmann
2019-01-24 13:20 ` [Qemu-devel] [PULL 5/7] audio: check for pulseaudio daemon pidfile Gerd Hoffmann
2019-01-24 13:20 ` [Qemu-devel] [PULL 6/7] audio: error message tweak Gerd Hoffmann
2019-01-24 13:20 ` [Qemu-devel] [PULL 7/7] audio: probe audio drivers by default Gerd Hoffmann
2019-02-15 14:46   ` Daniel P. Berrangé
2019-01-25 11:51 ` [Qemu-devel] [PULL 0/7] Audio 20190124 patches Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d53d221e-3f5f-3854-c44f-bf310237d1c9@redhat.com \
    --to=david@redhat.com \
    --cc=brad@comstyle.com \
    --cc=kraxel@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).