ALSA: hda: Use new non-cached allocation for non-snoop mode
Now the ALSA memory allocator helper supports the new non-cached pages, let's use the new type, SNDRV_DMA_TYPE_DEV_UC_SG, for HD-audio driver. This allows us to reduce lots of codes. As another positive side-effect by this patch, the long-standing issue with non-snoop mode playing in the non-mmap mode is fixed. The core memalloc helper does the proper pgprot setup for non-cached pages for vmap(), which was missing in the past. Reported-and-tested-by: Hans Hu <HansHu@zhaoxin.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
@@ -732,6 +732,7 @@ int snd_hda_attach_pcm_stream(struct hda_bus *_bus, struct hda_codec *codec,
|
||||
int pcm_dev = cpcm->device;
|
||||
unsigned int size;
|
||||
int s, err;
|
||||
int type = SNDRV_DMA_TYPE_DEV_SG;
|
||||
|
||||
list_for_each_entry(apcm, &chip->pcm_list, list) {
|
||||
if (apcm->pcm->device == pcm_dev) {
|
||||
@@ -770,7 +771,9 @@ int snd_hda_attach_pcm_stream(struct hda_bus *_bus, struct hda_codec *codec,
|
||||
size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
|
||||
if (size > MAX_PREALLOC_SIZE)
|
||||
size = MAX_PREALLOC_SIZE;
|
||||
snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
|
||||
if (chip->uc_buffer)
|
||||
type = SNDRV_DMA_TYPE_DEV_UC_SG;
|
||||
snd_pcm_lib_preallocate_pages_for_all(pcm, type,
|
||||
chip->card->dev,
|
||||
size, MAX_PREALLOC_SIZE);
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user