[PATCH] pmem: export the symbols __copy_user_flushcache and __copy_from_user_flushcache

From: Mikulas Patocka
Date: Wed Sep 16 2020 - 13:41:49 EST




On Tue, 15 Sep 2020, Mikulas Patocka wrote:

>
>
> On Tue, 15 Sep 2020, Mikulas Patocka wrote:
>
> > > > - __copy_from_user_inatomic_nocache doesn't flush cache for leading and
> > > > trailing bytes.
> > >
> > > You want copy_user_flushcache(). See how fs/dax.c arranges for
> > > dax_copy_from_iter() to route to pmem_copy_from_iter().
> >
> > Is it something new for the kernel 5.10? I see only __copy_user_flushcache
> > that is implemented just for x86 and arm64.
> >
> > There is __copy_from_user_flushcache implemented for x86, arm64 and power.
> > It is used in lib/iov_iter.c under
> > #ifdef CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE - so should I use this?
> >
> > Mikulas
>
> ... and __copy_user_flushcache is not exported for modules. So, I am stuck
> with __copy_from_user_inatomic_nocache.
>
> Mikulas

I'm submitting this patch that adds the required exports (so that we could
use __copy_from_user_flushcache on x86, arm64 and powerpc). Please, queue
it for the next merge window.


From: Mikulas Patocka <mpatocka@xxxxxxxxxx>

Export the symbols __copy_user_flushcache and __copy_from_user_flushcache,
so that modules can use this functionality.

Signed-off-by: Mikulas Patocka <mpatocka@xxxxxxxxxx>

---
arch/arm64/lib/uaccess_flushcache.c | 1 +
arch/powerpc/lib/pmem.c | 1 +
arch/x86/lib/usercopy_64.c | 1 +
3 files changed, 3 insertions(+)

Index: linux-2.6/arch/arm64/lib/uaccess_flushcache.c
===================================================================
--- linux-2.6.orig/arch/arm64/lib/uaccess_flushcache.c 2020-09-16 12:44:15.068038000 +0200
+++ linux-2.6/arch/arm64/lib/uaccess_flushcache.c 2020-09-16 12:44:15.068038000 +0200
@@ -38,3 +38,4 @@ unsigned long __copy_user_flushcache(voi
__clean_dcache_area_pop(to, n - rc);
return rc;
}
+EXPORT_SYMBOL_GPL(__copy_user_flushcache);
Index: linux-2.6/arch/x86/lib/usercopy_64.c
===================================================================
--- linux-2.6.orig/arch/x86/lib/usercopy_64.c 2020-09-16 12:44:15.068038000 +0200
+++ linux-2.6/arch/x86/lib/usercopy_64.c 2020-09-16 12:44:15.068038000 +0200
@@ -134,6 +134,7 @@ long __copy_user_flushcache(void *dst, c

return rc;
}
+EXPORT_SYMBOL_GPL(__copy_user_flushcache);

void __memcpy_flushcache(void *_dst, const void *_src, size_t size)
{
Index: linux-2.6/arch/powerpc/lib/pmem.c
===================================================================
--- linux-2.6.orig/arch/powerpc/lib/pmem.c 2020-09-16 12:44:15.068038000 +0200
+++ linux-2.6/arch/powerpc/lib/pmem.c 2020-09-16 12:44:15.068038000 +0200
@@ -75,6 +75,7 @@ long __copy_from_user_flushcache(void *d

return copied;
}
+EXPORT_SYMBOL_GPL(__copy_from_user_flushcache);

void memcpy_flushcache(void *dest, const void *src, size_t size)
{