linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: locking user space memory in kernel
@ 2004-04-08  0:45 Libor Michalek
  2004-04-08  5:22 ` Manfred Spraul
  0 siblings, 1 reply; 13+ messages in thread
From: Libor Michalek @ 2004-04-08  0:45 UTC (permalink / raw)
  To: Manfred Spraul; +Cc: Roland Dreier, Eli Cohen, linux-kernel

----- Forwarded message from Manfred Spraul <manfred@colorfullife.com> -----
>
> Date:	Sun, 21 Mar 2004 12:31:59 +0100
> From: Manfred Spraul <manfred@colorfullife.com>
> To: Eli Cohen <mlxk@mellanox.co.il>
> Cc: linux-kernel@vger.kernel.org
> Subject: Re: locking user space memory in kernel
>
> Hi Eli,
>
> I think just get_user_pages() should be sufficient: the pages won't be 
> swapped out. You don't need to set VM_LOCKED in vma->vm_flags to prevent 
> the swap out. In the worst case, the pte is cleared a that will cause a 
> soft page fault, but the physical address won't change. Multiple 
> get_user_pages() calls on overlapping regions are ok, the page count is 
> an atomic_t, at least 24-bit large.

  The soft page fault is a problem if the device is going to write data 
into the buffer and then notify the user that the buffer now contains 
valid data. If the soft page fault occurs before the device has written
to the page list, once the user is notified of the write and reads the 
buffer, it will no longer be the same pages as the ones to which the 
device wrote. Is setting VM_LOCKED the only way to prevent the soft
page fault and this issue?


-Libor







^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: locking user space memory in kernel
@ 2004-04-08  6:20 Ross Dickson
  0 siblings, 0 replies; 13+ messages in thread
From: Ross Dickson @ 2004-04-08  6:20 UTC (permalink / raw)
  To: libor; +Cc: linux-kernel, manfred

Libor Michalek wrote: 
 
>----- Forwarded message from Manfred Spraul <manfred@colorfullife.com> ----- 
 > 
 > 
 >>Date: Sun, 21 Mar 2004 12:31:59 +0100 
 >>From: Manfred Spraul <manfred@colorfullife.com> 
 >>To: Eli Cohen <mlxk@mellanox.co.il> 
 >>Cc: linux-kernel@vger.kernel.org 
 >>Subject: Re: locking user space memory in kernel 
 >> 
 >>Hi Eli, 
 >> 
 >>I think just get_user_pages() should be sufficient: the pages won't be 
 >>swapped out. You don't need to set VM_LOCKED in vma->vm_flags to prevent 
 >>the swap out. In the worst case, the pte is cleared a that will cause a 
 >>soft page fault, but the physical address won't change. Multiple 
 >>get_user_pages() calls on overlapping regions are ok, the page count is 
 >>an atomic_t, at least 24-bit large. 
 >> 
 >> 
 > 
 > The soft page fault is a problem if the device is going to write data 
 >into the buffer and then notify the user that the buffer now contains 
 >valid data. If the soft page fault occurs before the device has written 
 >to the page list, once the user is notified of the write and reads the 
 >buffer, it will no longer be the same pages as the ones to which the 
 >device wrote. 
 > 

I know of an open source driver for image acquisition cards iti-fg that does
"PAGEWISE transfer of image frames directly into user space". The
release notes mention the memory locking.

It is available here
http://oss.gom.com/

Regards
Ross.


^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: locking user space memory in kernel
@ 2004-03-21 11:31 Manfred Spraul
  2004-03-21 14:12 ` Manfred Spraul
  2004-03-21 16:40 ` Roland Dreier
  0 siblings, 2 replies; 13+ messages in thread
From: Manfred Spraul @ 2004-03-21 11:31 UTC (permalink / raw)
  To: Eli Cohen; +Cc: linux-kernel

Hi Eli,

I think just get_user_pages() should be sufficient: the pages won't be 
swapped out. You don't need to set VM_LOCKED in vma->vm_flags to prevent 
the swap out. In the worst case, the pte is cleared a that will cause a 
soft page fault, but the physical address won't change. Multiple 
get_user_pages() calls on overlapping regions are ok, the page count is 
an atomic_t, at least 24-bit large.

--
    Manfred


^ permalink raw reply	[flat|nested] 13+ messages in thread
* locking user space memory in kernel
@ 2004-03-21 11:18 Eli Cohen
  2004-03-21 11:35 ` Arjan van de Ven
  0 siblings, 1 reply; 13+ messages in thread
From: Eli Cohen @ 2004-03-21 11:18 UTC (permalink / raw)
  To: linux-kernel

Hi,
I need to be able to lock memory allocated in user space and passed to 
my driver, in order to pass it to a dma controller that can maintain a 
translation table for each process. The obvious thing is to use 
sys_mlock() (and sys_munlock() for unlocking) but this function is not 
exported anymore, nore is sys_call_table.  I considered marking the 
relevant vma->vm_flags with VM_LOCKED and calling get_user_pages but 
that could be overkill if I want to lock just a portion of the VMA. 
Currently I do some hacking to find the addresses of sys_mlock/sys_munlock.
I also need to maintain a reference count on the locking /unlocking such 
that a region that has been locked twice will really be unlocked after 
unlocking twice. This needs to support partly overlapping regions. To 
cope with this I have implemented some code on top of calls to 
sys_mlock/sys_munlock to provide this functionality.
Are there more standard ways to get this functionality from the kernel? 
Any help is appreciated.

Thanks
Eli

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2004-04-08  6:17 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-04-08  0:45 locking user space memory in kernel Libor Michalek
2004-04-08  5:22 ` Manfred Spraul
  -- strict thread matches above, loose matches on Subject: below --
2004-04-08  6:20 Ross Dickson
2004-03-21 11:31 Manfred Spraul
2004-03-21 14:12 ` Manfred Spraul
2004-03-21 16:40 ` Roland Dreier
2004-03-21 17:15   ` Manfred Spraul
2004-03-21 18:18     ` Roland Dreier
2004-03-22 13:15       ` Eli Cohen
2004-03-22 15:22       ` Eli Cohen
2004-03-22 19:34         ` Manfred Spraul
2004-03-21 11:18 Eli Cohen
2004-03-21 11:35 ` Arjan van de Ven

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).