Commit 69d0fd34 authored by Takashi Iwai's avatar Takashi Iwai

ASoC: dmaengine: Drop unused iov_iter for process callback

Passing the iov_iter to the process callback is rather buggy, as the
iterator has been already processed for playback.  Similarly, it makes
the copy for capture buggy after the process callback reading the
iterator out.  Moreover, all existing process callbacks don't refer to
the passed iterator at all.  So, it's better to drop the argument from
the process callback.

Fixes: 9bebd654 ("ASoC: dmaengine: Use iov_iter for process callback, too")
Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/CAHk-=wje+VkXjjfVTmK-uJdG_M5=ar14QxAwK+XDiq07k_pzBg@mail.gmail.comReviewed-by: default avatarMark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20230831130457.8180-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent da42bcb3
...@@ -142,7 +142,7 @@ struct snd_dmaengine_pcm_config { ...@@ -142,7 +142,7 @@ struct snd_dmaengine_pcm_config {
struct snd_pcm_substream *substream); struct snd_pcm_substream *substream);
int (*process)(struct snd_pcm_substream *substream, int (*process)(struct snd_pcm_substream *substream,
int channel, unsigned long hwoff, int channel, unsigned long hwoff,
struct iov_iter *buf, unsigned long bytes); unsigned long bytes);
dma_filter_fn compat_filter_fn; dma_filter_fn compat_filter_fn;
struct device *dma_dev; struct device *dma_dev;
const char *chan_names[SNDRV_PCM_STREAM_LAST + 1]; const char *chan_names[SNDRV_PCM_STREAM_LAST + 1];
......
...@@ -954,7 +954,7 @@ static int mchp_pdmc_dt_init(struct mchp_pdmc *dd) ...@@ -954,7 +954,7 @@ static int mchp_pdmc_dt_init(struct mchp_pdmc *dd)
/* used to clean the channel index found on RHR's MSB */ /* used to clean the channel index found on RHR's MSB */
static int mchp_pdmc_process(struct snd_pcm_substream *substream, static int mchp_pdmc_process(struct snd_pcm_substream *substream,
int channel, unsigned long hwoff, int channel, unsigned long hwoff,
struct iov_iter *buf, unsigned long bytes) unsigned long bytes)
{ {
struct snd_pcm_runtime *runtime = substream->runtime; struct snd_pcm_runtime *runtime = substream->runtime;
u8 *dma_ptr = runtime->dma_area + hwoff + u8 *dma_ptr = runtime->dma_area + hwoff +
......
...@@ -296,7 +296,7 @@ static int dmaengine_copy(struct snd_soc_component *component, ...@@ -296,7 +296,7 @@ static int dmaengine_copy(struct snd_soc_component *component,
struct dmaengine_pcm *pcm = soc_component_to_pcm(component); struct dmaengine_pcm *pcm = soc_component_to_pcm(component);
int (*process)(struct snd_pcm_substream *substream, int (*process)(struct snd_pcm_substream *substream,
int channel, unsigned long hwoff, int channel, unsigned long hwoff,
struct iov_iter *buf, unsigned long bytes) = pcm->config->process; unsigned long bytes) = pcm->config->process;
bool is_playback = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; bool is_playback = substream->stream == SNDRV_PCM_STREAM_PLAYBACK;
void *dma_ptr = runtime->dma_area + hwoff + void *dma_ptr = runtime->dma_area + hwoff +
channel * (runtime->dma_bytes / runtime->channels); channel * (runtime->dma_bytes / runtime->channels);
...@@ -306,7 +306,7 @@ static int dmaengine_copy(struct snd_soc_component *component, ...@@ -306,7 +306,7 @@ static int dmaengine_copy(struct snd_soc_component *component,
return -EFAULT; return -EFAULT;
if (process) { if (process) {
int ret = process(substream, channel, hwoff, buf, bytes); int ret = process(substream, channel, hwoff, bytes);
if (ret < 0) if (ret < 0)
return ret; return ret;
} }
......
...@@ -1246,7 +1246,7 @@ static const struct snd_soc_dai_ops stm32_sai_pcm_dai_ops2 = { ...@@ -1246,7 +1246,7 @@ static const struct snd_soc_dai_ops stm32_sai_pcm_dai_ops2 = {
static int stm32_sai_pcm_process_spdif(struct snd_pcm_substream *substream, static int stm32_sai_pcm_process_spdif(struct snd_pcm_substream *substream,
int channel, unsigned long hwoff, int channel, unsigned long hwoff,
struct iov_iter *buf, unsigned long bytes) unsigned long bytes)
{ {
struct snd_pcm_runtime *runtime = substream->runtime; struct snd_pcm_runtime *runtime = substream->runtime;
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment