From 84a5e1ac0a7d9088827279041c26795765055409 Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Thu, 8 Dec 2022 11:18:30 +0100 Subject: [PATCH] NOVA: Added syscall to read and write MSRs. This enables core to use performance counters. --- repos/base-nova/include/nova/syscall-generic.h | 4 +++- .../base-nova/include/spec/64bit/nova/syscalls.h | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/repos/base-nova/include/nova/syscall-generic.h b/repos/base-nova/include/nova/syscall-generic.h index eed3d3f90d..ae27266a87 100644 --- a/repos/base-nova/include/nova/syscall-generic.h +++ b/repos/base-nova/include/nova/syscall-generic.h @@ -246,6 +246,8 @@ namespace Nova { EC_RESCHEDULE = 3U, EC_MIGRATE = 4U, EC_TIME = 5U, + EC_RDMSR = 6U, + EC_WRMSR = 7U, }; enum Sc_op { @@ -543,7 +545,7 @@ namespace Nova { public: - enum { DEFAULT_QUANTUM = 1500, DEFAULT_PRIORITY = 64 }; + enum { DEFAULT_QUANTUM = 10000, DEFAULT_PRIORITY = 64 }; Qpd(mword_t quantum = DEFAULT_QUANTUM, mword_t priority = DEFAULT_PRIORITY) diff --git a/repos/base-nova/include/spec/64bit/nova/syscalls.h b/repos/base-nova/include/spec/64bit/nova/syscalls.h index 9e8fa765fc..b32ea46f0e 100644 --- a/repos/base-nova/include/spec/64bit/nova/syscalls.h +++ b/repos/base-nova/include/spec/64bit/nova/syscalls.h @@ -253,6 +253,21 @@ namespace Nova { return util_time(NOVA_EC_CTRL, ec, Ec_op::EC_TIME, time); } + ALWAYS_INLINE + inline uint8_t ec_rdmsr(mword_t const ec, mword_t reg, mword_t ®_val) + { + uint8_t res = syscall_5(NOVA_EC_CTRL, EC_RDMSR, ec, reg_val, reg); + + return res; + } + + ALWAYS_INLINE + inline uint8_t ec_wrmsr(mword_t const ec, mword_t reg, mword_t ®_val) + { + uint8_t res = syscall_5(NOVA_EC_CTRL, EC_WRMSR, ec, reg_val, reg); + + return res; + } ALWAYS_INLINE inline uint8_t create_sc(mword_t sc, mword_t pd, mword_t ec, Qpd qpd)