---- On Sat, 07 Aug 2021 02:26:32 -0700 Takashi Iwai <tiwai@xxxxxxx> 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@xxxxxxx> > 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@xxxxxxxxxxxxxxx> > Signed-off-by: Takashi Iwai <tiwai@xxxxxxx> > --- > 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: sound/pci/rme9652/hdsp.c: In function ‘snd_hdsp_playback_open’: sound/pci/rme9652/hdsp.c:4505:51: error: incompatible type for argument 2 of ‘snd_pcm_set_runtime_buffer’ 4505 | snd_pcm_set_runtime_buffer(substream, hdsp->playback_dma_buf); | ~~~~^~~~~~~~~~~~~~~~~~ | | | struct snd_dma_buffer In file included from sound/pci/rme9652/hdsp.c:23: ./include/sound/pcm.h:1154:70: note: expected ‘struct snd_dma_buffer *’ but argument is of type ‘struct snd_dma_buffer’ 1154 | struct snd_dma_buffer *bufp) | ~~~~~~~~~~~~~~~~~~~~~~~^~~~ sound/pci/rme9652/hdsp.c: In function ‘snd_hdsp_capture_open’: sound/pci/rme9652/hdsp.c:4581:51: error: incompatible type for argument 2 of ‘snd_pcm_set_runtime_buffer’ 4581 | snd_pcm_set_runtime_buffer(substream, hdsp->capture_dma_buf); | ~~~~^~~~~~~~~~~~~~~~~ | | | struct snd_dma_buffer In file included from sound/pci/rme9652/hdsp.c:23: ./include/sound/pcm.h:1154:70: note: expected ‘struct snd_dma_buffer *’ but argument is of type ‘struct snd_dma_buffer’ 1154 | struct snd_dma_buffer *bufp) | ~~~~~~~~~~~~~~~~~~~~~~~^~~~ make[3]: *** [scripts/Makefile.build:273: sound/pci/rme9652/hdsp.o] Error 1 make[2]: *** [scripts/Makefile.build:516: sound/pci/rme9652] Error 2 make[1]: *** [scripts/Makefile.build:516: sound/pci] Error 2 I also patched and compiled 5.14-rc4, but got the same errors. Next I tried cloning git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git. The patch applied and compiled, but I get the same "does not support mmap" error when trying to play anything. Let me know if there's any other info I can provide. Thanks, Jeff