accel/kvm/kvm-all.c | 64 ++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 33 deletions(-)
Main benefit: ability to print timestamps.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
accel/kvm/kvm-all.c | 64 ++++++++++++++++++++++-----------------------
1 file changed, 31 insertions(+), 33 deletions(-)
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 83cbd120a84..d271699db87 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -300,7 +300,7 @@ static KVMSlot *kvm_alloc_slot(KVMMemoryListener *kml)
return slot;
}
- fprintf(stderr, "%s: no free slot available\n", __func__);
+ error_report("%s: no free slot available", __func__);
abort();
}
@@ -1702,8 +1702,8 @@ static void kvm_set_phys_mem(KVMMemoryListener *kml,
mem->flags = 0;
err = kvm_set_user_memory_region(kml, mem, false);
if (err) {
- fprintf(stderr, "%s: error unregistering slot: %s\n",
- __func__, strerror(-err));
+ error_report("%s: error unregistering slot: %s",
+ __func__, strerror(-err));
abort();
}
start_addr += slot_size;
@@ -1730,8 +1730,8 @@ static void kvm_set_phys_mem(KVMMemoryListener *kml,
kvm_slot_init_dirty_bitmap(mem);
err = kvm_set_user_memory_region(kml, mem, true);
if (err) {
- fprintf(stderr, "%s: error registering slot: %s\n", __func__,
- strerror(-err));
+ error_report("%s: error registering slot: %s", __func__,
+ strerror(-err));
abort();
}
@@ -2024,8 +2024,8 @@ static void kvm_mem_ioeventfd_add(MemoryListener *listener,
data, true, int128_get64(section->size),
match_data);
if (r < 0) {
- fprintf(stderr, "%s: error adding ioeventfd: %s (%d)\n",
- __func__, strerror(-r), -r);
+ error_report("%s: error adding ioeventfd(%d): %s (%d)",
+ __func__, fd, strerror(-r), -r);
abort();
}
}
@@ -2042,8 +2042,8 @@ static void kvm_mem_ioeventfd_del(MemoryListener *listener,
data, false, int128_get64(section->size),
match_data);
if (r < 0) {
- fprintf(stderr, "%s: error deleting ioeventfd: %s (%d)\n",
- __func__, strerror(-r), -r);
+ error_report("%s: error deleting ioeventfd(%d): %s (%d)",
+ __func__, fd, strerror(-r), -r);
abort();
}
}
@@ -2060,8 +2060,8 @@ static void kvm_io_ioeventfd_add(MemoryListener *listener,
data, true, int128_get64(section->size),
match_data);
if (r < 0) {
- fprintf(stderr, "%s: error adding ioeventfd: %s (%d)\n",
- __func__, strerror(-r), -r);
+ error_report("%s: error adding ioeventfd(%d): %s (%d)",
+ __func__, fd, strerror(-r), -r);
abort();
}
}
@@ -2079,8 +2079,8 @@ static void kvm_io_ioeventfd_del(MemoryListener *listener,
data, false, int128_get64(section->size),
match_data);
if (r < 0) {
- fprintf(stderr, "%s: error deleting ioeventfd: %s (%d)\n",
- __func__, strerror(-r), -r);
+ error_report("%s: error deleting ioeventfd(%d): %s (%d)",
+ __func__, fd, strerror(-r), -r);
abort();
}
}
@@ -2143,7 +2143,7 @@ int kvm_set_irq(KVMState *s, int irq, int level)
event.irq = irq;
ret = kvm_vm_ioctl(s, s->irq_set_ioctl, &event);
if (ret < 0) {
- perror("kvm_set_irq");
+ error_report("kvm_set_irq: %s", strerror(-ret));
abort();
}
@@ -2581,7 +2581,7 @@ static int do_kvm_irqchip_create(KVMState *s)
} else if (kvm_check_extension(s, KVM_CAP_S390_IRQCHIP)) {
ret = kvm_vm_enable_cap(s, KVM_CAP_S390_IRQCHIP, 0);
if (ret < 0) {
- fprintf(stderr, "Enable kernel irqchip failed: %s\n", strerror(-ret));
+ error_report("Enable kernel irqchip failed: %s", strerror(-ret));
exit(1);
}
} else {
@@ -2589,7 +2589,7 @@ static int do_kvm_irqchip_create(KVMState *s)
}
if (kvm_check_extension(s, KVM_CAP_IRQFD) <= 0) {
- fprintf(stderr, "kvm: irqfd not implemented\n");
+ error_report("kvm: irqfd not implemented");
exit(1);
}
@@ -2605,7 +2605,7 @@ static int do_kvm_irqchip_create(KVMState *s)
}
}
if (ret < 0) {
- fprintf(stderr, "Create kernel irqchip failed: %s\n", strerror(-ret));
+ error_report("Create kernel irqchip failed: %s", strerror(-ret));
exit(1);
}
@@ -3136,15 +3136,14 @@ static int kvm_handle_internal_error(CPUState *cpu, struct kvm_run *run)
{
int i;
- fprintf(stderr, "KVM internal error. Suberror: %d\n",
- run->internal.suberror);
+ error_report("KVM internal error. Suberror: %d", run->internal.suberror);
for (i = 0; i < run->internal.ndata; ++i) {
- fprintf(stderr, "extra data[%d]: 0x%016"PRIx64"\n",
- i, (uint64_t)run->internal.data[i]);
+ error_printf("extra data[%d]: 0x%016"PRIx64"\n",
+ i, (uint64_t)run->internal.data[i]);
}
if (run->internal.suberror == KVM_INTERNAL_ERROR_EMULATION) {
- fprintf(stderr, "emulation failure\n");
+ error_printf("emulation failure\n");
if (!kvm_arch_stop_on_emulation_error(cpu)) {
cpu_dump_state(cpu, stderr, CPU_DUMP_CODE);
return EXCP_INTERRUPT;
@@ -3315,13 +3314,13 @@ static void kvm_eat_signals(CPUState *cpu)
do {
r = sigtimedwait(&waitset, &siginfo, &ts);
if (r == -1 && !(errno == EAGAIN || errno == EINTR)) {
- perror("sigtimedwait");
+ error_report("sigtimedwait: %s", strerror(errno));
exit(1);
}
r = sigpending(&chkset);
if (r == -1) {
- perror("sigpending");
+ error_report("sigpending: %s", strerror(errno));
exit(1);
}
} while (sigismember(&chkset, SIG_IPI));
@@ -3490,14 +3489,13 @@ int kvm_cpu_exec(CPUState *cpu)
break;
}
if (!(run_ret == -EFAULT && run->exit_reason == KVM_EXIT_MEMORY_FAULT)) {
- fprintf(stderr, "error: kvm run failed %s\n",
- strerror(-run_ret));
+ error_report("kvm run failed: %s", strerror(-run_ret));
#ifdef TARGET_PPC
if (run_ret == -EBUSY) {
- fprintf(stderr,
- "This is probably because your SMT is enabled.\n"
- "VCPU can only run on primary threads with all "
- "secondary threads offline.\n");
+ error_printf("This is probably because your SMT is "
+ "enabled.\n"
+ "VCPU can only run on primary threads with all "
+ "secondary threads offline.\n");
}
#endif
ret = -1;
@@ -3533,8 +3531,8 @@ int kvm_cpu_exec(CPUState *cpu)
ret = EXCP_INTERRUPT;
break;
case KVM_EXIT_UNKNOWN:
- fprintf(stderr, "KVM: unknown exit, hardware reason %" PRIx64 "\n",
- (uint64_t)run->hw.hardware_exit_reason);
+ error_report("KVM: unknown exit, hardware reason %" PRIx64,
+ (uint64_t)run->hw.hardware_exit_reason);
ret = -1;
break;
case KVM_EXIT_INTERNAL_ERROR:
@@ -3978,7 +3976,7 @@ void kvm_init_cpu_signals(CPUState *cpu)
r = kvm_set_signal_mask(cpu, &set);
}
if (r) {
- fprintf(stderr, "kvm_set_signal_mask: %s\n", strerror(-r));
+ error_report("kvm_set_signal_mask: %s", strerror(-r));
exit(1);
}
}
--
2.43.0
Quick drive-by comments...
Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes:
> Main benefit: ability to print timestamps.
Possible additional benefits:
* Ability to print guest name
* Print program name
* "This is an error" is obvious even at a glance
Benefits not applicable here (I believe):
* Print location if we have one
* Automatic redirection to the human monitor when appropriate
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
> ---
> accel/kvm/kvm-all.c | 64 ++++++++++++++++++++++-----------------------
> 1 file changed, 31 insertions(+), 33 deletions(-)
>
> diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
> index 83cbd120a84..d271699db87 100644
> --- a/accel/kvm/kvm-all.c
> +++ b/accel/kvm/kvm-all.c
> @@ -300,7 +300,7 @@ static KVMSlot *kvm_alloc_slot(KVMMemoryListener *kml)
KVMSlot *slot = kvm_get_free_slot(kml);
if (slot) {
> return slot;
> }
>
> - fprintf(stderr, "%s: no free slot available\n", __func__);
> + error_report("%s: no free slot available", __func__);
> abort();
> }
>
Bah, too much ceremony for me. I'd do
KVMSlot *slot = kvm_get_free_slot(kml);
assert(slot);
return slot;
The "print something to help developers fix the programming error;
abort()" pattern leads to having __func__ in error messages, which is
normally an anti-pattern, because error messages are for users.
But all that is outside the scope of your patch, and the maintainers may
have other ideas anyway.
[...]
© 2016 - 2026 Red Hat, Inc.