[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