On Thu, 2005-08-04 at 10:56 -0400, linux-os (Dick Johnson) wrote: > On Thu, 4 Aug 2005, Steven Rostedt wrote: > > > > The driver doing the allocation would probably be easier. Do you mean > > that the application will do some large malloc and then pass that > > address to the driver? The driver would then need to map in those pages > > since most of them would probably not be even allocated yet (no physical > > memory associated to them). Then there's always the point to prevent > > abuse by the user. If the driver did the allocation, it would just be > > easier to control. > > [...] > > The software architecture is simply wrong. He wants to DMA data > into user-space, continuously, faster than the CPU can do anything > with the data. If the data is anything more than an experiment > in "how fast can DMA write to RAM", then the data needs to be > used, i.e., processed. In the real world of high-speed data > processing (like image processing), one writes, using DMA or > whatever, into a buffer that is to be processed. DMA is often > used so that more data can be received while the previously- > received data is being processed. The buffers are usually > allocated as a linked-list or as a pair of buffers to be > ping/ponged. Allocating a gigantic buffer for any purpose, > including sorting databases, is simply wrong. >
I just figured that his system was something unique and that he knows what he's doing in regard to that. > Data processing involves accessing data in arrays or > structures that emulate arrays of aggregate types. This > means that nearby elements are usually accessed, not elements > that are randomly scattered throughout address-space. This > locality of action is well known and is in fact why > paging is possible to provide virtual address-space. > > Allocation of DMA pages by the user will fail. This is > because many of the user's pages will likely point to > the exact same page of (probably non-existant) RAM. > That's how a virtual memory system works. In fact, > allocation of virtual address space from user-mode > just tells the kernel not to seg-fault the user if > an access is made that hasn't been allocated yet. [snip long explaination of the VM layer] > > This is why the driver must obtain the DMA pages and > the user must use mmap() to map those pages into its > address space. It's not a matter of being "easier", > it's a matter of it being the only way that will work. Well it definitely looks easier to me :-) I wouldn't say it's the only way it will work, I would be kinder and say any other way would be excruciatingly harder! As you explained. > > Also, if Mr. Koller insists upon doing the absurd, i.e., > allocating gigabytes of DMA RAM, he is going to have to > reserve memory that only his driver knows about, using > the "mem=" parameter on the boot command line. Then the > "extra" RAM above the kernel can be mapped using > ioremap_nocache() and made available for DMA and mmap(). > Yeah the reserving of 1.5+G would be difficult in a 32 bit address space. But I'm sure there's ways around it. He never actually said what his goal was. This could be simply academic, I don't know. But if he got it to work, at least that would be cool. (although I would never do such a thing in the "real" world ;-) -- Steve - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/