ALSA: pci: rme: Set up buffer type properly
authorTakashi Iwai <tiwai@suse.de>
Mon, 9 Aug 2021 07:18:28 +0000 (09:18 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 9 Aug 2021 08:04:04 +0000 (10:04 +0200)
Although the regression of the mmap was fixed in the recent commit
dc0dc8a73e8e ("ALSA: pcm: Fix mmap breakage without explicit buffer
setup"), RME9652 and HDSP drivers have still potential issues with
their mmap handling.  Namely, they use the default mmap handler
without the standard buffer preallocation, and PCM core wouldn't use
the coherent DMA mapping.  It's practically OK on x86, but on some
exotic architectures, it wouldn't work.

This patch addresses the potential breakage by replacing the buffer
setup with the proper macro.  It also simplifies the source code,
too.

Link: https://lore.kernel.org/r/20210809071829.22238-3-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/rme9652/hdsp.c
sound/pci/rme9652/rme9652.c

index 982278f8724d0f19b316d9af421d9f0641d07c01..75aa2ea733a59fbb9b77b369c6a0f3618644ba7f 100644 (file)
@@ -4507,8 +4507,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;
@@ -4584,8 +4583,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;
index 45448a97070c49329b5c596c8c5c781d4614502d..e76f737ac9e8e97005b934fb3e37d3c82d7121a2 100644 (file)
@@ -2259,8 +2259,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);
@@ -2319,8 +2318,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);