diff options
author | Takashi Iwai <tiwai@suse.de> | 2010-01-18 08:58:57 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-01-18 09:00:34 -0500 |
commit | c32d977b8157bf67cdf47729ce7dd054a26eb534 (patch) | |
tree | fedbd1c0d4382e88362abf81f719e6f127e19fa7 | |
parent | 3e879d7bac705be4813a0ec9560cbe31db4b269f (diff) |
ALSA: pcm - Call pgprot_noncached() for vmalloc'ed buffers
pgprot_noncached() can be set for vmalloc'ed buffers safely, and we'd
need non-cached behavior more or less, even for the intermediate ring-
buffers.
Now snd_pcm_lib_mmap_vmalloc() is added as the common PCM mmap callback
that is coupled with snd_pcm_lib_alloc_vmalloc_buffer() & co.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | include/sound/pcm.h | 4 | ||||
-rw-r--r-- | sound/core/pcm_native.c | 9 | ||||
-rw-r--r-- | sound/drivers/vx/vx_pcm.c | 2 | ||||
-rw-r--r-- | sound/mips/sgio2audio.c | 3 | ||||
-rw-r--r-- | sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c | 1 | ||||
-rw-r--r-- | sound/usb/ua101.c | 2 | ||||
-rw-r--r-- | sound/usb/usbaudio.c | 2 |
7 files changed, 23 insertions, 0 deletions
diff --git a/include/sound/pcm.h b/include/sound/pcm.h index 1d4ca2aae50d..aabf48bb8ee6 100644 --- a/include/sound/pcm.h +++ b/include/sound/pcm.h | |||
@@ -1021,6 +1021,10 @@ int snd_pcm_lib_mmap_iomem(struct snd_pcm_substream *substream, struct vm_area_s | |||
1021 | #define snd_pcm_lib_mmap_iomem NULL | 1021 | #define snd_pcm_lib_mmap_iomem NULL |
1022 | #endif | 1022 | #endif |
1023 | 1023 | ||
1024 | int snd_pcm_lib_mmap_noncached(struct snd_pcm_substream *substream, | ||
1025 | struct vm_area_struct *area); | ||
1026 | #define snd_pcm_lib_mmap_vmalloc snd_pcm_lib_mmap_noncached | ||
1027 | |||
1024 | static inline void snd_pcm_limit_isa_dma_size(int dma, size_t *max) | 1028 | static inline void snd_pcm_limit_isa_dma_size(int dma, size_t *max) |
1025 | { | 1029 | { |
1026 | *max = dma < 4 ? 64 * 1024 : 128 * 1024; | 1030 | *max = dma < 4 ? 64 * 1024 : 128 * 1024; |
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index 5df0d21f18b3..88fff44702a4 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c | |||
@@ -3176,6 +3176,15 @@ int snd_pcm_lib_mmap_iomem(struct snd_pcm_substream *substream, | |||
3176 | EXPORT_SYMBOL(snd_pcm_lib_mmap_iomem); | 3176 | EXPORT_SYMBOL(snd_pcm_lib_mmap_iomem); |
3177 | #endif /* SNDRV_PCM_INFO_MMAP */ | 3177 | #endif /* SNDRV_PCM_INFO_MMAP */ |
3178 | 3178 | ||
3179 | /* mmap callback with pgprot_noncached */ | ||
3180 | int snd_pcm_lib_mmap_noncached(struct snd_pcm_substream *substream, | ||
3181 | struct vm_area_struct *area) | ||
3182 | { | ||
3183 | area->vm_page_prot = pgprot_noncached(area->vm_page_prot); | ||
3184 | return snd_pcm_default_mmap(substream, area); | ||
3185 | } | ||
3186 | EXPORT_SYMBOL(snd_pcm_lib_mmap_noncached); | ||
3187 | |||
3179 | /* | 3188 | /* |
3180 | * mmap DMA buffer | 3189 | * mmap DMA buffer |
3181 | */ | 3190 | */ |
diff --git a/sound/drivers/vx/vx_pcm.c b/sound/drivers/vx/vx_pcm.c index c8385d26a16f..35a2f71a6af5 100644 --- a/sound/drivers/vx/vx_pcm.c +++ b/sound/drivers/vx/vx_pcm.c | |||
@@ -905,6 +905,7 @@ static struct snd_pcm_ops vx_pcm_playback_ops = { | |||
905 | .trigger = vx_pcm_trigger, | 905 | .trigger = vx_pcm_trigger, |
906 | .pointer = vx_pcm_playback_pointer, | 906 | .pointer = vx_pcm_playback_pointer, |
907 | .page = snd_pcm_lib_get_vmalloc_page, | 907 | .page = snd_pcm_lib_get_vmalloc_page, |
908 | .mmap = snd_pcm_lib_mmap_vmalloc, | ||
908 | }; | 909 | }; |
909 | 910 | ||
910 | 911 | ||
@@ -1125,6 +1126,7 @@ static struct snd_pcm_ops vx_pcm_capture_ops = { | |||
1125 | .trigger = vx_pcm_trigger, | 1126 | .trigger = vx_pcm_trigger, |
1126 | .pointer = vx_pcm_capture_pointer, | 1127 | .pointer = vx_pcm_capture_pointer, |
1127 | .page = snd_pcm_lib_get_vmalloc_page, | 1128 | .page = snd_pcm_lib_get_vmalloc_page, |
1129 | .mmap = snd_pcm_lib_mmap_vmalloc, | ||
1128 | }; | 1130 | }; |
1129 | 1131 | ||
1130 | 1132 | ||
diff --git a/sound/mips/sgio2audio.c b/sound/mips/sgio2audio.c index 9b486beeb932..6aff217379d9 100644 --- a/sound/mips/sgio2audio.c +++ b/sound/mips/sgio2audio.c | |||
@@ -691,6 +691,7 @@ static struct snd_pcm_ops snd_sgio2audio_playback1_ops = { | |||
691 | .trigger = snd_sgio2audio_pcm_trigger, | 691 | .trigger = snd_sgio2audio_pcm_trigger, |
692 | .pointer = snd_sgio2audio_pcm_pointer, | 692 | .pointer = snd_sgio2audio_pcm_pointer, |
693 | .page = snd_pcm_lib_get_vmalloc_page, | 693 | .page = snd_pcm_lib_get_vmalloc_page, |
694 | .mmap = snd_pcm_lib_mmap_vmalloc, | ||
694 | }; | 695 | }; |
695 | 696 | ||
696 | static struct snd_pcm_ops snd_sgio2audio_playback2_ops = { | 697 | static struct snd_pcm_ops snd_sgio2audio_playback2_ops = { |
@@ -703,6 +704,7 @@ static struct snd_pcm_ops snd_sgio2audio_playback2_ops = { | |||
703 | .trigger = snd_sgio2audio_pcm_trigger, | 704 | .trigger = snd_sgio2audio_pcm_trigger, |
704 | .pointer = snd_sgio2audio_pcm_pointer, | 705 | .pointer = snd_sgio2audio_pcm_pointer, |
705 | .page = snd_pcm_lib_get_vmalloc_page, | 706 | .page = snd_pcm_lib_get_vmalloc_page, |
707 | .mmap = snd_pcm_lib_mmap_vmalloc, | ||
706 | }; | 708 | }; |
707 | 709 | ||
708 | static struct snd_pcm_ops snd_sgio2audio_capture_ops = { | 710 | static struct snd_pcm_ops snd_sgio2audio_capture_ops = { |
@@ -715,6 +717,7 @@ static struct snd_pcm_ops snd_sgio2audio_capture_ops = { | |||
715 | .trigger = snd_sgio2audio_pcm_trigger, | 717 | .trigger = snd_sgio2audio_pcm_trigger, |
716 | .pointer = snd_sgio2audio_pcm_pointer, | 718 | .pointer = snd_sgio2audio_pcm_pointer, |
717 | .page = snd_pcm_lib_get_vmalloc_page, | 719 | .page = snd_pcm_lib_get_vmalloc_page, |
720 | .mmap = snd_pcm_lib_mmap_vmalloc, | ||
718 | }; | 721 | }; |
719 | 722 | ||
720 | /* | 723 | /* |
diff --git a/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c b/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c index 0afa683c900e..0d668f471620 100644 --- a/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c +++ b/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c | |||
@@ -277,6 +277,7 @@ static struct snd_pcm_ops pdacf_pcm_capture_ops = { | |||
277 | .trigger = pdacf_pcm_trigger, | 277 | .trigger = pdacf_pcm_trigger, |
278 | .pointer = pdacf_pcm_capture_pointer, | 278 | .pointer = pdacf_pcm_capture_pointer, |
279 | .page = snd_pcm_lib_get_vmalloc_page, | 279 | .page = snd_pcm_lib_get_vmalloc_page, |
280 | .mmap = snd_pcm_lib_mmap_vmalloc, | ||
280 | }; | 281 | }; |
281 | 282 | ||
282 | 283 | ||
diff --git a/sound/usb/ua101.c b/sound/usb/ua101.c index 16dc7bd5e120..4f4ccdf70dd0 100644 --- a/sound/usb/ua101.c +++ b/sound/usb/ua101.c | |||
@@ -911,6 +911,7 @@ static struct snd_pcm_ops capture_pcm_ops = { | |||
911 | .trigger = capture_pcm_trigger, | 911 | .trigger = capture_pcm_trigger, |
912 | .pointer = capture_pcm_pointer, | 912 | .pointer = capture_pcm_pointer, |
913 | .page = snd_pcm_lib_get_vmalloc_page, | 913 | .page = snd_pcm_lib_get_vmalloc_page, |
914 | .mmap = snd_pcm_lib_mmap_vmalloc, | ||
914 | }; | 915 | }; |
915 | 916 | ||
916 | static struct snd_pcm_ops playback_pcm_ops = { | 917 | static struct snd_pcm_ops playback_pcm_ops = { |
@@ -923,6 +924,7 @@ static struct snd_pcm_ops playback_pcm_ops = { | |||
923 | .trigger = playback_pcm_trigger, | 924 | .trigger = playback_pcm_trigger, |
924 | .pointer = playback_pcm_pointer, | 925 | .pointer = playback_pcm_pointer, |
925 | .page = snd_pcm_lib_get_vmalloc_page, | 926 | .page = snd_pcm_lib_get_vmalloc_page, |
927 | .mmap = snd_pcm_lib_mmap_vmalloc, | ||
926 | }; | 928 | }; |
927 | 929 | ||
928 | static const struct uac_format_type_i_discrete_descriptor * | 930 | static const struct uac_format_type_i_discrete_descriptor * |
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index 4ada98e16309..b8e0b8fda607 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c | |||
@@ -1997,6 +1997,7 @@ static struct snd_pcm_ops snd_usb_playback_ops = { | |||
1997 | .trigger = snd_usb_pcm_playback_trigger, | 1997 | .trigger = snd_usb_pcm_playback_trigger, |
1998 | .pointer = snd_usb_pcm_pointer, | 1998 | .pointer = snd_usb_pcm_pointer, |
1999 | .page = snd_pcm_lib_get_vmalloc_page, | 1999 | .page = snd_pcm_lib_get_vmalloc_page, |
2000 | .mmap = snd_pcm_lib_mmap_vmalloc, | ||
2000 | }; | 2001 | }; |
2001 | 2002 | ||
2002 | static struct snd_pcm_ops snd_usb_capture_ops = { | 2003 | static struct snd_pcm_ops snd_usb_capture_ops = { |
@@ -2009,6 +2010,7 @@ static struct snd_pcm_ops snd_usb_capture_ops = { | |||
2009 | .trigger = snd_usb_pcm_capture_trigger, | 2010 | .trigger = snd_usb_pcm_capture_trigger, |
2010 | .pointer = snd_usb_pcm_pointer, | 2011 | .pointer = snd_usb_pcm_pointer, |
2011 | .page = snd_pcm_lib_get_vmalloc_page, | 2012 | .page = snd_pcm_lib_get_vmalloc_page, |
2013 | .mmap = snd_pcm_lib_mmap_vmalloc, | ||
2012 | }; | 2014 | }; |
2013 | 2015 | ||
2014 | 2016 | ||