LWN.net Logo

Driver porting: Zero-copy user-space access

Driver porting: Zero-copy user-space access

Posted Feb 15, 2006 17:17 UTC (Wed) by ceb (guest, #35717)
Parent article: Driver porting: Zero-copy user-space access

Does anyone have any experience in using get_user_pages in a real system. As far as I can tell it is totally unreliable when the machine is in any way loaded. As well as getting zero addresses for pages returned, the physical addresses don't seem to correspond to the data to be transferred. This is on various flavors of Linux 2.6 based kernels.

This seems to rule out performing DMA directly from user space but I would like to be told that I'm wrong.


(Log in to post comments)

Driver porting: Zero-copy user-space access

Posted Jun 2, 2007 1:48 UTC (Sat) by yltian (guest, #45556) [Link]

Please "grep get_user_pages linux/drivers/media/video/video-buf.c". It's a good example. V4L2 uses this method to share memory betweent DMA and application.

Driver porting: Zero-copy user-space access

Posted Sep 6, 2007 15:28 UTC (Thu) by dnevil (guest, #47212) [Link]

Sounds like your system is allocating memory from ZONE_HIGHMEM (since you are on a heavily loaded system, and you are probably running i386). The comments in include/linux/mm_types states that if page->virtual is null then the page is not mapped into kernel virtual memory (i.e. it is HIGHMEM). You should try allocating your memory as soon after system boot as possible. Are there other 'tricks' for assuring that user-allocated memory comes from ZONE_NORMAL or ZONE_DMA?

Driver porting: Zero-copy user-space access

Posted Sep 6, 2007 16:31 UTC (Thu) by dnevil (guest, #47212) [Link]

Try booting with a kernel parameter of "highmem=0".

Copyright © 2008, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds
Powered by Rackspace Managed Hosting.