syscache.c (623B)
1// SPDX-License-Identifier: GPL-2.0 2// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. 3 4#include <linux/syscalls.h> 5#include <asm/page.h> 6#include <asm/cacheflush.h> 7#include <asm/cachectl.h> 8 9SYSCALL_DEFINE3(cacheflush, 10 void __user *, addr, 11 unsigned long, bytes, 12 int, cache) 13{ 14 switch (cache) { 15 case BCACHE: 16 case DCACHE: 17 dcache_wb_range((unsigned long)addr, 18 (unsigned long)addr + bytes); 19 if (cache != BCACHE) 20 break; 21 fallthrough; 22 case ICACHE: 23 flush_icache_mm_range(current->mm, 24 (unsigned long)addr, 25 (unsigned long)addr + bytes); 26 break; 27 default: 28 return -EINVAL; 29 } 30 31 return 0; 32}