Hi,
I'm not very familiar with DMA, but I remembered that only certain pages can be used for DMA. Or was that only for ISA? Anyway, if that is not the case, it becomes a lot simpler.
The L4-Hurd design uses the idea to give the costs to the user (which is a program in this context). This is true in many places, in particular for memory. For example, if a client wants to read data from a filesystem, it supplies a page to the filesystem, which then fills it with data.
You suggest to leave that design for DMA. If there are special "DMA-pages", that doesn't sound strange: Otherwise a DoS-attack would be possible by allocating many DMA pages. Of course there could be a quota system, which might be enough to prevent this. If all pages can be used for DMA, I don't see any reason not to use the normal approach of the client providing the memory for the operation.
You say the user can die on you, leaving a big mess. This is no problem, as the container is shared by the driver and the user. If the user dies, the container is not deallocated until the driver lets go of it. It shouldn't do that before the DMA operation is finished. It is not unusual for device drivers to wait with freeing resources after client death until the device has finished its operation. This is not a big problem. I think it should not be a reason to leave a good design decision.
If I misunderstood you, please rephrase.
Thanks, Bas
Markus Kode Kaarn wrote:
Hey everybody,
For last few days i came whith idea of how Device-Drivers, should handle DMA requests. If DMA channels access can be considered as a priviledge of only PLM's, or even centralized DMA driver(which is prefered), through which will all DMA requests will be handled. First, i think DD's, that receives DMA request from user for the first time, should allocate/map memory for it selt by requesting it from physmem. Then share this region of memory whith task(as far as i can think these will be device drivers) that requests DMA. There would be read-only and the writeable memory shared, every of which is decided to be given whereas task want to receive(read) data, or send(write) it. Here i can see a good decision on that only a DMA driver should allocate and share memory regions whith tasks requesting the operations. Because allowing user to supply a buffer is not far clever, cause user can die or give up its pages back to physmem, and at time of receive-operation from DMA channel memory region could be used by some other task.
This probably can apply not only to DMA operations. Some system part that provide service(s) to many tasks may can come whith this approach.
At the moment i don't know much about the memory allocation/sharing in hurd-l4 and can't be more specific on this, or supply code.
Comments please.
-- I encourage people to send encrypted e-mail (see http://www.gnupg.org). If you have problems reading my e-mail, use a better reader. Please send the central message of e-mails as plain text in the message body, not as HTML and definitely not as MS Word. Please do not use the MS Word format for attachments either. For more information, see http://129.125.47.90/e-mail.html
signature.asc
Description: OpenPGP digital signature
_______________________________________________ L4-hurd mailing list [email protected] http://lists.gnu.org/mailman/listinfo/l4-hurd
