Page MenuHomeFreeBSD

D57623.diff
No OneTemporary

D57623.diff

diff --git a/sys/conf/kern.mk b/sys/conf/kern.mk
--- a/sys/conf/kern.mk
+++ b/sys/conf/kern.mk
@@ -166,7 +166,7 @@
# code model as "medium" and "medany" respectively.
#
.if ${MACHINE_CPUARCH} == "riscv"
-CFLAGS+= -march=rv64imafdch_zifencei
+CFLAGS+= -march=rv64imafdch_zifencei_svinval
CFLAGS+= -mabi=lp64
CFLAGS.clang+= -mcmodel=medium
CFLAGS.gcc+= -mcmodel=medany
diff --git a/sys/riscv/include/cpufunc.h b/sys/riscv/include/cpufunc.h
--- a/sys/riscv/include/cpufunc.h
+++ b/sys/riscv/include/cpufunc.h
@@ -126,6 +126,34 @@
__asm __volatile("hfence.gvma" ::: "memory");
}
+static __inline void
+sfence_inval_ir(void)
+{
+
+ __asm __volatile("sfence.inval.ir" ::: "memory");
+}
+
+static __inline void
+sfence_w_inval(void)
+{
+
+ __asm __volatile("sfence.w.inval" ::: "memory");
+}
+
+static __inline void
+sinval_vma_page(uintptr_t addr)
+{
+
+ __asm __volatile("sinval.vma %0, zero" :: "r" (addr) : "memory");
+}
+
+static __inline void
+sinval_vma_asid_page(uint64_t asid, uintptr_t addr)
+{
+
+ __asm __volatile("sinval.vma %0, %1" :: "r" (addr), "r" (asid) : "memory");
+}
+
#define rdcycle() csr_read64(cycle)
#define rdtime() csr_read64(time)
#define rdinstret() csr_read64(instret)
diff --git a/sys/riscv/include/md_var.h b/sys/riscv/include/md_var.h
--- a/sys/riscv/include/md_var.h
+++ b/sys/riscv/include/md_var.h
@@ -46,6 +46,7 @@
extern bool has_sstc;
extern bool has_sscofpmf;
extern bool has_svpbmt;
+extern bool has_svinval;
struct dumperinfo;
struct minidumpstate;
diff --git a/sys/riscv/riscv/identcpu.c b/sys/riscv/riscv/identcpu.c
--- a/sys/riscv/riscv/identcpu.c
+++ b/sys/riscv/riscv/identcpu.c
@@ -78,6 +78,7 @@
bool __read_frequently has_sstc;
bool __read_frequently has_sscofpmf;
bool has_svpbmt;
+bool has_svinval;
/* Z-extensions support. */
bool has_zicbom;
@@ -472,6 +473,7 @@
UPDATE_CAP(has_sstc, (desc->smode_extensions & SV_SSTC) != 0);
UPDATE_CAP(has_sscofpmf, (desc->smode_extensions & SV_SSCOFPMF) != 0);
UPDATE_CAP(has_svpbmt, (desc->smode_extensions & SV_SVPBMT) != 0);
+ UPDATE_CAP(has_svinval, (desc->smode_extensions & SV_SVINVAL) != 0);
/* Z extension support. */
UPDATE_CAP(has_zicbom, (desc->z_extensions & Z_ZICBOM) != 0);

File Metadata

Mime Type
text/plain
Expires
Wed, Jun 24, 9:47 PM (6 m, 18 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34287495
Default Alt Text
D57623.diff (2 KB)

Event Timeline