* Problem with remap_page_range/mmap
@ 2004-03-25 23:48 Christian Leber
2004-03-26 7:17 ` Christoph Hellwig
0 siblings, 1 reply; 5+ messages in thread
From: Christian Leber @ 2004-03-25 23:48 UTC (permalink / raw)
To: linux-kernel
Hello,
I have a problem with mmaping memory to userspace.
It´s very simple:
addr = __get_free_pages(GFP_KERNEL,0);
int atoll_fops_mmap(struct file *filp, struct vm_area_struct *vma)
{
vma->vm_flags |= VM_SHM | VM_LOCKED | VM_IO;
if(remap_page_range_A(vma,
vma->vm_start, addr, 4096,
vma->vm_page_prot)) {
printk("remapping send space failed\n");
return -ENXIO;
}
*(unsigned long *)addr = 0x23;
printk("mmap finished, first bytes: %lx\n",*(unsigned long *)addr);
return 0;
}
int atoll_fops_release(struct inode *inode,struct file *filp)
{
printk("release, first bytes: %lx\n",*(unsigned long *)addr);
return 0;
}
complete code is here:
http://debian.christian-leber.de/mmap_problem/atollinit.txt
or as tar
http://debian.christian-leber.de/mmap_problem.tar.bz2
The stupid little testprogramm:
ptr=mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_SHARED,fdopen,0);
if(ptr==-1) printf("ERROR\n");
*(ptr) = 0x42;
printf("%lx\n",*(ptr));
This works as expected with 2.6.3 on IA64
Testprogramm gives out "42"
and in the kernel log:
mmap finished, first bytes: 23
release, first bytes: 42
Now it gets odd:
On a Dual PIII; another one; dual xeon; another one; and a P3 laptop
The testprogramm gives out "ffffffff"
In the kernel log:
mmap finished, first bytes: 23
release, first bytes: 23
So never anything is written to memory.
(it also doesn´t depend on the kernel, i tried several
versions/configurations)
On a Duron (also tried with exact the same kernel from one of the
systems above), the Testprogramm gives correct output, but the kernel
log says:
mmap finished, first bytes: 23
release, first bytes: 23
So also nothing is actually written to the memory.
Is that a bug (can´t imagine) or do I do a really stupid error?
Christian Leber
--
"Omnis enim res, quae dando non deficit, dum habetur et non datur,
nondum habetur, quomodo habenda est." (Aurelius Augustinus)
Translation: <http://gnuhh.org/work/fsf-europe/augustinus.html>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Problem with remap_page_range/mmap
2004-03-25 23:48 Problem with remap_page_range/mmap Christian Leber
@ 2004-03-26 7:17 ` Christoph Hellwig
2004-03-26 9:36 ` Christian Leber
0 siblings, 1 reply; 5+ messages in thread
From: Christoph Hellwig @ 2004-03-26 7:17 UTC (permalink / raw)
To: Christian Leber; +Cc: linux-kernel
On Fri, Mar 26, 2004 at 12:48:04AM +0100, Christian Leber wrote:
> addr = __get_free_pages(GFP_KERNEL,0);
> int atoll_fops_mmap(struct file *filp, struct vm_area_struct *vma)
> {
> vma->vm_flags |= VM_SHM | VM_LOCKED | VM_IO;
>
> if(remap_page_range_A(vma,
> vma->vm_start, addr, 4096,
> vma->vm_page_prot)) {
> printk("remapping send space failed\n");
> return -ENXIO;
> }
You can't call remap_page_range on normal kernel pages. It works only
if you mark them PG_reserved, but even that use is usually not a good idea.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Problem with remap_page_range/mmap
2004-03-26 7:17 ` Christoph Hellwig
@ 2004-03-26 9:36 ` Christian Leber
2004-03-26 9:46 ` Christoph Hellwig
0 siblings, 1 reply; 5+ messages in thread
From: Christian Leber @ 2004-03-26 9:36 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: linux-kernel
On Fri, Mar 26, 2004 at 07:17:39AM +0000, Christoph Hellwig wrote:
> You can't call remap_page_range on normal kernel pages. It works only
> if you mark them PG_reserved, but even that use is usually not a good idea.
It also didn´t work with PG_reserved.
What would be the good idea? I need at least 8 at least 4MB (2MB are enough for 2.4)
big physical memory pieces for DMA, mapped to userspace.
What is the reason why it doesn´t work? There seems to be no special
remap_page_range for ia64.
Christian Leber
--
"Omnis enim res, quae dando non deficit, dum habetur et non datur,
nondum habetur, quomodo habenda est." (Aurelius Augustinus)
Translation: <http://gnuhh.org/work/fsf-europe/augustinus.html>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Problem with remap_page_range/mmap
2004-03-26 9:36 ` Christian Leber
@ 2004-03-26 9:46 ` Christoph Hellwig
2004-03-26 9:58 ` Hugang
0 siblings, 1 reply; 5+ messages in thread
From: Christoph Hellwig @ 2004-03-26 9:46 UTC (permalink / raw)
To: Christian Leber; +Cc: linux-kernel
On Fri, Mar 26, 2004 at 10:36:19AM +0100, Christian Leber wrote:
> It also didn´t work with PG_reserved.
> What would be the good idea? I need at least 8 at least 4MB (2MB are enough for 2.4)
> big physical memory pieces for DMA, mapped to userspace.
>
> What is the reason why it doesn´t work? There seems to be no special
> remap_page_range for ia64.
Put the page structs into an array and return them from ->nopage. The
kernel pagefault code will set up the ptes for you.
Now actually getting 4MB of continguous memory is a different issue..
I'm surprised you actually managed to get the allocation to succeed.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Problem with remap_page_range/mmap
2004-03-26 9:46 ` Christoph Hellwig
@ 2004-03-26 9:58 ` Hugang
0 siblings, 0 replies; 5+ messages in thread
From: Hugang @ 2004-03-26 9:58 UTC (permalink / raw)
To: Christoph Hellwig, linux-kernel
On Fri, 26 Mar 2004 09:46:56 +0000
Christoph Hellwig <hch@infradead.org> wrote:
> On Fri, Mar 26, 2004 at 10:36:19AM +0100, Christian Leber wrote:
> > What would be the good idea? I need at least 8 at least 4MB (2MB are
> > enough for 2.4) big physical memory pieces for DMA, mapped to
> > userspace.
> >
> > remap_page_range for ia64.
>
> Put the page structs into an array and return them from ->nopage. The
> kernel pagefault code will set up the ptes for you.
>
> Now actually getting 4MB of continguous memory is a different issue..
>
> I'm surprised you actually managed to get the allocation to succeed.
There is more detailed information about make page usable to user space,
http://www.xml.com/ldd/chapter/book/ch13.html
Hope that's useful.
--
Hu Gang / Steve
Linux Registered User 204016
GPG Public Key: http://soulinfo.com/~hugang/hugang.asc
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2004-03-26 10:00 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-03-25 23:48 Problem with remap_page_range/mmap Christian Leber
2004-03-26 7:17 ` Christoph Hellwig
2004-03-26 9:36 ` Christian Leber
2004-03-26 9:46 ` Christoph Hellwig
2004-03-26 9:58 ` Hugang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox