From: Paul Mackerras <paulus@samba.org>
To: Jes Sorensen <jes@sunsite.dk>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>,
Linux Bigot <linuxopinion@yahoo.com>,
linux-kernel@vger.kernel.org
Subject: Re: how to get virtual address from dma address
Date: Sat, 6 Oct 2001 18:06:23 +1000 (EST) [thread overview]
Message-ID: <15294.47999.501719.858693@cargo.ozlabs.ibm.com> (raw)
In-Reply-To: <d3n136tc48.fsf@lxplus014.cern.ch>
In-Reply-To: <200110032244.f93MiI103485@localhost.localdomain> <d3n136tc48.fsf@lxplus014.cern.ch>
Jes Sorensen writes:
> Because as DaveM pointed out, some hardware can't do it, and as I said
> earlier, it's a lot cheaper and easier for driver writers to just
> store the extra pointer in their data structures than it is to
> implement a database to maintain it.
For some devices yes, for others storing the extra pointer doesn't
help all that much. Devices which can complete requests out of order
and which tell you the DMA addresses of the requests they have
completed would be in the second class, and that includes the OHCI USB
controller, and some intelligent SCSI controllers I believe.
So you end up having to map the DMA address back to the pointer to the
data structure for the request. At the moment the drivers that need
this each have their own implementation, using a hash table or
whatever.
The argument for supplying this functionality in the PCI DMA code
would be that if it was done there it could be done once, and in a
sophisticated and efficient (and SMP-safe :) fashion, rather than
ad-hoc in each driver.
It may also be possible for the PCI DMA code to take advantage of its
knowledge of a particular platform, for example if the platform only
has a small range of possible DMA addresses then it could use a simple
and fast lookup table. Or it may be possible to read the IOMMU tables
on some platforms and do the reverse mapping quickly that way - this
would certainly be the case for the IBM RS/6000 machines since the
IOMMU tables are in system RAM.
> Remember you often need this address in the hot path (say TX interrupt
> handler) so you don't want to introduce any unnecessary function calls.
The drivers that need this would already be doing internal function
calls to do the reverse mapping anyway. Of course we would not want
this functionality to add extra overhead at the point where we set up
the mapping (at least in the cases where we won't need the reverse
mapping).
There is a question though as to whether a reverse mapping from DMA
address to virtual address is sufficient for these drivers, or whether
they would need a mapping from DMA address to something else such as a
pointer to a request structure. The usb-ohci driver looks like it
would be sufficient to get back to the virtual address.
Regards,
Paul.
next prev parent reply other threads:[~2001-10-06 8:10 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <mailman.1002355920.6872.linux-kernel2news@redhat.com>
2001-10-03 22:44 ` James Bottomley
2001-10-04 0:24 ` David S. Miller
2001-10-04 10:11 ` BALBIR SINGH
2001-10-04 11:16 ` David S. Miller
2001-10-04 15:37 ` James Bottomley
2001-10-05 14:06 ` Jes Sorensen
2001-10-06 8:38 ` David S. Miller
2001-10-06 18:19 ` Pete Zaitcev
2001-10-06 18:04 ` Pete Zaitcev
2001-10-06 8:06 ` Paul Mackerras [this message]
2001-10-06 12:18 ` Paul Mackerras
2001-10-06 14:45 ` James Bottomley
2001-10-06 16:51 ` Gérard Roudier
2001-10-06 17:23 ` Jes Sorensen
2001-10-07 7:21 ` Gérard Roudier
2001-10-07 16:23 ` James Bottomley
2001-10-07 18:24 ` Gérard Roudier
2001-10-07 23:02 ` James Bottomley
2001-10-08 21:06 ` Gérard Roudier
2001-10-07 2:13 ` Paul Mackerras
2001-10-07 17:40 ` Jes Sorensen
[not found] <Pine.LNX.4.21.0110031525370.14852-100000@pogo.esscom.com>
2001-10-03 21:48 ` Linux Bigot
2001-10-03 22:03 ` Ben Collins
2001-10-05 14:04 ` Jes Sorensen
2001-10-03 21:30 Manfred Spraul
-- strict thread matches above, loose matches on Subject: below --
2001-10-03 16:37 Linux Bigot
2001-10-03 19:32 ` Ben Collins
2001-10-03 21:11 ` Linux Bigot
2001-10-03 21:23 ` Ben Collins
2001-10-03 14:11 Linux Bigot
2001-10-03 15:25 ` Jes Sorensen
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=15294.47999.501719.858693@cargo.ozlabs.ibm.com \
--to=paulus@samba.org \
--cc=James.Bottomley@HansenPartnership.com \
--cc=jes@sunsite.dk \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxopinion@yahoo.com \
/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
all inboxes | Powered by JetHome®