linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Anton Yakovlev <anton.yakovlev@opensynergy.com>
Cc: <virtualization@lists.linux-foundation.org>,
	<alsa-devel@alsa-project.org>, <virtio-dev@lists.oasis-open.org>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v6 5/9] ALSA: virtio: handling control and I/O messages for the PCM device
Date: Mon, 01 Mar 2021 16:30:36 +0100	[thread overview]
Message-ID: <s5hh7luj3hf.wl-tiwai@suse.de> (raw)
In-Reply-To: <b9c93040-52d5-7445-cb1c-c223b4fd59fb@opensynergy.com>

On Mon, 01 Mar 2021 16:24:00 +0100,
Anton Yakovlev wrote:
> 
> On 01.03.2021 15:56, Takashi Iwai wrote:
> > On Mon, 01 Mar 2021 15:47:46 +0100,
> > Anton Yakovlev wrote:
> >>
> >> On 01.03.2021 14:32, Takashi Iwai wrote:
> >>> On Mon, 01 Mar 2021 10:25:05 +0100,
> >>> Anton Yakovlev wrote:
> >>>>
> >>>> On 28.02.2021 12:27, Takashi Iwai wrote:
> >>>>> On Sat, 27 Feb 2021 09:59:52 +0100,
> >>>>> Anton Yakovlev wrote:
> >>>>>> +/**
> >>>>>> + * virtsnd_pcm_event() - Handle the PCM device event notification.
> >>>>>> + * @snd: VirtIO sound device.
> >>>>>> + * @event: VirtIO sound event.
> >>>>>> + *
> >>>>>> + * Context: Interrupt context.
> >>>>>
> >>>>> OK, then nonatomic PCM flag is invalid...
> >>>>
> >>>> Well, no. Here, events are kind of independent entities. PCM-related
> >>>> events are just a special case of more generic events, which can carry
> >>>> any kind of notification/payload. (And at the moment, only XRUN
> >>>> notification is supported for PCM substreams.) So it has nothing to do
> >>>> with the atomicity of the PCM device itself.
> >>>
> >>> OK, thanks.
> >>>
> >>> Basically the only question is how snd_pcm_period_elapsed() is called.
> >>> And I see that it's called inside queue->lock, and this already
> >>> invalidates the nonatomic PCM mode.  So the code needs the fix: either
> >>> fix this locking (and the context is guaranteed not to be an irq
> >>> context), or change to the normal PCM mode without nonatomic flag.
> >>> Both would bring some side-effect, and we need further changes, I
> >>> suppose...
> >>
> >> Ok, I understood the problem. Well, I would say the nonatomic PCM mode
> >> is more important option, since in this mode we can guarantee the
> >> correct operation of the device.
> >
> > Which operation (except for the resume) in the trigger and the pointer
> > callbacks need the action that need to sleep?  I thought the sync with
> > the command queue is done in the sync_stop.  And most of others seem
> > already taking the spinlock in themselves, so the non-atomic operation
> > has little merit for them.
> 
> All three commands from the beginning of that switch in trigger op:
> ops->trigger(START)
> ops->trigger(PAUSE_RELEASE)
> ops->trigger(RESUME)
> 
> They all result in
> virtsnd_ctl_msg_send_sync(VIRTIO_SND_R_PCM_START)
> 
> And that command must be sync, i.e. we need to wait/sleep until device
> sent response. There are two major reasons for that: we need to be sure,
> that substream has been actually started (i.e. device said OK). And we
> need to take into account the virtualization overhead as well. Since
> substream starting on device side may take some time, we can not
> return from the trigger op until it actually happened. In atomic mode
> all these nuances are lost, and it may lead to incorrect application
> behavior.

I see, then the nonatomic mode is the only way to go, indeed.


Takashi

  reply	other threads:[~2021-03-01 15:31 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20210227085956.1700687-1-anton.yakovlev@opensynergy.com>
2021-02-27  8:59 ` [PATCH v6 1/9] uapi: virtio_ids: add a sound device type ID from OASIS spec Anton Yakovlev
2021-02-27  8:59 ` [PATCH v6 2/9] ALSA: virtio: add virtio sound driver Anton Yakovlev
2021-02-27  8:59 ` [PATCH v6 3/9] ALSA: virtio: handling control messages Anton Yakovlev
2021-02-28 11:04   ` Takashi Iwai
2021-02-28 18:39     ` Anton Yakovlev
2021-02-27  8:59 ` [PATCH v6 4/9] ALSA: virtio: build PCM devices and substream hardware descriptors Anton Yakovlev
2021-02-28 11:15   ` Takashi Iwai
2021-02-27  8:59 ` [PATCH v6 5/9] ALSA: virtio: handling control and I/O messages for the PCM device Anton Yakovlev
2021-02-28 11:27   ` Takashi Iwai
2021-03-01  9:25     ` Anton Yakovlev
2021-03-01 13:32       ` Takashi Iwai
2021-03-01 14:47         ` Anton Yakovlev
2021-03-01 14:56           ` Takashi Iwai
2021-03-01 15:24             ` Anton Yakovlev
2021-03-01 15:30               ` Takashi Iwai [this message]
2021-02-27  8:59 ` [PATCH v6 6/9] ALSA: virtio: PCM substream operators Anton Yakovlev
2021-02-28 11:32   ` Takashi Iwai
2021-03-01  9:29     ` Anton Yakovlev
2021-03-01 13:33       ` Takashi Iwai
2021-02-27  8:59 ` [PATCH v6 7/9] ALSA: virtio: introduce jack support Anton Yakovlev
2021-02-27  8:59 ` [PATCH v6 8/9] ALSA: virtio: introduce PCM channel map support Anton Yakovlev
2021-02-27  8:59 ` [PATCH v6 9/9] ALSA: virtio: introduce device suspend/resume support Anton Yakovlev
2021-02-28 12:05   ` Takashi Iwai
2021-03-01 10:03     ` Anton Yakovlev
2021-03-01 13:38       ` Takashi Iwai
2021-03-01 15:30         ` Anton Yakovlev
2021-03-02  6:29     ` Anton Yakovlev
2021-03-02  6:48       ` Takashi Iwai
2021-03-02  8:09         ` Anton Yakovlev
2021-03-02  9:11           ` Takashi Iwai
2021-03-02 15:35             ` Anton Yakovlev

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=s5hh7luj3hf.wl-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=anton.yakovlev@opensynergy.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=perex@perex.cz \
    --cc=tiwai@suse.com \
    --cc=virtio-dev@lists.oasis-open.org \
    --cc=virtualization@lists.linux-foundation.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).