On Fri, 17 Jan 2020 11:56:48 +0100, Keyon Jie wrote: > > On 2020/1/17 下午6:30, Takashi Iwai wrote: > > On Fri, 17 Jan 2020 11:13:31 +0100, > > Keyon Jie wrote: > >> > >> > >> > >> On 2020/1/17 下午3:57, Takashi Iwai wrote: > >>> On Fri, 17 Jan 2020 06:30:18 +0100, > >>> Keyon Jie wrote: > >>>> > >>>> On 2020/1/17 上午4:37, Takashi Iwai wrote: > >>>> > >>>> Hi Takashi, I get your concern here, but if we switch to use dma_max > >>>> limit, we won't change the preallocated buffer, it will be still 64KB > >>>> for each stream, user space can ask for re-allocate buffer for each > >>>> stream up to 32MB, but those pinned and can't be swapped out ones are > >>>> the 64KB preallocated ones only, am I wrong? > >>> > >>> No, in general, all sound hardware buffers are pinned. > >> > >> Sorry, I must have been wrong here, what I was focusing on is those > >> allocated SG DMA buffers, I am not sure if they are those you called > >> "hardware buffers" here. > >> > >> My understanding was like this: > >> > >> 1. in pcm_new() stage, the device PCM driver should call > >> snd_pcm_lib_preallocate_pages()-> > >> snd_pcm_lib_preallocate_pages()-> > >> preallocate_pcm_pages() > >> and then the substream->dma_buffer is initialized with the > >> preallocated buffer. > >> > >> 2. in pcm_open() stage, the device PCM driver should call > >> snd_pcm_lib_malloc_pages()-> > >> snd_dma_alloc_pages() //if we need to reallocate bigger > >> buffer. *The substream->dma_buffer won't be freed, Takashi, this is > >> what I thought you named "pinned" buffer.* And those reallocated > >> bigger buffer via snd_dma_alloc_pages() will be freed at pcm_close() > >> per my understanding? > > > > What I meant as "pinned" is that the pages are not swapped out by > > swapper process like the user-space or anonymous pages. > > So if you open all streams (say 16 streams) on a machine with 32MB > > buffers, it'll cost a half GB. And, we have no restriction about > > which user may do it, so all normal users who have the access to the > > sound device can consume a half GB kernel space pages easily. For a > > big server it's no problem, but for a small system, it's costing. > > Understood, you are concerning about intentional attack from user > space about memory consuming, you propose that normal user should be > permitted to use the default 64KB only, if larger buffer required, > please use proc fs expert mode, is my understanding correct? Well, a normal user may want 1MB or 2MB buffer, and that's not too bad. So the most distros already set the larger preallocation for HD-audio explicitly via CONFIG_SND_HDA_PREALLOC_SIZE without procfs adjustment, I believe. Then the system allows normal users buffers up to the given size. Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel