summaryrefslogtreecommitdiff
path: root/0006-ALSA-hda-Once-again-fix-regression-of-page-allocatio.patch
diff options
context:
space:
mode:
Diffstat (limited to '0006-ALSA-hda-Once-again-fix-regression-of-page-allocatio.patch')
-rw-r--r--0006-ALSA-hda-Once-again-fix-regression-of-page-allocatio.patch84
1 files changed, 0 insertions, 84 deletions
diff --git a/0006-ALSA-hda-Once-again-fix-regression-of-page-allocatio.patch b/0006-ALSA-hda-Once-again-fix-regression-of-page-allocatio.patch
deleted file mode 100644
index 93ce067..0000000
--- a/0006-ALSA-hda-Once-again-fix-regression-of-page-allocatio.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From a72ed1112caeb42af858924293b47029d7bc8500 Mon Sep 17 00:00:00 2001
-From: Takashi Iwai <tiwai@suse.de>
-Date: Tue, 6 Sep 2022 11:03:19 +0200
-Subject: [PATCH 6/7] ALSA: hda: Once again fix regression of page allocations
- with IOMMU
-
-The last fix for trying to recover the regression on AMD platforms,
-unfortunately, leaded to yet another regression: it turned out that
-IOMMUs don't like the usage of raw page allocations.
-
-This is yet another attempt for addressing the log saga; at this time,
-we re-use the existing buffer allocation mechanism with SG-pages
-although we require only single pages. The SG buffer allocation
-itself was confirmed to work for stream buffers, so it's relatively
-easy to adapt for other places.
-
-The only problem is: although the HD-audio code is accessing the
-address directly via dmab->address field, SG-pages don't set up it.
-For the ease of adaption, we now set up the dmab->addr field from the
-address of the first page as default, so that it can run with the
-HD-audio driver code as-is without the excessive call of
-snd_sgbuf_get_addr() multiple times; that's the only change in the
-memalloc helper side. The rest is nothing but a flip of the dma_type
-field in the HD-audio side.
-
-Fixes: a8d302a0b770 ("ALSA: memalloc: Revive x86-specific WC page allocations again")
-Reported-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
-Tested-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
-Cc: <stable@vger.kernel.org>
-Link: https://lore.kernel.org/r/CABXGCsO+kB2t5QyHY-rUe76npr1m0-5JOtt8g8SiHUo34ur7Ww@mail.gmail.com
-Link: https://bugzilla.kernel.org/show_bug.cgi?id=216112
-Link: https://bugzilla.kernel.org/show_bug.cgi?id=216363
-Link: https://lore.kernel.org/r/20220906090319.23358-1-tiwai@suse.de
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
----
- sound/core/memalloc.c | 9 +++++++--
- sound/pci/hda/hda_intel.c | 2 +-
- 2 files changed, 8 insertions(+), 3 deletions(-)
-
-diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c
-index 55b3c49ba61d..244afc38ddca 100644
---- a/sound/core/memalloc.c
-+++ b/sound/core/memalloc.c
-@@ -535,10 +535,13 @@ static void *snd_dma_noncontig_alloc(struct snd_dma_buffer *dmab, size_t size)
- dmab->dev.need_sync = dma_need_sync(dmab->dev.dev,
- sg_dma_address(sgt->sgl));
- p = dma_vmap_noncontiguous(dmab->dev.dev, size, sgt);
-- if (p)
-+ if (p) {
- dmab->private_data = sgt;
-- else
-+ /* store the first page address for convenience */
-+ dmab->addr = snd_sgbuf_get_addr(dmab, 0);
-+ } else {
- dma_free_noncontiguous(dmab->dev.dev, size, sgt, dmab->dev.dir);
-+ }
- return p;
- }
-
-@@ -772,6 +775,8 @@ static void *snd_dma_sg_fallback_alloc(struct snd_dma_buffer *dmab, size_t size)
- if (!p)
- goto error;
- dmab->private_data = sgbuf;
-+ /* store the first page address for convenience */
-+ dmab->addr = snd_sgbuf_get_addr(dmab, 0);
- return p;
-
- error:
-diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
-index a77165bd92a9..b20694fd69de 100644
---- a/sound/pci/hda/hda_intel.c
-+++ b/sound/pci/hda/hda_intel.c
-@@ -1817,7 +1817,7 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci,
-
- /* use the non-cached pages in non-snoop mode */
- if (!azx_snoop(chip))
-- azx_bus(chip)->dma_type = SNDRV_DMA_TYPE_DEV_WC;
-+ azx_bus(chip)->dma_type = SNDRV_DMA_TYPE_DEV_WC_SG;
-
- if (chip->driver_type == AZX_DRIVER_NVIDIA) {
- dev_dbg(chip->card->dev, "Enable delay in RIRB handling\n");
---
-2.37.2
-