On Fri, Mar 20, 2015 at 01:37:50PM +0200, Tomi Valkeinen wrote: > On 15/03/15 00:02, Geert Uytterhoeven wrote: > > On Fri, Mar 13, 2015 at 10:31 PM, Thomas Niederprüm > > wrote: > >> Am Tue, 10 Mar 2015 13:28:25 +0200 > >> schrieb Tomi Valkeinen : > >>> Also, isn't doing __pa() for the memory returned by vmalloc plain > >>> wrong? > >> > >>> What was the crash about when using kmalloc? It would be good to fix > >>> defio, as I don't see why it should not work with kmalloced memory. > >> > >> The main challenge here is that the memory handed to userspace upon > >> mmap call needs to be page aligned. The memory returned by kmalloc has > >> no such alignment, but the pointer presented to the userspace program > >> gets aligned to next page boundary. It's not clear to me whether there > >> is an easy way to obtain page aligned kmalloc memory. Memory > >> allocated by vmalloc on the other hand is always aligned to page > >> boundaries. This is why I chose to go for vmalloc. > > > > __get_free_pages()? > > I'm not that experienced with mem management, so I have to ask... > __get_free_pages() probably works fine, but isn't vmalloc better here? > > __get_free_pages() will give you possibly a lot more memory than you > need. And the memory is contiguous, so it could be difficult to allocate > a larger memory area. The driver doesn't need contiguous memory (except > in the virtual sense). vmalloc also returns pages, so the size will be page-aligned. It doesn't make much of a difference here, since we will only use a single page in both case (the max resolution of these screens is 128x39, with one bit per pixel). Maxime -- Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com