On Tue, 5 Nov 2019 09:01:35 +0100 Takashi Iwai <tiwai@xxxxxxx> wrote: > 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. > > Signed-off-by: Takashi Iwai <tiwai@xxxxxxx> > --- > Documentation/sound/kernel-api/writing-an-alsa-driver.rst | 14 ++++++++------ > sound/core/memalloc.c | 9 ++++++++- > 2 files changed, 16 insertions(+), 7 deletions(-) > > diff --git a/Documentation/sound/kernel-api/writing-an-alsa-driver.rst b/Documentation/sound/kernel-api/writing-an-alsa-driver.rst > index 132f5eb9b530..5385618fd881 100644 > --- a/Documentation/sound/kernel-api/writing-an-alsa-driver.rst > +++ b/Documentation/sound/kernel-api/writing-an-alsa-driver.rst > @@ -3523,12 +3523,14 @@ The second argument (type) and the third argument (device pointer) are > dependent on the bus. For normal devices, pass the device pointer > (typically identical as ``card->dev``) to the third argument with > ``SNDRV_DMA_TYPE_DEV`` type. For the continuous buffer unrelated to the > -bus can be pre-allocated with ``SNDRV_DMA_TYPE_CONTINUOUS`` type and the > -``snd_dma_continuous_data(GFP_KERNEL)`` device pointer, where > -``GFP_KERNEL`` is the kernel allocation flag to use. For the > -scatter-gather buffers, use ``SNDRV_DMA_TYPE_DEV_SG`` with the device > -pointer (see the `Non-Contiguous Buffers`_ > -section). > +bus can be pre-allocated with ``SNDRV_DMA_TYPE_CONTINUOUS`` type. > +You can pass NULL to the device pointer in that case, which is the > +default mode implying to allocate with ``GFP_KRENEL`` flag. > +If you need a different GFP flag, you can pass it by encoding the flag > +into the device pointer via a special macro > +:c:func:`snd_dma_continuous_data()`. > +For the scatter-gather buffers, use ``SNDRV_DMA_TYPE_DEV_SG`` with the > +device pointer (see the `Non-Contiguous Buffers`_ section). > > Once the buffer is pre-allocated, you can use the allocator in the > ``hw_params`` callback: > diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c > index 6850d13aa98c..e56f84fbd659 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_KRENEL; There is a typo, you remove it in next patch, but it may cause problem with bisects. > + else > + return (__force gfp_t)(unsigned long)dev; > +} > > /** > * snd_dma_alloc_pages - allocate the buffer area according to the given type > @@ -129,7 +136,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 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel