[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