From: Steve C. <ste...@li...> - 2004-08-26 18:39:55
|
The asfxload problem is entirely soluble. Here's a message from alsa-user explaining the solution. It worked for me. ----- Original Message ----- From: "holborn" <ho...@te...> To: "Steve Conrad" <ste...@li...> Sent: Friday, May 14, 2004 6:27 PM Subject: Re: [Alsa-user] alsa-1.0.4 and asfxload > > Hi > > I currently use 2.6.6-mm1 kernel, memalloc.c is patched and works in this > version.... but if you want patch your current version that's the changes. > > If you dont have the current CVS downloaded maybe the most easy way is do > editing directly the file memalloc.c in your kernel sources, then go > to /usr/src/linux/sound/core directory .... edit memalloc.c deleting the > "-" lines and adding the "+" lines. > the @ lines are more or less the line you need to edit ... > then recompile the kernel. > > > Index: alsa-kernel/core/memalloc.c > =================================================================== > RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/core/memalloc.c,v > retrieving revision 1.30 > diff -u -r1.30 memalloc.c > --- alsa-kernel/core/memalloc.c 7 Apr 2004 17:49:39 -0000 1.30 > +++ alsa-kernel/core/memalloc.c 13 Apr 2004 16:58:05 -0000 > @@ -137,14 +137,17 @@ > dma_addr_t *dma_handle, int flags) > { > void *ret; > - u64 dma_mask; > + u64 dma_mask, coherent_dma_mask; > > if (dev == NULL || !dev->dma_mask) > return dma_alloc_coherent(dev, size, dma_handle, flags); > dma_mask = *dev->dma_mask; > + coherent_dma_mask = dev->coherent_dma_mask; > *dev->dma_mask = 0xffffffff; /* do without masking */ > + dev->coherent_dma_mask = 0xffffffff; /* do without masking */ > ret = dma_alloc_coherent(dev, size, dma_handle, flags); > *dev->dma_mask = dma_mask; /* restore */ > + dev->coherent_dma_mask = coherent_dma_mask; /* restore */ > if (ret) { > /* obtained address is out of range? */ > if (((unsigned long)*dma_handle + size - 1) & ~dma_mask) { > @@ -154,8 +157,12 @@ > } > } else { > /* wish to success now with the proper mask... */ > - if (dma_mask != 0xffffffffUL) > + if (dma_mask != 0xffffffffUL) { > + /* allocation with GFP_ATOMIC to avoid the long stall > */ > + flags &= ~GFP_KERNEL; > + flags |= GFP_ATOMIC; > ret = dma_alloc_coherent(dev, size, dma_handle, > flags); > + } > } > return ret; > } |