Skip to content

Commit

Permalink
target/arm/kvm: Use a switch for kvm_arm_cpreg_level
Browse files Browse the repository at this point in the history
Use a switch instead of a linear search through data.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
rth7680 authored and pm215 committed Dec 19, 2023
1 parent dc40d45 commit d213f5a
Showing 1 changed file with 9 additions and 23 deletions.
32 changes: 9 additions & 23 deletions target/arm/kvm64.c
Original file line number Diff line number Diff line change
Expand Up @@ -361,32 +361,18 @@ bool kvm_arm_reg_syncs_via_cpreg_list(uint64_t regidx)
}
}

typedef struct CPRegStateLevel {
uint64_t regidx;
int level;
} CPRegStateLevel;

/* All system registers not listed in the following table are assumed to be
* of the level KVM_PUT_RUNTIME_STATE. If a register should be written less
* often, you must add it to this table with a state of either
* KVM_PUT_RESET_STATE or KVM_PUT_FULL_STATE.
*/
static const CPRegStateLevel non_runtime_cpregs[] = {
{ KVM_REG_ARM_TIMER_CNT, KVM_PUT_FULL_STATE },
{ KVM_REG_ARM_PTIMER_CNT, KVM_PUT_FULL_STATE },
};

int kvm_arm_cpreg_level(uint64_t regidx)
{
int i;

for (i = 0; i < ARRAY_SIZE(non_runtime_cpregs); i++) {
const CPRegStateLevel *l = &non_runtime_cpregs[i];
if (l->regidx == regidx) {
return l->level;
}
/*
* All system registers are assumed to be level KVM_PUT_RUNTIME_STATE.
* If a register should be written less often, you must add it here
* with a state of either KVM_PUT_RESET_STATE or KVM_PUT_FULL_STATE.
*/
switch (regidx) {
case KVM_REG_ARM_TIMER_CNT:
case KVM_REG_ARM_PTIMER_CNT:
return KVM_PUT_FULL_STATE;
}

return KVM_PUT_RUNTIME_STATE;
}

Expand Down

0 comments on commit d213f5a

Please sign in to comment.