[openib-general] get_user_pages() and shared memory question

Timur Tabi timur.tabi at ammasso.com
Tue Jun 21 08:51:14 PDT 2005


Hi,

I have a question about the OpenIB driver's use of get_user_pages() and mlock().  Last 
time I looked at the code, it was calling mlock() in user space and then calling 
get_user_pages() in the driver to pin the pages.  I was hoping to get some feedback from 
other developers familiar with this code.

I've come across an application that allocates shared memory and then registers it.  No 
problem there.  But upon exit, it appears the application is deallocating the shared 
memory region and then deregistering it.  This causes munlock() to fail.  This led me to 
another question:

Is it possible for a page of memory that's been "grabbed" with get_user_pages() to ever be
allocated to another process?  I'm assuming the answer is no, but I have a specific case I
want to ask about.

Let's say an application allocates some shared memory, and then calls into a driver which
calls get_user_pages().  The driver exits without releasing the pages, so they now have a
reference count on them.  Then the application deallocates the shared memory.  At this
point, the virtual addresses disappear, and no process owns them, but the pages still have
a reference count.

Another process now tries to allocate a shared memory buffer.  Is there any way that this
new buffer can contain those pages that were grabbed with get_user_pages() (i.e. that
already have a reference count)?

Until 2.6.7, there was a bug in the VM where a page that was grabbed with get_user_pages()
could be swapped out.  Would that bug affect anything I'm talking about?

-- 
Timur Tabi
Staff Software Engineer
timur.tabi at ammasso.com

One thing a Southern boy will never say is,
"I don't think duct tape will fix it."
      -- Ed Smylie, NASA engineer for Apollo 13




More information about the general mailing list