aboutsummaryrefslogtreecommitdiff
path: root/include/sbi/riscv_asm.h
diff options
context:
space:
mode:
authorAnup Patel <anup.patel@wdc.com>2019-05-20 11:20:53 +0530
committerAnup Patel <anup@brainfault.org>2019-05-21 10:06:08 +0530
commit4e2cd478208531c47343290f15b577d40c82649c (patch)
treeb5bc85b2364b958166376debd03ab485264fbd70 /include/sbi/riscv_asm.h
parent392749f6338ac8a63ce5492770caa4fb75ad6b96 (diff)
lib: Flush everything when remote TLB flush range is too large
On latest Linux kernel (i.e. 5.2-rc1), we get large TLB flush request for user space addresses (typically, start=x and end=-1). This is caused by Linux kernel commit a21344dfc6 ("riscv: fix sbi_remote_sfence_vma{,_asid}"). It's not practical to execute large number of sfence instructions for a large TLB flush range because it takes too much time and eventually causes CPU stall in Linux kernel. This patch addresses above issue by upgrading TLB flush range to TLB flush all whenever TLB flush range is greater than 1GB. Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Atish Patra <atish.patra@wdc.com>
Diffstat (limited to 'include/sbi/riscv_asm.h')
-rw-r--r--include/sbi/riscv_asm.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/include/sbi/riscv_asm.h b/include/sbi/riscv_asm.h
index 357bcb4..704c53c 100644
--- a/include/sbi/riscv_asm.h
+++ b/include/sbi/riscv_asm.h
@@ -31,7 +31,9 @@
#define PAGE_SHIFT (12)
#define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE - 1))
-#define SBI_TLB_FLUSH_ALL ((unsigned long)-1)
+
+#define SBI_TLB_FLUSH_ALL ((unsigned long)-1)
+#define SBI_TLB_FLUSH_MAX_SIZE (1UL << 30)
#define REG_L __REG_SEL(ld, lw)
#define REG_S __REG_SEL(sd, sw)