All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Jeff Woods <jwoods@fnordco.com>
Cc: "Greg KH" <gregkh@linuxfoundation.org>,
	"alsa-devel" <alsa-devel@alsa-project.org>,
	"stable" <stable@vger.kernel.org>,
	"regressions" <regressions@lists.linux.dev>
Subject: Re: Kernel 5.13.6 breaks mmap with snd-hdsp module
Date: Sun, 08 Aug 2021 09:01:16 +0200	[thread overview]
Message-ID: <s5him0gpghv.wl-tiwai@suse.de> (raw)
In-Reply-To: <17b22d08355.f21da1f938057.6900412371441404465@fnordco.com>

On Sun, 08 Aug 2021 00:51:35 +0200,
Jeff Woods wrote:
> 
>  ---- On Sat, 07 Aug 2021 02:26:32 -0700 Takashi Iwai <tiwai@suse.de> wrote ----
>  > On Sat, 07 Aug 2021 10:16:47 +0200,
>  > Greg KH wrote:
>  > > 
>  > > On Sat, Aug 07, 2021 at 12:49:07AM -0700, Jeff Woods wrote:
>  > > > Specifically, commit c4824ae7db418aee6f50f308a20b832e58e997fd triggers the problem. Reverting this change restores functionality.
>  > > > 
>  > > > The device is an RME Multiface II, using the snd-hdsp driver.
>  > > > 
>  > > > Expected behavior: Device plays sound normally
>  > > > 
>  > > > Exhibited behavior: When a program attempts to open the device, the following ALSA lib error happens:
>  > > > 
>  > > > ALSA lib pcm_direct.c:1169:(snd1_pcm_direct_initialize_slave) slave plugin does not support mmap interleaved or mmap noninterleaved access
>  > > > 
>  > > > This change hasn't affected my other computers with less esoteric hardware, so probably the problem lies with the snd-hdsp driver, but the device is unusable without reverting that commit.
>  > > > 
>  > > > I am available to test any patches for this issue.
>  > > 
>  > > Have you notified the developers involved in this change about this
>  > > issue?
>  > 
>  > No, it's a new report :)
>  > 
>  > > Adding them now...
>  > 
>  > Could you try the patch below?
>  > 
>  > 
>  > thanks,
>  > 
>  > Takashi
>  > 
>  > -- 8< --
>  > From: Takashi Iwai <tiwai@suse.de>
>  > Subject: [PATCH] ALSA: pci: rme: Fix mmap breakage
>  > 
>  > The recent change in the PCM core restricts the mmap of unknown buffer
>  > type, and this broke the mmap on RME9652 and HDSP drivers that didn't
>  > set up properly.  Actually those driver do use the buffers allocated
>  > in a standard way, and the proper calls should fix the breakage.
>  > 
>  > Fixes: c4824ae7db41 ("ALSA: pcm: Fix mmap capability check")
>  > Cc: <stable@vger.kernel.org>
>  > Signed-off-by: Takashi Iwai <tiwai@suse.de>
>  > ---
>  >  sound/pci/rme9652/hdsp.c    | 6 ++----
>  >  sound/pci/rme9652/rme9652.c | 6 ++----
>  >  2 files changed, 4 insertions(+), 8 deletions(-)
>  > 
>  > diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c
>  > index 8457a4bbc3df..b32a72e28917 100644
>  > --- a/sound/pci/rme9652/hdsp.c
>  > +++ b/sound/pci/rme9652/hdsp.c
>  > @@ -4518,8 +4518,7 @@ static int snd_hdsp_playback_open(struct snd_pcm_substream *substream)
>  >      snd_pcm_set_sync(substream);
>  >  
>  >          runtime->hw = snd_hdsp_playback_subinfo;
>  > -    runtime->dma_area = hdsp->playback_buffer;
>  > -    runtime->dma_bytes = HDSP_DMA_AREA_BYTES;
>  > +    snd_pcm_set_runtime_buffer(substream, hdsp->playback_dma_buf);
>  >  
>  >      hdsp->playback_pid = current->pid;
>  >      hdsp->playback_substream = substream;
>  > @@ -4595,8 +4594,7 @@ static int snd_hdsp_capture_open(struct snd_pcm_substream *substream)
>  >      snd_pcm_set_sync(substream);
>  >  
>  >      runtime->hw = snd_hdsp_capture_subinfo;
>  > -    runtime->dma_area = hdsp->capture_buffer;
>  > -    runtime->dma_bytes = HDSP_DMA_AREA_BYTES;
>  > +    snd_pcm_set_runtime_buffer(substream, hdsp->capture_dma_buf);
>  >  
>  >      hdsp->capture_pid = current->pid;
>  >      hdsp->capture_substream = substream;
>  > diff --git a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c
>  > index f1aad38760d6..8036ed761d53 100644
>  > --- a/sound/pci/rme9652/rme9652.c
>  > +++ b/sound/pci/rme9652/rme9652.c
>  > @@ -2279,8 +2279,7 @@ static int snd_rme9652_playback_open(struct snd_pcm_substream *substream)
>  >      snd_pcm_set_sync(substream);
>  >  
>  >          runtime->hw = snd_rme9652_playback_subinfo;
>  > -    runtime->dma_area = rme9652->playback_buffer;
>  > -    runtime->dma_bytes = RME9652_DMA_AREA_BYTES;
>  > +    snd_pcm_set_runtime_buffer(substream, rme9652->playback_dma_buf);
>  >  
>  >      if (rme9652->capture_substream == NULL) {
>  >          rme9652_stop(rme9652);
>  > @@ -2339,8 +2338,7 @@ static int snd_rme9652_capture_open(struct snd_pcm_substream *substream)
>  >      snd_pcm_set_sync(substream);
>  >  
>  >      runtime->hw = snd_rme9652_capture_subinfo;
>  > -    runtime->dma_area = rme9652->capture_buffer;
>  > -    runtime->dma_bytes = RME9652_DMA_AREA_BYTES;
>  > +    snd_pcm_set_runtime_buffer(substream, rme9652->capture_dma_buf);
>  >  
>  >      if (rme9652->playback_substream == NULL) {
>  >          rme9652_stop(rme9652);
>  > -- 
>  > 2.26.2
>  > 
>  
> I applied the patch to kernel 5.13.8, but compilation fails with these errors:

Oops, sorry, that was the patch for linux-next, and I forgot the
recent code change.  And it turned out not to be effective.

Below is another try.  Scratch the previous one (although it cannot
hurt), and try this one instead.


thanks,

Takashi

-- 8< --
From: Takashi Iwai <tiwai@suse.de>
Subject: [PATCH] ALSA: pcm: Fix mmap breakage without explicit buffer setup

The recent fix c4824ae7db41 ("ALSA: pcm: Fix mmap capability check")
restricts the mmap capability only to the drivers that properly set up
the buffers, but it caused a regression for a few drivers that manage
the buffer on its own way.

For those with UNKNOWN buffer type (i.e. the uninitialized / unused
substream->dma_buffer), just assume that the driver handles the mmap
properly and blindly trust the hardware info bit.

Fixes: c4824ae7db41 ("ALSA: pcm: Fix mmap capability check")
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/core/pcm_native.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index 09c0e2a6489c..71323d807dbf 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -251,7 +251,10 @@ static bool hw_support_mmap(struct snd_pcm_substream *substream)
 
 	switch (substream->dma_buffer.dev.type) {
 	case SNDRV_DMA_TYPE_UNKNOWN:
-		return false;
+		/* we can't know the device, so just assume that the driver does
+		 * everything right
+		 */
+		return true;
 	case SNDRV_DMA_TYPE_CONTINUOUS:
 	case SNDRV_DMA_TYPE_VMALLOC:
 		return true;
-- 
2.26.2


WARNING: multiple messages have this Message-ID (diff)
From: Takashi Iwai <tiwai@suse.de>
To: Jeff Woods <jwoods@fnordco.com>
Cc: Greg KH <gregkh@linuxfoundation.org>,
	alsa-devel <alsa-devel@alsa-project.org>,
	regressions <regressions@lists.linux.dev>,
	stable <stable@vger.kernel.org>
Subject: Re: Kernel 5.13.6 breaks mmap with snd-hdsp module
Date: Sun, 08 Aug 2021 09:01:16 +0200	[thread overview]
Message-ID: <s5him0gpghv.wl-tiwai@suse.de> (raw)
In-Reply-To: <17b22d08355.f21da1f938057.6900412371441404465@fnordco.com>

On Sun, 08 Aug 2021 00:51:35 +0200,
Jeff Woods wrote:
> 
>  ---- On Sat, 07 Aug 2021 02:26:32 -0700 Takashi Iwai <tiwai@suse.de> wrote ----
>  > On Sat, 07 Aug 2021 10:16:47 +0200,
>  > Greg KH wrote:
>  > > 
>  > > On Sat, Aug 07, 2021 at 12:49:07AM -0700, Jeff Woods wrote:
>  > > > Specifically, commit c4824ae7db418aee6f50f308a20b832e58e997fd triggers the problem. Reverting this change restores functionality.
>  > > > 
>  > > > The device is an RME Multiface II, using the snd-hdsp driver.
>  > > > 
>  > > > Expected behavior: Device plays sound normally
>  > > > 
>  > > > Exhibited behavior: When a program attempts to open the device, the following ALSA lib error happens:
>  > > > 
>  > > > ALSA lib pcm_direct.c:1169:(snd1_pcm_direct_initialize_slave) slave plugin does not support mmap interleaved or mmap noninterleaved access
>  > > > 
>  > > > This change hasn't affected my other computers with less esoteric hardware, so probably the problem lies with the snd-hdsp driver, but the device is unusable without reverting that commit.
>  > > > 
>  > > > I am available to test any patches for this issue.
>  > > 
>  > > Have you notified the developers involved in this change about this
>  > > issue?
>  > 
>  > No, it's a new report :)
>  > 
>  > > Adding them now...
>  > 
>  > Could you try the patch below?
>  > 
>  > 
>  > thanks,
>  > 
>  > Takashi
>  > 
>  > -- 8< --
>  > From: Takashi Iwai <tiwai@suse.de>
>  > Subject: [PATCH] ALSA: pci: rme: Fix mmap breakage
>  > 
>  > The recent change in the PCM core restricts the mmap of unknown buffer
>  > type, and this broke the mmap on RME9652 and HDSP drivers that didn't
>  > set up properly.  Actually those driver do use the buffers allocated
>  > in a standard way, and the proper calls should fix the breakage.
>  > 
>  > Fixes: c4824ae7db41 ("ALSA: pcm: Fix mmap capability check")
>  > Cc: <stable@vger.kernel.org>
>  > Signed-off-by: Takashi Iwai <tiwai@suse.de>
>  > ---
>  >  sound/pci/rme9652/hdsp.c    | 6 ++----
>  >  sound/pci/rme9652/rme9652.c | 6 ++----
>  >  2 files changed, 4 insertions(+), 8 deletions(-)
>  > 
>  > diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c
>  > index 8457a4bbc3df..b32a72e28917 100644
>  > --- a/sound/pci/rme9652/hdsp.c
>  > +++ b/sound/pci/rme9652/hdsp.c
>  > @@ -4518,8 +4518,7 @@ static int snd_hdsp_playback_open(struct snd_pcm_substream *substream)
>  >      snd_pcm_set_sync(substream);
>  >  
>  >          runtime->hw = snd_hdsp_playback_subinfo;
>  > -    runtime->dma_area = hdsp->playback_buffer;
>  > -    runtime->dma_bytes = HDSP_DMA_AREA_BYTES;
>  > +    snd_pcm_set_runtime_buffer(substream, hdsp->playback_dma_buf);
>  >  
>  >      hdsp->playback_pid = current->pid;
>  >      hdsp->playback_substream = substream;
>  > @@ -4595,8 +4594,7 @@ static int snd_hdsp_capture_open(struct snd_pcm_substream *substream)
>  >      snd_pcm_set_sync(substream);
>  >  
>  >      runtime->hw = snd_hdsp_capture_subinfo;
>  > -    runtime->dma_area = hdsp->capture_buffer;
>  > -    runtime->dma_bytes = HDSP_DMA_AREA_BYTES;
>  > +    snd_pcm_set_runtime_buffer(substream, hdsp->capture_dma_buf);
>  >  
>  >      hdsp->capture_pid = current->pid;
>  >      hdsp->capture_substream = substream;
>  > diff --git a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c
>  > index f1aad38760d6..8036ed761d53 100644
>  > --- a/sound/pci/rme9652/rme9652.c
>  > +++ b/sound/pci/rme9652/rme9652.c
>  > @@ -2279,8 +2279,7 @@ static int snd_rme9652_playback_open(struct snd_pcm_substream *substream)
>  >      snd_pcm_set_sync(substream);
>  >  
>  >          runtime->hw = snd_rme9652_playback_subinfo;
>  > -    runtime->dma_area = rme9652->playback_buffer;
>  > -    runtime->dma_bytes = RME9652_DMA_AREA_BYTES;
>  > +    snd_pcm_set_runtime_buffer(substream, rme9652->playback_dma_buf);
>  >  
>  >      if (rme9652->capture_substream == NULL) {
>  >          rme9652_stop(rme9652);
>  > @@ -2339,8 +2338,7 @@ static int snd_rme9652_capture_open(struct snd_pcm_substream *substream)
>  >      snd_pcm_set_sync(substream);
>  >  
>  >      runtime->hw = snd_rme9652_capture_subinfo;
>  > -    runtime->dma_area = rme9652->capture_buffer;
>  > -    runtime->dma_bytes = RME9652_DMA_AREA_BYTES;
>  > +    snd_pcm_set_runtime_buffer(substream, rme9652->capture_dma_buf);
>  >  
>  >      if (rme9652->playback_substream == NULL) {
>  >          rme9652_stop(rme9652);
>  > -- 
>  > 2.26.2
>  > 
>  
> I applied the patch to kernel 5.13.8, but compilation fails with these errors:

Oops, sorry, that was the patch for linux-next, and I forgot the
recent code change.  And it turned out not to be effective.

Below is another try.  Scratch the previous one (although it cannot
hurt), and try this one instead.


thanks,

Takashi

-- 8< --
From: Takashi Iwai <tiwai@suse.de>
Subject: [PATCH] ALSA: pcm: Fix mmap breakage without explicit buffer setup

The recent fix c4824ae7db41 ("ALSA: pcm: Fix mmap capability check")
restricts the mmap capability only to the drivers that properly set up
the buffers, but it caused a regression for a few drivers that manage
the buffer on its own way.

For those with UNKNOWN buffer type (i.e. the uninitialized / unused
substream->dma_buffer), just assume that the driver handles the mmap
properly and blindly trust the hardware info bit.

Fixes: c4824ae7db41 ("ALSA: pcm: Fix mmap capability check")
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/core/pcm_native.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index 09c0e2a6489c..71323d807dbf 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -251,7 +251,10 @@ static bool hw_support_mmap(struct snd_pcm_substream *substream)
 
 	switch (substream->dma_buffer.dev.type) {
 	case SNDRV_DMA_TYPE_UNKNOWN:
-		return false;
+		/* we can't know the device, so just assume that the driver does
+		 * everything right
+		 */
+		return true;
 	case SNDRV_DMA_TYPE_CONTINUOUS:
 	case SNDRV_DMA_TYPE_VMALLOC:
 		return true;
-- 
2.26.2


  reply	other threads:[~2021-08-08  7:01 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-07  7:49 Kernel 5.13.6 breaks mmap with snd-hdsp module Jeff Woods
2021-08-07  8:16 ` Greg KH
2021-08-07  8:16   ` Greg KH
2021-08-07  9:26   ` Takashi Iwai
2021-08-07  9:26     ` Takashi Iwai
2021-08-07 22:51     ` Jeff Woods
2021-08-07 22:51       ` Jeff Woods
2021-08-08  7:01       ` Takashi Iwai [this message]
2021-08-08  7:01         ` Takashi Iwai
2021-08-08 19:09         ` Jeff Woods
2021-08-08 19:09           ` Jeff Woods
2021-08-09  6:50           ` Greg KH
2021-08-09  6:50             ` Greg KH
2021-08-09  6:55           ` Takashi Iwai
2021-08-09  6:55             ` Takashi Iwai

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=s5him0gpghv.wl-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jwoods@fnordco.com \
    --cc=regressions@lists.linux.dev \
    --cc=stable@vger.kernel.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 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.