Prev: [PATCH] intel_idle: add missing __percpu markup
Next: [PATCH] tcp: no md5sig option size check bug
From: Leon Woestenberg on 7 Aug 2010 14:40 Hello all, can I use the UIO framework for the following? The userspace portion of the driver allocates memory in user-space using malloc() - usually resulting in a scatter pages in physical memory. The UIO kernel portion of the driver maps those using pci_map_sg(). Is this possible, or does the UIO framework assume memory for DMA is allocated in kernel space? Thanks, -- Leon -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Hans J. Koch on 9 Aug 2010 07:20 On Sat, Aug 07, 2010 at 08:38:30PM +0200, Leon Woestenberg wrote: > Hello all, > > can I use the UIO framework for the following? > > The userspace portion of the driver allocates memory in user-space > using malloc() - usually resulting in a scatter pages in physical > memory. > The UIO kernel portion of the driver maps those using pci_map_sg(). > > Is this possible, or does the UIO framework assume memory for DMA is > allocated in kernel space? You would have to write your own mmap() function and and set the pointer to it in struct uio_info->mmap. Have a look at uio_mmap() in drivers/uio/uio.c to see when your function will be called, and what is checked before that call. If that works, we might invent a new UIO_MEM_* type, and move your function over to the UIO core, if this is interesting for other people. Anyway, sooner or later we should have a generic way of handling DMA in UIO. The topic comes up every few month, but nobody came up with an acceptable solution yet. It should probably be a separate uio_dma device, e.g. for a /dev/uio0 you'll get a /dev/uio_dma0 if the driver sets a flag indicating it needs DMA support. This new uio_dma device should then have an API (to be defined, without ioctl if possible) that provides the necessary functionality. But that's just a thought ATM. Ideas/patches are welcome. Thanks, Hans -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Hans J. Koch on 9 Aug 2010 20:20 On Mon, Aug 09, 2010 at 01:11:56PM +0200, Hans J. Koch wrote: > On Sat, Aug 07, 2010 at 08:38:30PM +0200, Leon Woestenberg wrote: > > Hello all, > > > > can I use the UIO framework for the following? > > > > The userspace portion of the driver allocates memory in user-space > > using malloc() - usually resulting in a scatter pages in physical > > memory. > > The UIO kernel portion of the driver maps those using pci_map_sg(). > > > > Is this possible, or does the UIO framework assume memory for DMA is > > allocated in kernel space? > > You would have to write your own mmap() function and and set the pointer > to it in struct uio_info->mmap. Have a look at uio_mmap() in A few more thoughts about that: The UIO core currently doesn't support dynamically allocated memory. That means, even if you manage to mmap your memory allocated in userspace, it won't show up in sysfs. ATM, all UIO supports is memory allocated at device creation time in kernel space. So, what your trying to do is something that could probably work. The uio_info->mmap pointer was made for unusual mappings. But it still causes me some headaches. I'm not sure if this can be considered a clean solution. An extension that makes UIO deal properly with dynamically allocated (DMA-) memory would certainly be preferable. Hans -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Leon Woestenberg on 11 Aug 2010 14:50 Hello Hans, On Tue, Aug 10, 2010 at 2:12 AM, Hans J. Koch <hjk(a)linutronix.de> wrote: > On Mon, Aug 09, 2010 at 01:11:56PM +0200, Hans J. Koch wrote: >> On Sat, Aug 07, 2010 at 08:38:30PM +0200, Leon Woestenberg wrote: >> > Hello all, >> > >> > can I use the UIO framework for the following? >> > >> > The userspace portion of the driver allocates memory in user-space >> > using malloc() - usually resulting in a scatter pages in physical >> > memory. >> > The UIO kernel portion of the driver maps those using pci_map_sg(). >> > >> > Is this possible, or does the UIO framework assume memory for DMA is >> > allocated in kernel space? >> >> You would have to write your own mmap() function and and set the pointer >> to it in struct uio_info->mmap. Have a look at uio_mmap() in > Why would I need to mmap() the user space memory into kernel space? Looking from a traditional device driver perspective the kernel space only needs to know the virtual address and the length of the buffer, and can then make up a scatter list. After DMA finished, it needs to synchronize caches. In fact, from my simplistic view, the kernel provides a few internal house keeping tools, and we need to export this functionality into UIO API's. SGDMA to from user memory would be one of the uses. In fact, when UIO started, I also expected the kernel buffers to be user application managed, like the driver steering code. > uio_info->mmap pointer was made for unusual mappings. But it still causes > me some headaches. I'm not sure if this can be considered a clean solution. > An extension that makes UIO deal properly with dynamically allocated (DMA-) > memory would certainly be preferable. > Thanks for thinking along. I am currently refraining from using UIO, as I don't like the head ache feature :-) Regards, -- Leon -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Hans J. Koch on 11 Aug 2010 20:20 On Wed, Aug 11, 2010 at 08:42:35PM +0200, Leon Woestenberg wrote: [...] > > I am currently refraining from using UIO, as I don't like the head > ache feature :-) Well, if you need feature X, capability Y, or usecase Z, feel free to send patches. I (and several of my colleagues) wrote quite a lot of UIO drivers for various chips in the last 4 years. I never had a device that needed DMA on my desk yet, otherwise support for it would be in mainline now. UIO was mainly invented to prevent people from writing large character device drivers that will never make it to mainline, and then having to maintain them off-tree. It is not a general purpose driver interface but a small framework to handle a special class of hardware that doesn't fit into any other subsystem. If you've got such hardware, and you need a certain feature, think about how it can be done, and let us know. Thanks, Hans > > Regards, > -- > Leon -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|
Pages: 1 Prev: [PATCH] intel_idle: add missing __percpu markup Next: [PATCH] tcp: no md5sig option size check bug |