summaryrefslogtreecommitdiffstats
path: root/sound/core
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2019-11-05 09:01:35 +0100
committerTakashi Iwai <tiwai@suse.de>2019-11-06 15:43:18 +0100
commit08422d2c559d1119b17c14e79b2d8ff89f46a356 (patch)
tree7c27ecef45eec6b22677b33a76bd14441c1c4214 /sound/core
parentALSA: hda: Disable regmap internal locking (diff)
downloadlinux-08422d2c559d1119b17c14e79b2d8ff89f46a356.tar.xz
linux-08422d2c559d1119b17c14e79b2d8ff89f46a356.zip
ALSA: memalloc: Allow NULL device for SNDRV_DMA_TYPE_CONTINUOUS type
Currently we pass the artificial device pointer to the allocation helper in the case of SNDRV_DMA_TYPE_CONTINUOUS for passing the GFP flags. But all common cases are the allocations with GFP_KERNEL, and it's messy to put this in each place. In this patch, the memalloc core helper is changed to accept the NULL device pointer and it treats as the default mode, GFP_KERNEL, so that all callers can omit the complex argument but just leave NULL. Link: https://lore.kernel.org/r/20191105080138.1260-2-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/core')
-rw-r--r--sound/core/memalloc.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c
index 6850d13aa98c..1b1c7620cbda 100644
--- a/sound/core/memalloc.c
+++ b/sound/core/memalloc.c
@@ -99,6 +99,13 @@ static void snd_free_dev_iram(struct snd_dma_buffer *dmab)
*
*/
+static inline gfp_t snd_mem_get_gfp_flags(const struct device *dev)
+{
+ if (!dev)
+ return GFP_KERNEL;
+ else
+ return (__force gfp_t)(unsigned long)dev;
+}
/**
* snd_dma_alloc_pages - allocate the buffer area according to the given type
@@ -120,8 +127,6 @@ int snd_dma_alloc_pages(int type, struct device *device, size_t size,
return -ENXIO;
if (WARN_ON(!dmab))
return -ENXIO;
- if (WARN_ON(!device))
- return -EINVAL;
dmab->dev.type = type;
dmab->dev.dev = device;
@@ -129,7 +134,7 @@ int snd_dma_alloc_pages(int type, struct device *device, size_t size,
switch (type) {
case SNDRV_DMA_TYPE_CONTINUOUS:
dmab->area = alloc_pages_exact(size,
- (__force gfp_t)(unsigned long)device);
+ snd_mem_get_gfp_flags(device));
dmab->addr = 0;
break;
#ifdef CONFIG_HAS_DMA