From: Tom Brown <sa212+emis@cyconix.com>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Stefan Richter <stefanr@s5r6.in-berlin.de>,
Yong Zhang <yong.zhang@windriver.com>,
Arnd Bergmann <arnd@arndb.de>
Subject: Re: Question: how to copy to user space from a tasklet
Date: Mon, 18 Oct 2010 16:45:36 +0100 [thread overview]
Message-ID: <4CBC6BA0.60507@cyconix.com> (raw)
In-Reply-To: <4CB7ED67.2000407@s5r6.in-berlin.de>
On 15/10/2010 06:57, Stefan Richter wrote:
> One way would be to use mmap() to allocate the DMA buffer and insert it into
> the user address space before DMA commences. An additional poll/read/write
> based protocol or so can be used for buffer management during DMA.
Thanks, think I'm there:
1 - The user calls mmap() with a specific offset to flag that he wants a
DMA buffer
2 - I then 'vmalloc' the buffer, and call 'setPageReserved' for each page
I then step over each page, and:
3 - call 'vmalloc_to_pfn' to get a PFN for each page, and then
4 - call 'remap_page_range' for that page (I instead call
'remap_pfn_range' for kernels >= 2.6.10, but I'm on 2.6.9)
This gives me the buffer, and the interrupt handler then just uses
'memcpy' to copy data to the user.
I've got to say, this was incredibly hard work. I can't find any useful
documentation and it can take a couple of hours on Google to write a few
lines of code. LDD is next to useless. There's no 'vmalloc_to_pfn' on
2.6.9, so I copied an old deprecated one from 2.6.10 (which was also in
a kernel prior to 2.6.9, I think). I'm not yet convinced that all this
is working; I think I've seen one instance when the 'memcpy' to the
buffer didn't work, so I think there might potentially be a problem with
setting the reserved bit (and isn't the reserved bit deprecated in
2.6.15??)
On the other stuff, thanks Yong for the 'probe_kernel_' suggestion, but
I can't find any documentation on it.
linux-newbie only had one thread on it for the entire month when I
checked a couple of days ago, apart from a couple of 419 scams.
Thanks -
Tom
next prev parent reply other threads:[~2010-10-18 15:45 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-14 10:43 Question: how to copy to user space from a tasklet Tom Brown
2010-10-15 2:15 ` Yong Zhang
2010-10-15 5:57 ` Stefan Richter
2010-10-15 8:59 ` Arnd Bergmann
2010-10-18 15:45 ` Tom Brown [this message]
2010-10-18 17:01 ` Stefan Richter
2010-10-18 18:02 ` Tom Brown
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=4CBC6BA0.60507@cyconix.com \
--to=sa212+emis@cyconix.com \
--cc=arnd@arndb.de \
--cc=linux-kernel@vger.kernel.org \
--cc=stefanr@s5r6.in-berlin.de \
--cc=yong.zhang@windriver.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