[alsa-devel] ALSA 1.0.17rc2 release
Takashi Iwai
tiwai at suse.de
Tue Jun 17 16:38:24 CEST 2008
At Tue, 17 Jun 2008 16:24:43 +0200 (CEST),
Jaroslav Kysela wrote:
>
> On Tue, 17 Jun 2008, Takashi Iwai wrote:
>
> > At Tue, 17 Jun 2008 15:23:03 +0200 (CEST),
> > Jaroslav Kysela wrote:
> > >
> > > On Tue, 17 Jun 2008, Takashi Iwai wrote:
> > >
> > > > At Tue, 17 Jun 2008 14:12:06 +0200 (CEST),
> > > > Jaroslav Kysela wrote:
> > > > >
> > > > > On Tue, 17 Jun 2008, Takashi Iwai wrote:
> > > > >
> > > > > > At Tue, 17 Jun 2008 13:42:40 +0200 (CEST),
> > > > > > Jaroslav Kysela wrote:
> > > > > > >
> > > > > > > On Tue, 17 Jun 2008, Alan Horstmann wrote:
> > > > > > >
> > > > > > > > I have just confirmed that pasting
> > > > > > > >
> > > > > > > > #define GFP_DMA32 ((__force gfp_t)0x04u)
> > > > > > > >
> > > > > > > > into /alsa-kernel/pci/emu10k1/memory.c (not a correct fix -just taken from
> > > > > > > > 2.6.24 headers) enables build to complete. So there should be no other
> > > > > > > > hidden issues.
> > > > > > >
> > > > > > > Could you try attached patch (also pasted bellow)?
> > > > > >
> > > > > > That's too overhead. A simple #ifndef GFP_DMA32 would work.
> > > > > > And, GFP_DMA32 isn't GFP_DMA.
> > > > >
> > > > > But old kernels with dma_mask < 0xffffffff sets GFP_DMA flag for page
> > > > > allocation. So there's no regression.
> > > >
> > > > GFP_DMA32 means to allocate from ZONE_DMA32 which was a part of
> > > > ZONE_NORMAL.
> > >
> > > Yes for 2.6, but 2.4 kernels do not have this flag. The function
> > > pci_alloc_consistent() was used before your patch "[ALSA] emu10k1 -
> > > simplify page allocation for synth" and pci_alloc_consistent() just uses
> > > GFP_DMA flag for page allocation when dma_mask < 32bit. So the result is
> > > same.
> >
> > No. pci_alloc_consistent() wasn't directly used, and there was
> > already a hack for that in the memory allocator.
>
> I missed it thanks. This patch should fix memory leak in
> pci/emu10k1/memory.c:
Yeah, indeed. Thanks.
Meanwhile, I cleaned it up too.
Takashi
>
> diff --git a/sound/pci/emu10k1/memory.c b/sound/pci/emu10k1/memory.c
> index 42943b4..759e29f 100644
> --- a/sound/pci/emu10k1/memory.c
> +++ b/sound/pci/emu10k1/memory.c
> @@ -464,11 +464,17 @@ static int synth_alloc_pages(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk
> /* first try to allocate from <4GB zone */
> struct page *p = alloc_page(GFP_KERNEL | GFP_DMA32 |
> __GFP_NOWARN);
> - if (!p || (page_to_pfn(p) & ~(emu->dma_mask >> PAGE_SHIFT)))
> + if (!p || (page_to_pfn(p) & ~(emu->dma_mask >> PAGE_SHIFT))) {
> /* try to allocate from <16MB zone */
> - p = alloc_page(GFP_ATOMIC | GFP_DMA |
> + struct page *p1 =
> + alloc_page(GFP_ATOMIC | GFP_DMA |
> __GFP_NORETRY | /* no OOM-killer */
> __GFP_NOWARN);
> + /* free page outside dma_mask range */
> + if (p)
> + free_page((unsigned long)page_address(p));
> + p = p1;
> + }
> if (!p) {
> __synth_free_pages(emu, first_page, page - 1);
> return -ENOMEM;
>
> Jaroslav
>
> -----
> Jaroslav Kysela <perex at perex.cz>
> Linux Kernel Sound Maintainer
> ALSA Project, Red Hat, Inc.
>
More information about the Alsa-devel
mailing list