diff options
author | Takashi Iwai | 2021-08-04 08:13:29 +0200 |
---|---|---|
committer | Takashi Iwai | 2021-08-04 08:13:54 +0200 |
commit | 623c10108338b6b4e2c99de9fbc785f30b526c54 (patch) | |
tree | 448d45414f6e7d839a27db514e20c7591db08e9a | |
parent | ba447289fd06c8678eaf51ccffb1b0c9a6a56c9a (diff) |
ALSA: memalloc: Fix pgprot for WC mmap on x86
We have a special handling of WC pages on x86, and it's currently
specific to HD-audio. The last forgotten piece was the pgprot setup
for the mmap with WC pages.
This patch moves the pgprot setup for WC pages from HD-audio-specific
mmap callback to the common helper code. It allows us to remove the
superfluous mmap callback in HD-audio and its prepare_mmap
redirection.
Link: https://lore.kernel.org/r/20210804061329.29265-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | sound/core/memalloc.c | 4 | ||||
-rw-r--r-- | sound/pci/hda/hda_controller.c | 11 | ||||
-rw-r--r-- | sound/pci/hda/hda_controller.h | 2 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 12 |
4 files changed, 4 insertions, 25 deletions
diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c index 58bab2cfdb87..084b2600a423 100644 --- a/sound/core/memalloc.c +++ b/sound/core/memalloc.c @@ -407,6 +407,10 @@ static void snd_dma_dev_free(struct snd_dma_buffer *dmab) 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); } diff --git a/sound/pci/hda/hda_controller.c b/sound/pci/hda/hda_controller.c index ea85c714d1cf..7cd452831fd3 100644 --- a/sound/pci/hda/hda_controller.c +++ b/sound/pci/hda/hda_controller.c @@ -669,16 +669,6 @@ static int azx_pcm_open(struct snd_pcm_substream *substream) return err; } -static int azx_pcm_mmap(struct snd_pcm_substream *substream, - struct vm_area_struct *area) -{ - struct azx_pcm *apcm = snd_pcm_substream_chip(substream); - struct azx *chip = apcm->chip; - if (chip->ops->pcm_mmap_prepare) - chip->ops->pcm_mmap_prepare(substream, area); - return snd_pcm_lib_default_mmap(substream, area); -} - static const struct snd_pcm_ops azx_pcm_ops = { .open = azx_pcm_open, .close = azx_pcm_close, @@ -688,7 +678,6 @@ static const struct snd_pcm_ops azx_pcm_ops = { .trigger = azx_pcm_trigger, .pointer = azx_pcm_pointer, .get_time_info = azx_get_time_info, - .mmap = azx_pcm_mmap, }; static void azx_pcm_free(struct snd_pcm *pcm) diff --git a/sound/pci/hda/hda_controller.h b/sound/pci/hda/hda_controller.h index e4b290de81de..3062f87380b1 100644 --- a/sound/pci/hda/hda_controller.h +++ b/sound/pci/hda/hda_controller.h @@ -74,8 +74,6 @@ struct azx; struct hda_controller_ops { /* Disable msi if supported, PCI only */ int (*disable_msi_reset_irq)(struct azx *); - void (*pcm_mmap_prepare)(struct snd_pcm_substream *substream, - struct vm_area_struct *area); /* Check if current position is acceptable */ int (*position_check)(struct azx *chip, struct azx_dev *azx_dev); /* enable/disable the link power */ diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 9771996e2ef5..3aa432d814a2 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -2037,17 +2037,6 @@ static int disable_msi_reset_irq(struct azx *chip) return 0; } -static void pcm_mmap_prepare(struct snd_pcm_substream *substream, - struct vm_area_struct *area) -{ -#ifdef CONFIG_X86 - struct azx_pcm *apcm = snd_pcm_substream_chip(substream); - struct azx *chip = apcm->chip; - if (chip->uc_buffer) - area->vm_page_prot = pgprot_writecombine(area->vm_page_prot); -#endif -} - /* Denylist for skipping the whole probe: * some HD-audio PCI entries are exposed without any codecs, and such devices * should be ignored from the beginning. @@ -2061,7 +2050,6 @@ static const struct pci_device_id driver_denylist[] = { static const struct hda_controller_ops pci_hda_ops = { .disable_msi_reset_irq = disable_msi_reset_irq, - .pcm_mmap_prepare = pcm_mmap_prepare, .position_check = azx_position_check, }; |