From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: Upgrade driver to 1.0.6, memory allocation? Date: Thu, 19 Aug 2004 11:53:59 +0200 Sender: alsa-devel-admin@lists.sourceforge.net Message-ID: References: <2f2201c48598$401d6d10$2701010a@mail2world.com> Mime-Version: 1.0 (generated by SEMI 1.14.5 - "Awara-Onsen") Content-Type: text/plain; charset=US-ASCII Return-path: In-Reply-To: <2f2201c48598$401d6d10$2701010a@mail2world.com> Errors-To: alsa-devel-admin@lists.sourceforge.net List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , List-Archive: To: Eliot Blennerhassett Cc: alsa-devel@lists.sourceforge.net, linux@blennerhassett.gen.nz List-Id: alsa-devel@alsa-project.org At Wed, 18 Aug 2004 19:57:23 -0700, Eliot Blennerhassett wrote: > > Hello all, > > with the upgrade to 1.0.6, my alsa driver broke. (asihpi) > Now I'm trying to put it together again, and could do with some tips... > Mostly it still contained lots of easy to fix snd_magic_cast() but > Can anybody confirm that the following update is the 'correct' thing to do? > > (My) old code: > call snd_malloc_pages_fallback in the open callback. Oh sorry, my last clean-up hits you... > > New code: > call snd_pcm_lib_malloc_pages() in the hw_params callback > > and call snd_pcm_lib_preallocate_pages_for_all() in the sound card pcm init function > (in my case snd_card_asihpi_pcm() > ================================ > By default according to pcm_memory.c, only a maximum of 4 substreams are allowed. > My cards have up to 16 substreams. > > Chapter 10 of "Writing an alsa driver" says "snd_pcm_lib_malloc_pages(substream, > size); > Note that you have to pre-allocate to use this function. " > > Does this only mean that you have to preallocate at least one buffer to use the > function? This doesn't matter. snd_pcm_lib_malloc_pages() allocates the pages automatically when no preallocated buffer exists or the request buffer size exceeds the preallocated buffer. Just call snd_pcm_preallocate_pages_for_all() for the all pcm instances to use snd_pcm_lib_malloc_pages(). > If I read it correctly, snd_pcm_lib_malloc_pages will still try to allocate some > memory for substreams> 4, this just becomes less likely as the system mem becomes > fragmented. Well but in your old code you allocated pages in the open callback, right? So it shouldn't be different. The buffer allocation in hw_params callback is usually also done only once per open. > Is there a rationale for making the substreams limit 4 as opposed to any other number? > I guess I can change the max_substreams by providing a module parameter to snd-pcm > module. > ============================ > snd_pcm_lib_preallocate_pages1() > ... > if (size> 0 && preallocate_dma && substream->number preallocate_pcm_pages(substream, size); > ... > Maybe I'm missing something, but it seems the possible error return value from > preallocate_pcm_pages is ignored - is this intentional? Yes. The error in preallocation isn't critical since snd_pcm_lib_malloc_pages() itself allocates the buffer, too. Takashi ------------------------------------------------------- SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media 100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33 Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift. http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285