[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 3/4] accel: replace strerror() function to the thread safe qem
From: |
Yohei Kojima |
Subject: |
[PATCH v3 3/4] accel: replace strerror() function to the thread safe qemu_strerror() |
Date: |
Fri, 31 Mar 2023 02:13:21 +0900 |
strerror() is not guaranteed to be thread-safe as described in
(https://gitlab.com/qemu-project/qemu/-/issues/416).
This commit changes files under /accel that call strerror() to call
the safer qemu_strerror().
Signed-off-by: Yohei Kojima <y-koj@outlook.jp>
---
accel/kvm/kvm-all.c | 32 ++++++++++++++++++--------------
accel/tcg/cputlb.c | 3 ++-
accel/tcg/perf.c | 7 ++++---
3 files changed, 24 insertions(+), 18 deletions(-)
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index f2a6ea6a68..b3dc7743db 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -22,6 +22,7 @@
#include "qemu/atomic.h"
#include "qemu/option.h"
#include "qemu/config-file.h"
+#include "qemu/cutils.h"
#include "qemu/error-report.h"
#include "qapi/error.h"
#include "hw/pci/msi.h"
@@ -315,7 +316,7 @@ err:
error_report("%s: KVM_SET_USER_MEMORY_REGION failed, slot=%d,"
" start=0x%" PRIx64 ", size=0x%" PRIx64 ": %s",
__func__, mem.slot, slot->start_addr,
- (uint64_t)mem.memory_size, strerror(errno));
+ (uint64_t)mem.memory_size, qemu_strerror(errno));
}
return ret;
}
@@ -1366,7 +1367,7 @@ static void kvm_set_phys_mem(KVMMemoryListener *kml,
err = kvm_set_user_memory_region(kml, mem, false);
if (err) {
fprintf(stderr, "%s: error unregistering slot: %s\n",
- __func__, strerror(-err));
+ __func__, qemu_strerror(-err));
abort();
}
start_addr += slot_size;
@@ -1389,7 +1390,7 @@ static void kvm_set_phys_mem(KVMMemoryListener *kml,
err = kvm_set_user_memory_region(kml, mem, true);
if (err) {
fprintf(stderr, "%s: error registering slot: %s\n", __func__,
- strerror(-err));
+ qemu_strerror(-err));
abort();
}
start_addr += slot_size;
@@ -1613,7 +1614,7 @@ static void kvm_mem_ioeventfd_add(MemoryListener
*listener,
match_data);
if (r < 0) {
fprintf(stderr, "%s: error adding ioeventfd: %s (%d)\n",
- __func__, strerror(-r), -r);
+ __func__, qemu_strerror(-r), -r);
abort();
}
}
@@ -1649,7 +1650,7 @@ static void kvm_io_ioeventfd_add(MemoryListener *listener,
match_data);
if (r < 0) {
fprintf(stderr, "%s: error adding ioeventfd: %s (%d)\n",
- __func__, strerror(-r), -r);
+ __func__, qemu_strerror(-r), -r);
abort();
}
}
@@ -1668,7 +1669,7 @@ static void kvm_io_ioeventfd_del(MemoryListener *listener,
match_data);
if (r < 0) {
fprintf(stderr, "%s: error deleting ioeventfd: %s (%d)\n",
- __func__, strerror(-r), -r);
+ __func__, qemu_strerror(-r), -r);
abort();
}
}
@@ -2278,7 +2279,8 @@ static void 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));
+ fprintf(stderr, "Enable kernel irqchip failed: %s\n",
+ qemu_strerror(-ret));
exit(1);
}
} else {
@@ -2297,7 +2299,8 @@ static void kvm_irqchip_create(KVMState *s)
}
}
if (ret < 0) {
- fprintf(stderr, "Create kernel irqchip failed: %s\n", strerror(-ret));
+ fprintf(stderr, "Create kernel irqchip failed: %s\n",
+ qemu_strerror(-ret));
exit(1);
}
@@ -2446,7 +2449,7 @@ static int kvm_init(MachineState *ms)
if (ret < 0) {
fprintf(stderr, "ioctl(KVM_CREATE_VM) failed: %d %s\n", -ret,
- strerror(-ret));
+ qemu_strerror(-ret));
#ifdef TARGET_S390X
if (ret == -EINVAL) {
@@ -2532,7 +2535,8 @@ static int kvm_init(MachineState *ms)
ret = kvm_vm_enable_cap(s, KVM_CAP_DIRTY_LOG_RING, 0, ring_bytes);
if (ret) {
error_report("Enabling of KVM dirty ring failed: %s. "
- "Suggested minimum value is 1024.",
strerror(-ret));
+ "Suggested minimum value is 1024.",
+ qemu_strerror(-ret));
goto err;
}
@@ -2949,7 +2953,7 @@ int kvm_cpu_exec(CPUState *cpu)
break;
}
fprintf(stderr, "error: kvm run failed %s\n",
- strerror(-run_ret));
+ qemu_strerror(-run_ret));
#ifdef TARGET_PPC
if (run_ret == -EBUSY) {
fprintf(stderr,
@@ -3455,7 +3459,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));
+ fprintf(stderr, "kvm_set_signal_mask: %s\n", qemu_strerror(-r));
exit(1);
}
}
@@ -3538,7 +3542,7 @@ int kvm_set_one_reg(CPUState *cs, uint64_t id, void
*source)
reg.addr = (uintptr_t) source;
r = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, ®);
if (r) {
- trace_kvm_failed_reg_set(id, strerror(-r));
+ trace_kvm_failed_reg_set(id, qemu_strerror(-r));
}
return r;
}
@@ -3552,7 +3556,7 @@ int kvm_get_one_reg(CPUState *cs, uint64_t id, void
*target)
reg.addr = (uintptr_t) target;
r = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, ®);
if (r) {
- trace_kvm_failed_reg_get(id, strerror(-r));
+ trace_kvm_failed_reg_get(id, qemu_strerror(-r));
}
return r;
}
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
index e984a98dc4..6cf888cdf1 100644
--- a/accel/tcg/cputlb.c
+++ b/accel/tcg/cputlb.c
@@ -40,6 +40,7 @@
#include "qemu/plugin-memory.h"
#endif
#include "tcg/tcg-ldst.h"
+#include "qemu/cutils.h"
/* DEBUG defines, enable DEBUG_TLB_LOG to log to the CPU_LOG_MMU target */
/* #define DEBUG_TLB */
@@ -215,7 +216,7 @@ static void tlb_mmu_resize_locked(CPUTLBDesc *desc,
CPUTLBDescFast *fast,
*/
while (fast->table == NULL || desc->fulltlb == NULL) {
if (new_size == (1 << CPU_TLB_DYN_MIN_BITS)) {
- error_report("%s: %s", __func__, strerror(errno));
+ error_report("%s: %s", __func__, qemu_strerror(errno));
abort();
}
new_size = MAX(new_size >> 1, 1 << CPU_TLB_DYN_MIN_BITS);
diff --git a/accel/tcg/perf.c b/accel/tcg/perf.c
index 65e35ea3b9..0c7a3a8822 100644
--- a/accel/tcg/perf.c
+++ b/accel/tcg/perf.c
@@ -13,6 +13,7 @@
#include "exec/exec-all.h"
#include "qemu/timer.h"
#include "tcg/tcg.h"
+#include "qemu/cutils.h"
#include "debuginfo.h"
#include "perf.h"
@@ -54,7 +55,7 @@ void perf_enable_perfmap(void)
perfmap = safe_fopen_w(map_file);
if (perfmap == NULL) {
warn_report("Could not open %s: %s, proceeding without perfmap",
- map_file, strerror(errno));
+ map_file, qemu_strerror(errno));
}
}
@@ -201,7 +202,7 @@ void perf_enable_jitdump(void)
jitdump = safe_fopen_w(jitdump_file);
if (jitdump == NULL) {
warn_report("Could not open %s: %s, proceeding without jitdump",
- jitdump_file, strerror(errno));
+ jitdump_file, qemu_strerror(errno));
return;
}
@@ -214,7 +215,7 @@ void perf_enable_jitdump(void)
MAP_PRIVATE, fileno(jitdump), 0);
if (perf_marker == MAP_FAILED) {
warn_report("Could not map %s: %s, proceeding without jitdump",
- jitdump_file, strerror(errno));
+ jitdump_file, qemu_strerror(errno));
fclose(jitdump);
jitdump = NULL;
return;
--
2.39.2