From: Takashi Iwai <tiwai@suse.de>
To: "Péter Ujfalusi" <peter.ujfalusi@linux.intel.com>
Cc: alsa-devel@alsa-project.org
Subject: Re: Can anyone test with AMD onboard or HDMI/DP?
Date: Fri, 17 Jun 2022 16:37:07 +0200 [thread overview]
Message-ID: <877d5f1hm4.wl-tiwai@suse.de> (raw)
In-Reply-To: <0920a0b2-31be-8629-07d0-564bb49dc60d@linux.intel.com>
On Fri, 17 Jun 2022 15:56:31 +0200,
Péter Ujfalusi wrote:
>
> Hi Takashi,
>
> On 17/06/2022 15:29, Takashi Iwai wrote:
> > Hi,
>
> Try #2, first mail did not made it through, I think.
>
> > 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
The bug isn't about the fallback of SG buffer we've already resolved,
but rather about the continuous WC page allocations that happen for
the CORB/RIRB or the position buffer on some devices like AMD.
The Intel HD-audio doesn't hit the problem.
Takashi
>
> >
> >
> > Thanks!
> >
> > Takashi
> >
> > -- 8< --
> > From: Takashi Iwai <tiwai@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@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
>
prev parent reply other threads:[~2022-06-17 14:38 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-17 12:29 Can anyone test with AMD onboard or HDMI/DP? Takashi Iwai
2022-06-17 12:40 ` Péter Ujfalusi
2022-06-17 13:56 ` Péter Ujfalusi
2022-06-17 14:37 ` Takashi Iwai [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877d5f1hm4.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=alsa-devel@alsa-project.org \
--cc=peter.ujfalusi@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox