Skip to content

Commit fb81c9c

Browse files
trueptolemybonzini
authored andcommitted
target/i386/kvm: Clean up return values of MSR filter related functions
Before commit 0cc42e6 ("kvm/i386: refactor kvm_arch_init and split it into smaller functions"), error_report() attempts to print the error code from kvm_filter_msr(). However, printing error code does not work due to kvm_filter_msr() returns bool instead int. 0cc42e6 fixed the error by removing error code printing, but this lost useful error messages. Bring it back by making kvm_filter_msr() return int. This also makes the function call chain processing clearer, allowing for better handling of error result propagation from kvm_filter_msr() to kvm_arch_init(), preparing for the subsequent cleanup work of error handling in kvm_arch_init(). Signed-off-by: Zhao Liu <[email protected]> Reviewed-by: Zide Chen <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Paolo Bonzini <[email protected]>
1 parent 26824f9 commit fb81c9c

File tree

1 file changed

+44
-43
lines changed

1 file changed

+44
-43
lines changed

target/i386/kvm/kvm.c

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ typedef struct {
108108
} KVMMSRHandlers;
109109

110110
static void kvm_init_msrs(X86CPU *cpu);
111-
static bool kvm_filter_msr(KVMState *s, uint32_t msr, QEMURDMSRHandler *rdmsr,
112-
QEMUWRMSRHandler *wrmsr);
111+
static int kvm_filter_msr(KVMState *s, uint32_t msr, QEMURDMSRHandler *rdmsr,
112+
QEMUWRMSRHandler *wrmsr);
113113

