public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* 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