All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: Nordschamane <nordschamane1@proton.me>
Cc: linux-sound@vger.kernel.org
Subject: Re: [PATCH RFC v2] ALSA: pci: add analog support for ESI MAYA44e
Date: Wed, 11 Nov 2026 09:50:41 +0000	[thread overview]
Message-ID: <sashiko-outbox-208724@kernel.org> (raw)
In-Reply-To: <20261111-codex-alsa-maya44e-v2-1-c5f94d722b54@proton.me>

Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [High] ALSA: maya44e: pseudonymous Signed-off-by trailer and
  MODULE_AUTHOR
- [Medium] ALSA: maya44e: race between maya_prepare() and
  maya_pcm_reset()
--

commit f092453d5ece85565f1b326e6596d2a12340f871
Author: Nordschamane <nordschamane1@proton.me>

> ALSA: pci: add analog support for ESI MAYA44e
>
> Add four-channel analog playback and capture for the ESI MAYA44e PCIe
> card (19fe:7000, subsystem 0e51:0001). Playback and capture share the
> sample clock and can use independent period sizes. Expose analog source,
> gain, direct monitoring, DAC and crossmix controls.
>
> The ES7010L register sequence comes from observed PCI transactions and
> analysis of the ESI Windows driver. The existing ALSA PCI MAYA44 driver
> was a reference for the WM8776 command format.
>
> OpenAI Codex assisted with PCI trace analysis, driver implementation,
> test tooling and the changelog. The requests covered analog playback,
> capture, mixer controls and suspend/resume. For v2, Sashiko flagged
> potential issues. Codex checked the report against the driver and ALSA
> core and prepared the changes below.
>
> Signed-off-by: Nordschamane <nordschamane1@proton.me>

[Severity: High]
The Author header and Signed-off-by trailer use the handle "Nordschamane"
rather than a real full name as required by the Developer's Certificate of
Origin, and MODULE_AUTHOR() at the bottom of the driver uses the generic
placeholder "MAYA44e Linux reverse-engineering project".

Also, the sentences at the end of the commit message ("For v2, ... prepared
the changes below.") refer to the notes below the "---" separator and
should be moved out of the permanent changelog.

> diff --git a/sound/pci/maya44e.c b/sound/pci/maya44e.c
> new file mode 100644
> index 0000000000000..961dbde73219e
> --- /dev/null
> +++ b/sound/pci/maya44e.c

[ ... ]

> +static int maya_pcm_reset(struct snd_pcm_substream *s)
> +{
> +	struct maya *m = snd_pcm_substream_chip(s);
> +	int err;
> +
> +	/* ALSA rebases appl_ptr from this hw_ptr under the same stream lock. */
> +	err = snd_pcm_lib_reset(s);
> +	if (err < 0)
> +		return err;
> +	m->last_appl = s->runtime->status->hw_ptr;
> +	return 0;
> +}
> +
> +static int maya_prepare(struct snd_pcm_substream *s)
> +{
> +	struct maya *m = snd_pcm_substream_chip(s);
> +	unsigned long flags;
> +	int err;

[ ... ]

> +	/* A linked prepare can leave the playback buffer open to ack. */
> +	snd_pcm_stream_lock_irqsave(s, flags);
> +	memset(m->ring[0], 0, m->buffer_frames * 8);
> +	memset(m->ring[1], 0, m->buffer_frames * 8);
> +	memset(s->runtime->dma_area, 0,
> +	       s->runtime->buffer_size * maya_sample_bytes(s->runtime->format) * 4);
> +	dma_wmb();
> +	snd_pcm_stream_unlock_irqrestore(s, flags);
> +	return 0;
> +}

[Severity: Medium]
Can a concurrent maya_ack() on a linked playback substream race between
maya_prepare() and maya_pcm_reset() when SNDRV_PCM_IOCTL_PREPARE is called
on the capture substream?

When playback and capture are linked and playback is in
SNDRV_PCM_STATE_PREPARED or SNDRV_PCM_STATE_XRUN with a non-zero
m->last_appl, preparing the capture substream only sets
buffer_accessing = -1 on the capture runtime while leaving playback's
buffer_accessing at 0.  snd_pcm_do_prepare() calls ops->prepare() without
the stream lock, then updates PM QoS, and only then takes the stream lock
to call snd_pcm_reset_substream() -> maya_pcm_reset():

CPU0 (capture PREPARE)            CPU1 (playback SYNC_PTR)
snd_pcm_do_prepare(playback)
  maya_prepare(playback)
    snd_pcm_stream_lock_irqsave()
    memset(m->ring[0..1], 0, ...)
    snd_pcm_stream_unlock_irqrestore()
                                  snd_pcm_sync_ptr(playback)
                                    snd_pcm_stream_lock_irq()
                                    maya_ack(playback)
                                      writes m->ring[0..1] at old last_appl
                                      m->last_appl = appl
                                    snd_pcm_stream_unlock_irq()
  pcm_qos_req_update()
  snd_pcm_reset_substream(playback)
    maya_pcm_reset(playback)
      snd_pcm_lib_reset(playback)
      m->last_appl = 0;           <-- ring[0..1] retains stale samples

This leaves non-zero samples from the pre-reset appl_ptr offset in
m->ring[0] and m->ring[1] and discards the acknowledged pointer update.
Zeroing m->ring[0..1] and runtime->dma_area inside maya_pcm_reset() under
the same stream lock acquisition that resets appl_ptr and m->last_appl
would close this window.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261111-codex-alsa-maya44e-v2-1-c5f94d722b54@proton.me?part=1

  reply	other threads:[~2026-11-11  9:50 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-11  9:25 [PATCH RFC v2] ALSA: pci: add analog support for ESI MAYA44e Nordschamane via B4 Relay
2026-11-11  9:25 ` Nordschamane
2026-11-11  9:50 ` sashiko-bot [this message]
2026-11-11 15:17   ` Nordschamane

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=sashiko-outbox-208724@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=nordschamane1@proton.me \
    --cc=sashiko-reviews@lists.linux.dev \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.