|author||John David Anglin <firstname.lastname@example.org>||2016-09-20 12:59:39 -0400|
|committer||Helge Deller <email@example.com>||2016-09-20 20:00:12 +0200|
|parent||parisc: Use kmalloc_array() in add_system_map_addresses() (diff)|
parisc: Update comment regarding implementation of copy_user_page_asm
The attached patch describes the current implementation of copy_user_page_asm(). It is possible to implement this routine using either the kernel page mappings or equivalent aliases. I tested both and decided the former was more efficient. Signed-off-by: John David Anglin <firstname.lastname@example.org> Signed-off-by: Helge Deller <email@example.com>
Diffstat (limited to 'arch/parisc/kernel/pacache.S')
1 files changed, 11 insertions, 5 deletions
diff --git a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S
index b743a80eaba0..1250c02201bb 100644
@@ -573,11 +573,17 @@ ENDPROC(copy_page_asm)
- * We can't do this since copy_user_page is used to bring in
- * file data that might have instructions. Since the data would
- * then need to be flushed out so the i-fetch can see it, it
- * makes more sense to just copy through the kernel translation
- * and flush it.
+ * copy_user_page_asm() performs a page copy using mappings
+ * equivalent to the user page mappings. It can be used to
+ * implement copy_user_page() but unfortunately both the `from'
+ * and `to' pages need to be flushed through mappings equivalent
+ * to the user mappings after the copy because the kernel accesses
+ * the `from' page through the kmap kernel mapping and the `to'
+ * page needs to be flushed since code can be copied. As a
+ * result, this implementation is less efficient than the simpler
+ * copy using the kernel mapping. It only needs the `from' page
+ * to flushed via the user mapping. The kunmap routines handle
+ * the flushes needed for the kernel mapping.
* I'm still keeping this around because it may be possible to
* use it if more information is passed into copy_user_page().