From: "Amit D. Chaudhary" <amit_c@comcast.net>
To: linux-kernel@vger.kernel.org
Subject: MAX_DMA_ADDRESS in include/asm/asm-i386/dma.h (2.6.x and 2.4.x)
Date: Fri, 16 Jul 2004 14:37:11 -0700 [thread overview]
Message-ID: <40F84A87.5050403@comcast.net> (raw)
While writing some DMA page gathering code, I realize that
__get_free_page or kmalloc does not return memory more than 16 MB
(typically around 11-12 MB even if it done right after a reboot.)
Since this is for a PCI device (A Fibre channel HBA), I remembered that
the book Linux Device Driver, edition 2 mentions that the 16 MB limit is
for DMA with ISA devices, while PCI DMA can access upto 950 MB or so,
using 32 bit addresses.
Digging further into the code, I found that this being a Intel PC (a P4
2.8 GHz with 1GB RAM) with High Mem for 4 GB enabled kernel, the define
in linux/include/asm/asm-i386/dma.h for MAX_DMA_ADDRESS is probably what
is limiting this. The #define is the same in 2.6.8-rc1 as well as 2.4.x
(2.4.20 and 2.4.25 is what I checked.)
/* The maximum address that we can perform a DMA transfer to on this
platform */
#define MAX_DMA_ADDRESS (PAGE_OFFSET+0x1000000)
From what I can understand so far, this implies 0xC000 0000 +
+0x1000000 = A total of 16 MB
I changed this to 256 MB which was less than the limit in the book and
enough for the test code purpose
#define MAX_DMA_ADDRESS (PAGE_OFFSET+0x10000000)
After running some FC traffic and delibrately not free'ing memory, the
memory above 16 MB was DMA'abled and the data was read and written
correctly.
So, the question is, can someone DMA and x86 architecture expert comment
on this? Am I missing something?
And if the above code is ok, is there a way to have the above change in
the main kernel so that it works with ISA and PCI devices?
Thanks
Amit
next reply other threads:[~2004-07-16 21:40 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-16 21:37 Amit D. Chaudhary [this message]
2004-07-16 21:47 ` MAX_DMA_ADDRESS in include/asm/asm-i386/dma.h (2.6.x and 2.4.x) Deepak Saxena
2004-07-16 22:11 ` Amit D. Chaudhary
2004-07-16 22:28 ` Deepak Saxena
2004-07-16 23:36 ` Amit D. Chaudhary
2004-08-05 19:00 ` Amit D. Chaudhary
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=40F84A87.5050403@comcast.net \
--to=amit_c@comcast.net \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox