26 Jun
2023
26 Jun
'23
9:52 a.m.
Hello,
Thanks for your reply! It is very helpful! Should I submit a patch as you suggested for safety?
Best wishes, Tuo Li
On Mon, Jun 26, 2023 at 3:33 PM Takashi Iwai tiwai@suse.de wrote:
On Mon, 26 Jun 2023 09:31:18 +0200, Tuo Li wrote:
Hello,
Thank you for your reply!
FWIW, the simplest fix would be something like below, just extending the mutex coverage. But it'll serialize the all calls, so it might influence on the performance, while it's the safest way.
Takashi
--- a/sound/core/pcm_memory.c +++ b/sound/core/pcm_memory.c @@ -37,20 +37,22 @@ static int do_alloc_pages(struct snd_card *card, int type, struct device *dev, enum dma_data_direction dir; int err;
mutex_lock(&card->memory_mutex); if (max_alloc_per_card &&
card->total_pcm_alloc_bytes + size > max_alloc_per_card)
return -ENOMEM;
card->total_pcm_alloc_bytes + size > max_alloc_per_card) {
err = -ENOMEM;
goto unlock;
} if (str == SNDRV_PCM_STREAM_PLAYBACK) dir = DMA_TO_DEVICE; else dir = DMA_FROM_DEVICE; err = snd_dma_alloc_dir_pages(type, dev, dir, size, dmab);
if (!err) {
mutex_lock(&card->memory_mutex);
if (!err) card->total_pcm_alloc_bytes += dmab->bytes;
mutex_unlock(&card->memory_mutex);
}
- unlock:
mutex_unlock(&card->memory_mutex); return err;
}