Can anyone test with AMD onboard or HDMI/DP?
Péter Ujfalusi
peter.ujfalusi at linux.intel.com
Fri Jun 17 14:40:05 CEST 2022
On 17/06/2022 15:29, Takashi Iwai wrote:
> Hi,
>
> can anyone have an AMD onboard audio device and/or AMD HDMI/DP output
> for testing a patch below with 5.18.x or 5.19-rc kernels? It's a
> pending fix (for 5.18+), but currently it can't be verified whether it
> causes a regression on the actual audio I/O (while it fixes the kernel
> crash).
>
> If the generic allocator still doesn't work as expected here, it
> should show some audio stuttering or such effect.
But the fallback was needed for some machines using SOF to be able to
load the firmware...
like this:
https://github.com/thesofproject/linux/issues/3609
>
> Thanks!
>
> Takashi
>
> -- 8< --
> From: Takashi Iwai <tiwai at suse.de>
> Subject: [PATCH] ALSA: memalloc: Drop x86-specific hack for WC allocations
>
> The recent report for a crash on Haswell machines implied that the
> x86-specific (rather hackish) implementation for write-cache memory
> buffer allocation in ALSA core is buggy with the recent kernel in some
> corner cases. This patch drops the x86-specific implementation and
> uses the standard dma_alloc_wc() & co generically for avoiding the bug
> and also for simplification.
>
> BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=216112
> Signed-off-by: Takashi Iwai <tiwai at suse.de>
> ---
> sound/core/memalloc.c | 23 +----------------------
> 1 file changed, 1 insertion(+), 22 deletions(-)
>
> diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c
> index 15dc7160ba34..8cfdaee77905 100644
> --- a/sound/core/memalloc.c
> +++ b/sound/core/memalloc.c
> @@ -431,33 +431,17 @@ static const struct snd_malloc_ops snd_dma_iram_ops = {
> */
> static void *snd_dma_dev_alloc(struct snd_dma_buffer *dmab, size_t size)
> {
> - void *p;
> -
> - p = dma_alloc_coherent(dmab->dev.dev, size, &dmab->addr, DEFAULT_GFP);
> -#ifdef CONFIG_X86
> - if (p && dmab->dev.type == SNDRV_DMA_TYPE_DEV_WC)
> - set_memory_wc((unsigned long)p, PAGE_ALIGN(size) >> PAGE_SHIFT);
> -#endif
> - return p;
> + return dma_alloc_coherent(dmab->dev.dev, size, &dmab->addr, DEFAULT_GFP);
> }
>
> static void snd_dma_dev_free(struct snd_dma_buffer *dmab)
> {
> -#ifdef CONFIG_X86
> - if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_WC)
> - set_memory_wb((unsigned long)dmab->area,
> - PAGE_ALIGN(dmab->bytes) >> PAGE_SHIFT);
> -#endif
> dma_free_coherent(dmab->dev.dev, dmab->bytes, dmab->area, dmab->addr);
> }
>
> static int snd_dma_dev_mmap(struct snd_dma_buffer *dmab,
> struct vm_area_struct *area)
> {
> -#ifdef CONFIG_X86
> - if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_WC)
> - area->vm_page_prot = pgprot_writecombine(area->vm_page_prot);
> -#endif
> return dma_mmap_coherent(dmab->dev.dev, area,
> dmab->area, dmab->addr, dmab->bytes);
> }
> @@ -471,10 +455,6 @@ static const struct snd_malloc_ops snd_dma_dev_ops = {
> /*
> * Write-combined pages
> */
> -#ifdef CONFIG_X86
> -/* On x86, share the same ops as the standard dev ops */
> -#define snd_dma_wc_ops snd_dma_dev_ops
> -#else /* CONFIG_X86 */
> static void *snd_dma_wc_alloc(struct snd_dma_buffer *dmab, size_t size)
> {
> return dma_alloc_wc(dmab->dev.dev, size, &dmab->addr, DEFAULT_GFP);
> @@ -497,7 +477,6 @@ static const struct snd_malloc_ops snd_dma_wc_ops = {
> .free = snd_dma_wc_free,
> .mmap = snd_dma_wc_mmap,
> };
> -#endif /* CONFIG_X86 */
>
> #ifdef CONFIG_SND_DMA_SGBUF
> static void *snd_dma_sg_fallback_alloc(struct snd_dma_buffer *dmab, size_t size);
--
Péter
More information about the Alsa-devel
mailing list