RE: Why get_user_pages fails?



Yes, I totally agree with you that the best solution is to bypass the Linux VM.
The reason to continue using get_user_pages() is that we can leverage the existing kernel driver - the SCST.

Do I have a way to map a range of phy memory to user virtual address and have the page structures built for that memory region?
I know remap_pfn_range() doesn't work.

Weimin

-----Original Message-----
From: Jonathan Corbet [mailto:corbet@xxxxxxx]
Sent: Monday, June 30, 2008 2:52 PM
To: Pan, Weimin
Cc: linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: Why get_user_pages fails?

On Mon, 30 Jun 2008 19:32:41 +0000
"Pan, Weimin" <weimin.pan@xxxxxx> wrote:

I booted the kernel and set "mem=512M" and then mmapped the physical
memory above 512M to user space and got the user space virtual address
for that memory. When I passed that address to my driver to do direct
IO. The get_user_pages() in my driver fails. I found that this is due
to the VM_IO and VM_PFNMAP are set. Does that mean the page structures
are not built when I mmapped physical memory to user space (using
remap_pfn_range())?

Do I have a way to solve this problem? How can I map the physical
memory to user space virtual address and can pass this address to my
driver to do direct IO by using get_user_pages() function?

In this situation, you already know where the memory sits in physical space, and there's no point in trying to pin it. So a call to
get_user_pages() is entirely unnecessary. You're bypassing the Linux VM, so bypass it entirely.

However, this whole scheme seems a little...baroque. Why are you doing things this way? As always in such cases, posting your code can enable others to help you find the right solution to your problem.

jon
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages

  • Re: PCI device driver question
    ... program to find the physical address of the pci device's memory. ... device read and write functions in the pci device driver. ... user space into kernel space (possibly to a small temporary holding ...
    (comp.os.linux.development.system)
  • Re: sleeping and waiting and tasklets
    ... care must be used when accessing user space from kernel code. ... being addressed might not be currently present in memory, ... The net result for the driver writer is that any ... they also check whether the user space pointer is valid. ...
    (comp.os.linux.development.system)
  • Device drivers, mmap/munmap and freeing memory
    ... I'm currently working on some wrappers and compatibility functions for allowing USB Linux device driver code to be compiled to create a FreeBSD driver module. ... Drivers appear to use an open/close pair of functions that are called when a processes starts or stops using mapped memory. ...
    (freebsd-hackers)
  • Device drivers, mmap/munmap and freeing memory
    ... allowing USB Linux device driver code to be compiled to create a FreeBSD ... reference count for the memory. ...
    (freebsd-current)
  • Sometimes "ls" works while "ls -v" fails; Sometimes "ls -v" works whi
    ... I am trying to port linux kernel 2.4.20 to a new powerpc Book E ... I used the 16550A UART driver ... Remove the init RAM disk from the available memory ...
    (comp.os.linux.development.system)