mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	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>
This commit is contained in:
		
							parent
							
								
									ba447289fd
								
							
						
					
					
						commit
						623c101083
					
				
					 4 changed files with 4 additions and 25 deletions
				
			
		| 
						 | 
				
			
			@ -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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue