NOVA: Added syscall to read and write MSRs. This enables core to use performance counters.

This commit is contained in:
Michael Mueller
2022-12-08 11:18:30 +01:00
parent e0a9f13197
commit 84a5e1ac0a
2 changed files with 18 additions and 1 deletions

View File

@@ -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)

View File

@@ -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 &reg_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 &reg_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)