Thread (10 messages) 10 messages, 3 authors, 2019-08-18

[Linux-kernel-mentees] [PATCH v5 1/1] sgi-gru: Remove *pte_lookup functions, Convert to get_user_page*()

From: Bharath Vedartham <hidden>
Date: 2019-08-14 18:00:44
Also in: linux-mm, lkml

On Wed, Aug 14, 2019 at 02:38:30PM -0300, Jason Gunthorpe wrote:
On Wed, Aug 14, 2019 at 11:00:34PM +0530, Bharath Vedartham wrote:
quoted
On Tue, Aug 13, 2019 at 01:19:38PM -0500, Dimitri Sivanich wrote:
quoted
On Tue, Aug 13, 2019 at 10:53:01PM +0530, Bharath Vedartham wrote:
quoted
On Tue, Aug 13, 2019 at 09:50:29AM -0500, Dimitri Sivanich wrote:
quoted
Bharath,

I do not believe that __get_user_pages_fast will work for the atomic case, as
there is no guarantee that the 'current->mm' will be the correct one for the
process in question, as the process might have moved away from the cpu that is
handling interrupts for it's context.
So what your saying is, there may be cases where current->mm != gts->ts_mm
right? __get_user_pages_fast and get_user_pages do assume current->mm.
Correct, in the case of atomic context.
quoted
These changes were inspired a bit from kvm. In kvm/kvm_main.c,
hva_to_pfn_fast uses __get_user_pages_fast. THe comment above the
function states it runs in atomic context.

Just curious, get_user_pages also uses current->mm. Do you think that is
also an issue? 
Not in non-atomic context.  Notice that it is currently done that way.
quoted
Do you feel using get_user_pages_remote would be a better idea? We can
specify the mm_struct in get_user_pages_remote?
From that standpoint maybe, but is it safe in interrupt context?
Hmm.. The gup maintainers seemed fine with the code..

Now this is only an issue if gru_vtop can be executed in an interrupt
context. 

get_user_pages_remote is not valid in an interrupt context(if CONFIG_MMU
is set). If we follow the function, in __get_user_pages, cond_resched()
is called which definitly confirms that we can't run this function in an
interrupt context. 

I think we might need some advice from the gup maintainers here.
Note that the comment on the function __get_user_pages_fast states that
__get_user_pages_fast is IRQ-safe.
vhost is doing some approach where they switch current to the target
then call __get_user_pages_fast in an IRQ context, that might be a
reasonable pattern

If this is a regular occurance we should probably add a
get_atomic_user_pages_remote() to make the pattern clear.

Jason
That makes sense. get_atomic_user_pages_remote() should not be hard to
write. AFAIKS __get_user_pages_fast is special_cased for current, we
could probably just add a new parameter of the mm_struct to the page
table walking code in gup.c

But till then I think we can approach this by the way vhost approaches
this problem by switching current to the target. 

Thank you
Bharath
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help