diff options
author | John David Anglin <dave.anglin@bell.net> | 2016-09-20 18:59:39 +0200 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2016-09-20 20:00:12 +0200 |
commit | 910a86435dd75d7c04d9fbd49aa92e1842d6e88d (patch) | |
tree | 3eb21f6c3e9bc48f1642a7bd39a06440fe95da8d /arch/parisc | |
parent | parisc: Use kmalloc_array() in add_system_map_addresses() (diff) | |
download | linux-910a86435dd75d7c04d9fbd49aa92e1842d6e88d.tar.xz linux-910a86435dd75d7c04d9fbd49aa92e1842d6e88d.zip |
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 <dave.anglin@bell.net>
Signed-off-by: Helge Deller <deller@gmx.de>
Diffstat (limited to 'arch/parisc')
-rw-r--r-- | arch/parisc/kernel/pacache.S | 16 |
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 --- a/arch/parisc/kernel/pacache.S +++ b/arch/parisc/kernel/pacache.S @@ -573,11 +573,17 @@ ENDPROC(copy_page_asm) .endm /* - * 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(). |