[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Can't allocate DMA buffer



On Wed, May 05, 1999 at 10:23:29AM -0600, Jake Griesbach wrote:
> I'm running the most recent kernel (2.2.7), and I also use a Crystal
> semiconductor sound card, so I have the cs4232 kernel module.  Sometimes I
> get the kernel error: 
> 
>   kernel: Sound error: Couldn't allocate DMA buffer
> 
> I have plenty of available memory left, so I don't understand why I am
> getting this error.  Has anybody else received this error?  Does anybody
> know of a workaround or fix for it?  I haven't received this error before
> installing the 2.2.7 kernel.

linux/Documentation/sound/README.modules

The sound modules normally allocate DMA buffers during open() and
deallocate them during close(). Linux can often have problems allocating
DMA buffers for ISA cards on machines with more than 16MB RAM. This is
because ISA DMA buffers must exist below the 16MB boundry and it is quite
possible that we can't find a large enough free block in this region after
the machine has been running for any amount of time. The way to avoid this
problem is to allocate the DMA buffers during module load and deallocate
them when the module is unloaded. For this to be effective we need to load
the sound modules right after the kernel boots, either manually or by an
init script, and keep them around until we shut down. This is a little
wasteful of RAM, but it guarantees that sound always works.

To make the sound driver use persistent DMA buffers we need to pass the
sound.o module a "dmabuf=1" command-line argument. This is normally done
in /etc/conf.modules (or the more proper /etc/modules.conf) like so:

options sound           dmabuf=1

If you have 16MB or less RAM or a PCI sound card, this is wasteful and
unnecessary. It is possible that machine with 16MB or less RAM will find
this option useful, but if your machine is so memory-starved that it
cannot find a 64K block free, you will be wasting even more RAM by keeping
the sound modules loaded and the DMA buffers allocated when they are not
needed. The proper solution is to upgrade your RAM. But you do also have
this improper solution as well. Use it wisely.

Documentation is nifty.

-- 
Ian Peters		"I never let schooling interfere with my education."
itp@gnu.org					-- Mark Twain


Reply to: