Messages in this thread | | | Date | Sun, 31 May 2009 20:17:13 +0300 | From | Pekka Enberg <> | Subject | Re: [PATCH] Use kzfree in tty buffer management to enforce data sanitization |
| |
Hi Linus,
On Sun, 31 May 2009, Alan Cox wrote: >>>> memset(buf->data, 0, N_TTY_BUF_SIZE); >>>> if (PAGE_SIZE != N_TTY_BUF_SIZE) >>>> kfree(...) >>>> else >>>> free_page(...) >>>> >>>> >>>> but quite frankly, I'm not convinced about these patches at all. >>> I wonder why the tty code has that N_TTY_BUF_SIZE special casing in >>> the first place? I think we can probably just get rid of it and thus >>> we can use kzfree() here if we want to. >> Some platforms with very large page sizes override the use of page based >> allocators (eg older ARM would go around allocating 32K). The normal path >> is 4K or 8K page sized buffers.
Linus Torvalds wrote: > I think Pekka meant the other way around - why don't we always just use > kmalloc(N_TTY_BUF_SIZE)/kfree(), and drop the whole conditional "use page > allocator" entirely? > > I suspect the "use page allocator" is historical - ie the tty layer > originally always did that, and then when people wanted to suppotr smaller > areas than one page, they added the special case. I have this dim memory > of the _original_ kmalloc not handling page-sized allocations well (due to > embedded size/pointer overheads), but I think all current allocators are > perfectly happy to allocate PAGE_SIZE buffers without slop. > > If I'm right, then we could just use kmalloc/kfree unconditionally. Pekka?
Yup, that's what I meant. Even SLAB moves metadata off-slab to make sure we support PAGE_SIZE allocations nicely. SLUB even used to pass kmalloc(PAGE_SIZE) directly to the page allocator and will likely do that again once Mel Gorman's page allocator optimization patches hit mainline.
Pekka
| |