From: Clemens Koller <clemens.koller@anagramm.de>
To: LKML List <linux-kernel@vger.kernel.org>
Subject: How to get the physical page addresses from a kernel virtual address for DMA SG List?
Date: Thu, 04 Aug 2005 14:41:16 +0200 [thread overview]
Message-ID: <42F20CEC.60206@anagramm.de> (raw)
Hello!
This might be an FAQ - I've got several ideas from googling
around for days and reading 'Linux Device Drivers' or
'Understanding The Linux Kernel' which are both really good
books. However I am not really sure of how to do it on the latest
linux-2.6.
I am currently working on a dma driver for a ppc32 system.
The idea is that a userspace app allocates a big contigous
chunk of memory (i.e. 400MBytes, user virtual mem) and tells
my dma's char driver via ioctl the pointer to that memory.
In the driver I can now use that (void __user *) casted address
as a kernel virtual address, right? It's contigous there and I can
do a memcpy() to get data to userspace simliar to a copy_to_user().
fine!
But I want to setup a scatter/gather DMA list and blow my data
directly into the applications physical pages.
What's the best way to setup the dma_sg_list?
I have checked several things to get the pages and physical addresses
but with no real success now:
get_user_page()
vmalloc_to_page()
kvirt_to_bus() (deprecated?)
virt_to_phys()
virt_to_bus()
Or do I need to remap the whole thing before I can get all the pages and
physical addresses?
remap_page_range()
remap_pfn_range()
map_user_kiobuf()
unmap_kiobuf()
Or do I need the direct-io stuff or the block-io?
How do I need to alloc the mem in my app? (get_pages()?)
How do I need to lock the memory to make sure it's in phys memory? (mlockall()?)
Can somebody please put some light on what's _the_ way to do that on the
latest 2.6 kernels? I am pretty much confused which functions are current
and okay to use to solve my problem.
Pointers to some code is also very welcome. But it should be _current_.
I've spent already a lot of time reading outdated things. :-(
Best regards,
Clemens Koller
_______________________________
R&D Imaging Devices
Anagramm GmbH
Rupert-Mayer-Str. 45/1
81379 Muenchen
Germany
http://www.anagramm.de
Phone: +49-89-741518-50
Fax: +49-89-741518-19
next reply other threads:[~2005-08-04 12:45 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-08-04 12:41 Clemens Koller [this message]
2005-08-04 13:09 ` How to get the physical page addresses from a kernel virtual address for DMA SG List? linux-os (Dick Johnson)
2005-08-04 13:39 ` Clemens Koller
2005-08-04 13:57 ` Steven Rostedt
2005-08-04 14:56 ` How to get the physical page addresses from a kernel virtualaddress " linux-os (Dick Johnson)
2005-08-04 17:01 ` Steven Rostedt
2005-08-04 18:09 ` Clemens Koller
2005-08-05 0:11 ` How to get the physical page addresses from a kernel virtual address " Peter Chubb
2005-08-04 14:10 ` Arjan van de Ven
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=42F20CEC.60206@anagramm.de \
--to=clemens.koller@anagramm.de \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.