From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4AAF8C433E6 for ; Thu, 25 Feb 2021 10:53:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E626464ECE for ; Thu, 25 Feb 2021 10:53:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235352AbhBYKwm (ORCPT ); Thu, 25 Feb 2021 05:52:42 -0500 Received: from mx2.suse.de ([195.135.220.15]:44536 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235094AbhBYKqS (ORCPT ); Thu, 25 Feb 2021 05:46:18 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 8A550AC1D; Thu, 25 Feb 2021 10:45:24 +0000 (UTC) Date: Thu, 25 Feb 2021 11:45:24 +0100 Message-ID: From: Takashi Iwai To: Anton Yakovlev Cc: , , , "Michael S. Tsirkin" , Jaroslav Kysela , Takashi Iwai , Subject: Re: [PATCH v5 5/9] ALSA: virtio: handling control and I/O messages for the PCM device In-Reply-To: <20210222153444.348390-6-anton.yakovlev@opensynergy.com> References: <20210222153444.348390-1-anton.yakovlev@opensynergy.com> <20210222153444.348390-6-anton.yakovlev@opensynergy.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 Emacs/25.3 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 22 Feb 2021 16:34:40 +0100, Anton Yakovlev wrote: > > +void virtsnd_pcm_event(struct virtio_snd *snd, struct virtio_snd_event *event) > +{ > + struct virtio_pcm_substream *vss; > + u32 sid = le32_to_cpu(event->data); > + > + if (sid >= snd->nsubstreams) > + return; > + > + vss = &snd->substreams[sid]; > + > + switch (le32_to_cpu(event->hdr.code)) { > + case VIRTIO_SND_EVT_PCM_PERIOD_ELAPSED: > + /* TODO: deal with shmem elapsed period */ > + break; > + case VIRTIO_SND_EVT_PCM_XRUN: > + spin_lock(&vss->lock); > + if (vss->xfer_enabled) > + vss->xfer_xrun = true; > + spin_unlock(&vss->lock); You can stop the stream at xrun, too. But it often messes up with the locking, so it's no mandatory implementation. You seem to pass the xrun state at the pointer callback, and this should be enough for normal uses. thanks, Takashi