Messages in this thread | | | From | Eric Lowe <> | Subject | RE: Address spaces on a i386 - Getting Confused | Date | Thu, 1 Apr 1999 09:11:55 -0500 |
| |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2448.0"> <TITLE>RE: Address spaces on a i386 - Getting Confused</TITLE> </HEAD> <BODY>
<P><FONT SIZE=2>> </FONT> <BR><FONT SIZE=2>> > As a future problem, some user-space pages will not be reachable by</FONT> <BR><FONT SIZE=2>> > DMA anyway, because they are outside the bus address range of the</FONT> <BR><FONT SIZE=2>> > device doing DMA. (cf. 32-bit PCI cards on >4GB memory machines, or</FONT> <BR><FONT SIZE=2>> > complexities of multi-bus machines).</FONT> <BR><FONT SIZE=2>> </FONT> <BR><FONT SIZE=2>> Indeed, and this is one of the problems I'll have to deal with for the</FONT> <BR><FONT SIZE=2>> large memory support. IO bounce buffers will be necessary, but that</FONT> <BR><FONT SIZE=2>> will be entirely transparent above the block device request layer.</FONT> <BR><FONT SIZE=2>> </FONT> </P>
<P><FONT SIZE=2>How about a dmamalloc() function? Such a beast exists under systems like VxWorks. It guarantees not only that all memory allocated will be hardware addressable, but that it will be page aligned (so no offsets need to be computed when doing scatter/gather lists). The buffers could be allocated internally with it, and devices that are going to do streaming I/O could just allocate their memory using this call instead of malloc().</FONT></P>
<P><FONT SIZE=2>--</FONT> <BR><FONT SIZE=2>Eric Lowe</FONT> <BR><FONT SIZE=2>elowe@systran.com</FONT> <BR><FONT SIZE=2>Software Engineer Co-op, Systran Corporation</FONT> <BR><FONT SIZE=2>937-252-5601 x330</FONT> <BR><FONT SIZE=2>((sorry for the HTML, my e-mail gateway is adding it, I can't disable it..))</FONT> </P>
</BODY> </HTML> | |