mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-04 17:44:14 +08:00
fade9c2c6e
Although naming across the codebase isn't that consistent, it tends to follow certain patterns. Moreover, the term "flush" isn't defined in the Arm Architecture reference manual, and might be interpreted to mean clean, invalidate, or both for a cache. Rename arm64-internal functions to make the naming internally consistent, as well as making it consistent with the Arm ARM, by specifying whether it applies to the instruction, data, or both caches, whether the operation is a clean, invalidate, or both. Also specify which point the operation applies to, i.e., to the point of unification (PoU), coherency (PoC), or persistence (PoP). This commit applies the following sed transformation to all files under arch/arm64: "s/\b__flush_cache_range\b/caches_clean_inval_pou_macro/g;"\ "s/\b__flush_icache_range\b/caches_clean_inval_pou/g;"\ "s/\binvalidate_icache_range\b/icache_inval_pou/g;"\ "s/\b__flush_dcache_area\b/dcache_clean_inval_poc/g;"\ "s/\b__inval_dcache_area\b/dcache_inval_poc/g;"\ "s/__clean_dcache_area_poc\b/dcache_clean_poc/g;"\ "s/\b__clean_dcache_area_pop\b/dcache_clean_pop/g;"\ "s/\b__clean_dcache_area_pou\b/dcache_clean_pou/g;"\ "s/\b__flush_cache_user_range\b/caches_clean_inval_user_pou/g;"\ "s/\b__flush_icache_all\b/icache_inval_all_pou/g;" Note that __clean_dcache_area_poc is deliberately missing a word boundary check at the beginning in order to match the efistub symbols in image-vars.h. Also note that, despite its name, __flush_icache_range operates on both instruction and data caches. The name change here reflects that. No functional change intended. Acked-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Fuad Tabba <tabba@google.com> Reviewed-by: Ard Biesheuvel <ardb@kernel.org> Link: https://lore.kernel.org/r/20210524083001.2586635-19-tabba@google.com Signed-off-by: Will Deacon <will@kernel.org>
39 lines
963 B
C
39 lines
963 B
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Copyright (C) 2017 ARM Ltd.
|
|
*/
|
|
|
|
#include <linux/uaccess.h>
|
|
#include <asm/barrier.h>
|
|
#include <asm/cacheflush.h>
|
|
|
|
void memcpy_flushcache(void *dst, const void *src, size_t cnt)
|
|
{
|
|
/*
|
|
* We assume this should not be called with @dst pointing to
|
|
* non-cacheable memory, such that we don't need an explicit
|
|
* barrier to order the cache maintenance against the memcpy.
|
|
*/
|
|
memcpy(dst, src, cnt);
|
|
dcache_clean_pop((unsigned long)dst, (unsigned long)dst + cnt);
|
|
}
|
|
EXPORT_SYMBOL_GPL(memcpy_flushcache);
|
|
|
|
void memcpy_page_flushcache(char *to, struct page *page, size_t offset,
|
|
size_t len)
|
|
{
|
|
memcpy_flushcache(to, page_address(page) + offset, len);
|
|
}
|
|
|
|
unsigned long __copy_user_flushcache(void *to, const void __user *from,
|
|
unsigned long n)
|
|
{
|
|
unsigned long rc;
|
|
|
|
rc = raw_copy_from_user(to, from, n);
|
|
|
|
/* See above */
|
|
dcache_clean_pop((unsigned long)to, (unsigned long)to + n - rc);
|
|
return rc;
|
|
}
|