114114
const KVMCapabilityInfo kvm_arch_required_capabilities[] = {
115115
KVM_CAP_INFO(SET_TSS_ADDR),
@@ -3150,17 +3150,21 @@ static int kvm_vm_enable_notify_vmexit(KVMState *s)
31503150

31513151
static int kvm_vm_enable_userspace_msr(KVMState *s)
31523152
{
3153-
int ret = kvm_vm_enable_cap(s, KVM_CAP_X86_USER_SPACE_MSR, 0,
3154-
KVM_MSR_EXIT_REASON_FILTER);
3153+
int ret;
3154+
3155+
ret = kvm_vm_enable_cap(s, KVM_CAP_X86_USER_SPACE_MSR, 0,
3156+
KVM_MSR_EXIT_REASON_FILTER);
31553157
if (ret < 0) {
31563158
error_report("Could not enable user space MSRs: %s",
31573159
strerror(-ret));
31583160
exit(1);
31593161
}
31603162

3161-
if (!kvm_filter_msr(s, MSR_CORE_THREAD_COUNT,
3162-
kvm_rdmsr_core_thread_count, NULL)) {
3163-
error_report("Could not install MSR_CORE_THREAD_COUNT handler!");
3163+
ret = kvm_filter_msr(s, MSR_CORE_THREAD_COUNT,
3164+
kvm_rdmsr_core_thread_count, NULL);
3165+
if (ret < 0) {
3166+
error_report("Could not install MSR_CORE_THREAD_COUNT handler: %s",
3167+
strerror(-ret));
31643168
exit(1);
31653169
}
31663170

@@ -3169,36 +3173,37 @@ static int kvm_vm_enable_userspace_msr(KVMState *s)
31693173

31703174
static void kvm_vm_enable_energy_msrs(KVMState *s)
31713175
{
3172-
bool r;
3176+
int ret;
3177+
31733178
if (s->msr_energy.enable == true) {
3174-
r = kvm_filter_msr(s, MSR_RAPL_POWER_UNIT,
3175-
kvm_rdmsr_rapl_power_unit, NULL);
3176-
if (!r) {
3177-
error_report("Could not install MSR_RAPL_POWER_UNIT \
3178-
handler");
3179+
ret = kvm_filter_msr(s, MSR_RAPL_POWER_UNIT,
3180+
kvm_rdmsr_rapl_power_unit, NULL);
3181+
if (ret < 0) {
3182+
error_report("Could not install MSR_RAPL_POWER_UNIT handler: %s",
3183+
strerror(-ret));
31793184
exit(1);
31803185
}
31813186

3182-
r = kvm_filter_msr(s, MSR_PKG_POWER_LIMIT,
3183-
kvm_rdmsr_pkg_power_limit, NULL);
3184-
if (!r) {
3185-
error_report("Could not install MSR_PKG_POWER_LIMIT \
3186-
handler");
3187+
ret = kvm_filter_msr(s, MSR_PKG_POWER_LIMIT,
3188+
kvm_rdmsr_pkg_power_limit, NULL);
3189+
if (ret < 0) {
3190+
error_report("Could not install MSR_PKG_POWER_LIMIT handler: %s",
3191+
strerror(-ret));
31873192
exit(1);
31883193
}
31893194

3190-
r = kvm_filter_msr(s, MSR_PKG_POWER_INFO,
3191-
kvm_rdmsr_pkg_power_info, NULL);
3192-
if (!r) {
3193-
error_report("Could not install MSR_PKG_POWER_INFO \
3194-
handler");
3195+
ret = kvm_filter_msr(s, MSR_PKG_POWER_INFO,
3196+
kvm_rdmsr_pkg_power_info, NULL);
3197+
if (ret < 0) {
3198+
error_report("Could not install MSR_PKG_POWER_INFO handler: %s",
3199+
strerror(-ret));
31953200
exit(1);
31963201
}
3197-
r = kvm_filter_msr(s, MSR_PKG_ENERGY_STATUS,
3198-
kvm_rdmsr_pkg_energy_status, NULL);
3199-
if (!r) {
3200-
error_report("Could not install MSR_PKG_ENERGY_STATUS \
3201-
handler");
3202+
ret = kvm_filter_msr(s, MSR_PKG_ENERGY_STATUS,
3203+
kvm_rdmsr_pkg_energy_status, NULL);
3204+
if (ret < 0) {
3205+
error_report("Could not install MSR_PKG_ENERGY_STATUS handler: %s",
3206+
strerror(-ret));
32023207
exit(1);
32033208
}
32043209
}
@@ -5841,13 +5846,13 @@ void kvm_arch_update_guest_debug(CPUState *cpu, struct kvm_guest_debug *dbg)
58415846
}
58425847
}
58435848

5844-
static bool kvm_install_msr_filters(KVMState *s)
5849+
static int kvm_install_msr_filters(KVMState *s)
58455850
{
58465851
uint64_t zero = 0;
58475852
struct kvm_msr_filter filter = {
58485853
.flags = KVM_MSR_FILTER_DEFAULT_ALLOW,
58495854
};
5850-
int r, i, j = 0;
5855+
int i, j = 0;
58515856

58525857
for (i = 0; i < KVM_MSR_FILTER_MAX_RANGES; i++) {
58535858
KVMMSRHandlers *handler = &msr_handlers[i];
@@ -5871,18 +5876,13 @@ static bool kvm_install_msr_filters(KVMState *s)
58715876
}
58725877
}
58735878

5874-
r = kvm_vm_ioctl(s, KVM_X86_SET_MSR_FILTER, &filter);
5875-
if (r) {
5876-
return false;
5877-
}
5878-
5879-
return true;
5879+
return kvm_vm_ioctl(s, KVM_X86_SET_MSR_FILTER, &filter);
58805880
}
58815881

5882-
static bool kvm_filter_msr(KVMState *s, uint32_t msr, QEMURDMSRHandler *rdmsr,
5883-
QEMUWRMSRHandler *wrmsr)
5882+
static int kvm_filter_msr(KVMState *s, uint32_t msr, QEMURDMSRHandler *rdmsr,
5883+
QEMUWRMSRHandler *wrmsr)
58845884
{
5885-
int i;
5885+
int i, ret;
58865886

58875887
for (i = 0; i < ARRAY_SIZE(msr_handlers); i++) {
58885888
if (!msr_handlers[i].msr) {
@@ -5892,16 +5892,17 @@ static bool kvm_filter_msr(KVMState *s, uint32_t msr, QEMURDMSRHandler *rdmsr,
58925892
.wrmsr = wrmsr,
58935893
};
58945894

5895-
if (!kvm_install_msr_filters(s)) {
5895+
ret = kvm_install_msr_filters(s);
5896+
if (ret) {
58965897
msr_handlers[i] = (KVMMSRHandlers) { };
5897-
return false;
5898+
return ret;
58985899
}
58995900

5900-
return true;
5901+
return 0;
59015902
}
59025903
}
59035904

5904-
return false;
5905+
return -EINVAL;
59055906
}
59065907

59075908
static int kvm_handle_rdmsr(X86CPU *cpu, struct kvm_run *run)

0 commit comments

Comments
 (0)