Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm64/lib/uaccess_flushcache.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Copyright (C) 2017 ARM Ltd.
4
*/
5
6
#include <linux/uaccess.h>
7
#include <asm/barrier.h>
8
#include <asm/cacheflush.h>
9
10
void memcpy_flushcache(void *dst, const void *src, size_t cnt)
11
{
12
/*
13
* We assume this should not be called with @dst pointing to
14
* non-cacheable memory, such that we don't need an explicit
15
* barrier to order the cache maintenance against the memcpy.
16
*/
17
memcpy(dst, src, cnt);
18
dcache_clean_pop((unsigned long)dst, (unsigned long)dst + cnt);
19
}
20
EXPORT_SYMBOL_GPL(memcpy_flushcache);
21
22
unsigned long __copy_user_flushcache(void *to, const void __user *from,
23
unsigned long n)
24
{
25
unsigned long rc;
26
27
rc = raw_copy_from_user(to, from, n);
28
29
/* See above */
30
dcache_clean_pop((unsigned long)to, (unsigned long)to + n - rc);
31
return rc;
32
}
33
34