* [PULL 01/32] target/riscv: Remove unused 'instmap.h' header in translate.c
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 02/32] target/riscv: Restrict 'rv128' machine to TCG accelerator Philippe Mathieu-Daudé
` (31 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Philippe Mathieu-Daudé, Daniel Henrique Barboza,
Alistair Francis
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Acked-by: Alistair Francis <alistair.francis@wdc.com>
Message-Id: <20230626232007.8933-2-philmd@linaro.org>
---
target/riscv/translate.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/target/riscv/translate.c b/target/riscv/translate.c
index 2c27fd4ce1..32a453f686 100644
--- a/target/riscv/translate.c
+++ b/target/riscv/translate.c
@@ -28,7 +28,6 @@
#include "exec/log.h"
#include "semihosting/semihost.h"
-#include "instmap.h"
#include "internals.h"
#define HELPER_H "helper.h"
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 02/32] target/riscv: Restrict 'rv128' machine to TCG accelerator
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 01/32] target/riscv: Remove unused 'instmap.h' header in translate.c Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 03/32] target/riscv: Restrict riscv_cpu_do_interrupt() to sysemu Philippe Mathieu-Daudé
` (30 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Philippe Mathieu-Daudé, Daniel Henrique Barboza,
Alistair Francis
We only build for 32/64-bit hosts, so TCG is required for
128-bit targets.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Acked-by: Alistair Francis <alistair.francis@wdc.com>
Message-Id: <20230626232007.8933-5-philmd@linaro.org>
---
target/riscv/cpu.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
index eb1a2e7d6d..0dad66ec96 100644
--- a/target/riscv/cpu.c
+++ b/target/riscv/cpu.c
@@ -591,6 +591,7 @@ static void rv64_veyron_v1_cpu_init(Object *obj)
#endif
}
+#ifdef CONFIG_TCG
static void rv128_base_cpu_init(Object *obj)
{
RISCVCPU *cpu = RISCV_CPU(obj);
@@ -612,6 +613,7 @@ static void rv128_base_cpu_init(Object *obj)
set_satp_mode_max_supported(RISCV_CPU(obj), VM_1_10_SV57);
#endif
}
+#endif /* CONFIG_TCG */
static void rv64i_bare_cpu_init(Object *obj)
{
@@ -624,7 +626,9 @@ static void rv64e_bare_cpu_init(Object *obj)
CPURISCVState *env = &RISCV_CPU(obj)->env;
riscv_cpu_set_misa_ext(env, RVE);
}
-#else
+
+#else /* !TARGET_RISCV64 */
+
static void rv32_base_cpu_init(Object *obj)
{
RISCVCPU *cpu = RISCV_CPU(obj);
@@ -2550,12 +2554,14 @@ static const TypeInfo riscv_cpu_type_infos[] = {
DEFINE_VENDOR_CPU(TYPE_RISCV_CPU_SHAKTI_C, MXL_RV64, rv64_sifive_u_cpu_init),
DEFINE_VENDOR_CPU(TYPE_RISCV_CPU_THEAD_C906, MXL_RV64, rv64_thead_c906_cpu_init),
DEFINE_VENDOR_CPU(TYPE_RISCV_CPU_VEYRON_V1, MXL_RV64, rv64_veyron_v1_cpu_init),
+#ifdef CONFIG_TCG
DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_BASE128, MXL_RV128, rv128_base_cpu_init),
+#endif /* CONFIG_TCG */
DEFINE_BARE_CPU(TYPE_RISCV_CPU_RV64I, MXL_RV64, rv64i_bare_cpu_init),
DEFINE_BARE_CPU(TYPE_RISCV_CPU_RV64E, MXL_RV64, rv64e_bare_cpu_init),
DEFINE_PROFILE_CPU(TYPE_RISCV_CPU_RVA22U64, MXL_RV64, rva22u64_profile_cpu_init),
DEFINE_PROFILE_CPU(TYPE_RISCV_CPU_RVA22S64, MXL_RV64, rva22s64_profile_cpu_init),
-#endif
+#endif /* TARGET_RISCV64 */
};
DEFINE_TYPES(riscv_cpu_type_infos)
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 03/32] target/riscv: Restrict riscv_cpu_do_interrupt() to sysemu
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 01/32] target/riscv: Remove unused 'instmap.h' header in translate.c Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 02/32] target/riscv: Restrict 'rv128' machine to TCG accelerator Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 04/32] target/mips: Remove unused 'hw/misc/mips_itu.h' header Philippe Mathieu-Daudé
` (29 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Philippe Mathieu-Daudé, Daniel Henrique Barboza,
Alistair Francis
riscv_cpu_do_interrupt() is not reachable on user emulation.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-Id: <20230626232007.8933-7-philmd@linaro.org>
---
target/riscv/cpu.h | 5 +++--
target/riscv/cpu_helper.c | 7 ++-----
2 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
index 2d0c02c35b..648e640f22 100644
--- a/target/riscv/cpu.h
+++ b/target/riscv/cpu.h
@@ -484,7 +484,6 @@ extern const char * const riscv_int_regnamesh[];
extern const char * const riscv_fpr_regnames[];
const char *riscv_cpu_get_trap_name(target_ulong cause, bool async);
-void riscv_cpu_do_interrupt(CPUState *cpu);
int riscv_cpu_write_elf64_note(WriteCoreDumpFunction f, CPUState *cs,
int cpuid, DumpState *s);
int riscv_cpu_write_elf32_note(WriteCoreDumpFunction f, CPUState *cs,
@@ -514,6 +513,7 @@ int riscv_cpu_max_xlen(RISCVCPUClass *mcc);
bool riscv_cpu_option_set(const char *optname);
#ifndef CONFIG_USER_ONLY
+void riscv_cpu_do_interrupt(CPUState *cpu);
void riscv_isa_write_fdt(RISCVCPU *cpu, void *fdt, char *nodename);
void riscv_cpu_do_transaction_failed(CPUState *cs, hwaddr physaddr,
vaddr addr, unsigned size,
@@ -539,7 +539,8 @@ void riscv_cpu_set_aia_ireg_rmw_fn(CPURISCVState *env, uint32_t priv,
void *rmw_fn_arg);
RISCVException smstateen_acc_ok(CPURISCVState *env, int index, uint64_t bit);
-#endif
+#endif /* !CONFIG_USER_ONLY */
+
void riscv_cpu_set_mode(CPURISCVState *env, target_ulong newpriv);
void riscv_translate_init(void);
diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
index 8ad546a45a..0868357f1c 100644
--- a/target/riscv/cpu_helper.c
+++ b/target/riscv/cpu_helper.c
@@ -1635,7 +1635,6 @@ static target_ulong riscv_transformed_insn(CPURISCVState *env,
return xinsn;
}
-#endif /* !CONFIG_USER_ONLY */
/*
* Handle Traps
@@ -1645,8 +1644,6 @@ static target_ulong riscv_transformed_insn(CPURISCVState *env,
*/
void riscv_cpu_do_interrupt(CPUState *cs)
{
-#if !defined(CONFIG_USER_ONLY)
-
RISCVCPU *cpu = RISCV_CPU(cs);
CPURISCVState *env = &cpu->env;
bool write_gva = false;
@@ -1842,6 +1839,6 @@ void riscv_cpu_do_interrupt(CPUState *cs)
env->two_stage_lookup = false;
env->two_stage_indirect_lookup = false;
-#endif
- cs->exception_index = RISCV_EXCP_NONE; /* mark handled to qemu */
}
+
+#endif /* !CONFIG_USER_ONLY */
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 04/32] target/mips: Remove unused 'hw/misc/mips_itu.h' header
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2024-06-04 9:55 ` [PULL 03/32] target/riscv: Restrict riscv_cpu_do_interrupt() to sysemu Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 05/32] target/arm: Replace sprintf() by snprintf() Philippe Mathieu-Daudé
` (28 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel; +Cc: Philippe Mathieu-Daudé, Jiaxun Yang
Since commit e1152f8166 ("target/mips: Remove helpers accessing
SAAR registers") this header is not needed.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Message-Id: <20240529155216.5574-1-philmd@linaro.org>
---
target/mips/tcg/sysemu/cp0_helper.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/target/mips/tcg/sysemu/cp0_helper.c b/target/mips/tcg/sysemu/cp0_helper.c
index ded6c78e9a..79a5c833ce 100644
--- a/target/mips/tcg/sysemu/cp0_helper.c
+++ b/target/mips/tcg/sysemu/cp0_helper.c
@@ -28,7 +28,6 @@
#include "qemu/host-utils.h"
#include "exec/helper-proto.h"
#include "exec/exec-all.h"
-#include "hw/misc/mips_itu.h"
/* SMP helpers. */
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 05/32] target/arm: Replace sprintf() by snprintf()
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2024-06-04 9:55 ` [PULL 04/32] target/mips: Remove unused 'hw/misc/mips_itu.h' header Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 06/32] target/i386/kvm: Improve KVM_EXIT_NOTIFY warnings Philippe Mathieu-Daudé
` (27 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel; +Cc: Philippe Mathieu-Daudé, Richard Henderson, Peter Maydell
sprintf() is deprecated on Darwin since macOS 13.0 / XCode 14.1,
resulting in painful developper experience. Use snprintf() instead.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-Id: <20240411104340.6617-9-philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/arm/cpu64.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c
index 862d2b92fa..262a1d6c0b 100644
--- a/target/arm/cpu64.c
+++ b/target/arm/cpu64.c
@@ -437,7 +437,7 @@ void aarch64_add_sve_properties(Object *obj)
for (vq = 1; vq <= ARM_MAX_VQ; ++vq) {
char name[8];
- sprintf(name, "sve%d", vq * 128);
+ snprintf(name, sizeof(name), "sve%d", vq * 128);
object_property_add(obj, name, "bool", cpu_arm_get_vq,
cpu_arm_set_vq, NULL, &cpu->sve_vq);
}
@@ -462,7 +462,7 @@ void aarch64_add_sme_properties(Object *obj)
for (vq = 1; vq <= ARM_MAX_VQ; vq <<= 1) {
char name[8];
- sprintf(name, "sme%d", vq * 128);
+ snprintf(name, sizeof(name), "sme%d", vq * 128);
object_property_add(obj, name, "bool", cpu_arm_get_vq,
cpu_arm_set_vq, NULL, &cpu->sme_vq);
}
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 06/32] target/i386/kvm: Improve KVM_EXIT_NOTIFY warnings
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (4 preceding siblings ...)
2024-06-04 9:55 ` [PULL 05/32] target/arm: Replace sprintf() by snprintf() Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 07/32] disas/m68k: Replace sprintf() by snprintf() Philippe Mathieu-Daudé
` (26 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel; +Cc: Richard Henderson, Philippe Mathieu-Daudé, Zhao Liu
From: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-ID: <20240412073346.458116-28-richard.henderson@linaro.org>
[PMD: Fixed typo reported by Peter Maydell]
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/i386/kvm/kvm.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
index 6c864e4611..82ebddada1 100644
--- a/target/i386/kvm/kvm.c
+++ b/target/i386/kvm/kvm.c
@@ -5329,7 +5329,6 @@ int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run)
uint64_t code;
int ret;
bool ctx_invalid;
- char str[256];
KVMState *state;
switch (run->exit_reason) {
@@ -5389,15 +5388,15 @@ int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run)
case KVM_EXIT_NOTIFY:
ctx_invalid = !!(run->notify.flags & KVM_NOTIFY_CONTEXT_INVALID);
state = KVM_STATE(current_accel());
- sprintf(str, "Encounter a notify exit with %svalid context in"
- " guest. There can be possible misbehaves in guest."
- " Please have a look.", ctx_invalid ? "in" : "");
if (ctx_invalid ||
state->notify_vmexit == NOTIFY_VMEXIT_OPTION_INTERNAL_ERROR) {
- warn_report("KVM internal error: %s", str);
+ warn_report("KVM internal error: Encountered a notify exit "
+ "with invalid context in guest.");
ret = -1;
} else {
- warn_report_once("KVM: %s", str);
+ warn_report_once("KVM: Encountered a notify exit with valid "
+ "context in guest. "
+ "The guest could be misbehaving.");
ret = 0;
}
break;
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 07/32] disas/m68k: Replace sprintf() by snprintf()
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (5 preceding siblings ...)
2024-06-04 9:55 ` [PULL 06/32] target/i386/kvm: Improve KVM_EXIT_NOTIFY warnings Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 08/32] disas/microblaze: " Philippe Mathieu-Daudé
` (25 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel; +Cc: Philippe Mathieu-Daudé, Richard Henderson, Peter Maydell
sprintf() is deprecated on Darwin since macOS 13.0 / XCode 14.1,
resulting in painful developper experience. Use snprintf() instead.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-Id: <20240411104340.6617-2-philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
disas/m68k.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/disas/m68k.c b/disas/m68k.c
index 1f16e295ab..800b4145ac 100644
--- a/disas/m68k.c
+++ b/disas/m68k.c
@@ -1000,7 +1000,7 @@ print_indexed (int basereg,
/* Generate the text for the index register.
Where this will be output is not yet determined. */
- sprintf (buf, "%s:%c%s",
+ snprintf(buf, sizeof(buf), "%s:%c%s",
reg_names[(word >> 12) & 0xf],
(word & 0x800) ? 'l' : 'w',
scales[(word >> 9) & 3]);
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 08/32] disas/microblaze: Replace sprintf() by snprintf()
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (6 preceding siblings ...)
2024-06-04 9:55 ` [PULL 07/32] disas/m68k: Replace sprintf() by snprintf() Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 09/32] util/hexdump: Remove b parameter from qemu_hexdump_line Philippe Mathieu-Daudé
` (24 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Philippe Mathieu-Daudé, Edgar E . Iglesias,
Richard Henderson
sprintf() is deprecated on Darwin since macOS 13.0 / XCode 14.1,
resulting in painful developper experience. Use snprintf() instead.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
Message-Id: <20240411104340.6617-3-philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
disas/microblaze.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/disas/microblaze.c b/disas/microblaze.c
index 0b89b9c4fa..49a4c0fd40 100644
--- a/disas/microblaze.c
+++ b/disas/microblaze.c
@@ -600,7 +600,8 @@ static char *
get_field (long instr, long mask, unsigned short low)
{
char tmpstr[25];
- sprintf(tmpstr, "%s%d", register_prefix, (int)((instr & mask) >> low));
+ snprintf(tmpstr, sizeof(tmpstr), "%s%d", register_prefix,
+ (int)((instr & mask) >> low));
return(strdup(tmpstr));
}
@@ -608,7 +609,8 @@ static char *
get_field_imm (long instr)
{
char tmpstr[25];
- sprintf(tmpstr, "%d", (short)((instr & IMM_MASK) >> IMM_LOW));
+ snprintf(tmpstr, sizeof(tmpstr), "%d",
+ (short)((instr & IMM_MASK) >> IMM_LOW));
return(strdup(tmpstr));
}
@@ -616,7 +618,8 @@ static char *
get_field_imm5 (long instr)
{
char tmpstr[25];
- sprintf(tmpstr, "%d", (short)((instr & IMM5_MASK) >> IMM_LOW));
+ snprintf(tmpstr, sizeof(tmpstr), "%d",
+ (short)((instr & IMM5_MASK) >> IMM_LOW));
return(strdup(tmpstr));
}
@@ -624,7 +627,8 @@ static char *
get_field_rfsl (long instr)
{
char tmpstr[25];
- sprintf(tmpstr, "%s%d", fsl_register_prefix, (short)((instr & RFSL_MASK) >> IMM_LOW));
+ snprintf(tmpstr, sizeof(tmpstr), "%s%d", fsl_register_prefix,
+ (short)((instr & RFSL_MASK) >> IMM_LOW));
return(strdup(tmpstr));
}
@@ -632,7 +636,8 @@ static char *
get_field_imm15 (long instr)
{
char tmpstr[25];
- sprintf(tmpstr, "%d", (short)((instr & IMM15_MASK) >> IMM_LOW));
+ snprintf(tmpstr, sizeof(tmpstr), "%d",
+ (short)((instr & IMM15_MASK) >> IMM_LOW));
return(strdup(tmpstr));
}
@@ -641,7 +646,8 @@ static char *
get_field_unsigned_imm (long instr)
{
char tmpstr[25];
- sprintf(tmpstr, "%d", (int)((instr & IMM_MASK) >> IMM_LOW));
+ snprintf(tmpstr, sizeof(tmpstr), "%d",
+ (int)((instr & IMM_MASK) >> IMM_LOW));
return(strdup(tmpstr));
}
#endif
@@ -653,7 +659,8 @@ get_field_unsigned_imm (long instr)
{
char tmpstr[25];
- sprintf(tmpstr, "%s%s", register_prefix, (((instr & IMM_MASK) >> IMM_LOW) & REG_MSR_MASK) == 0 ? "pc" : "msr");
+ snprintf(tmpstr, sizeof(tmpstr), "%s%s", register_prefix,
+ (((instr & IMM_MASK) >> IMM_LOW) & REG_MSR_MASK) == 0 ? "pc" : "msr");
return(strdup(tmpstr));
}
@@ -709,7 +716,7 @@ get_field_special(long instr, const struct op_code_struct *op)
default :
{
if ( ((((instr & IMM_MASK) >> IMM_LOW) ^ op->immval_mask) & 0xE000) == REG_PVR_MASK) {
- sprintf(tmpstr, "%s%u", pvr_register_prefix,
+ snprintf(tmpstr, sizeof(tmpstr), "%s%u", pvr_register_prefix,
(unsigned short)(((instr & IMM_MASK) >> IMM_LOW) ^
op->immval_mask) ^ REG_PVR_MASK);
return(strdup(tmpstr));
@@ -720,7 +727,7 @@ get_field_special(long instr, const struct op_code_struct *op)
break;
}
- sprintf(tmpstr, "%s%s", register_prefix, spr);
+ snprintf(tmpstr, sizeof(tmpstr), "%s%s", register_prefix, spr);
return(strdup(tmpstr));
}
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 09/32] util/hexdump: Remove b parameter from qemu_hexdump_line
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (7 preceding siblings ...)
2024-06-04 9:55 ` [PULL 08/32] disas/microblaze: " Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 10/32] util/hexdump: Remove ascii " Philippe Mathieu-Daudé
` (23 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel; +Cc: Richard Henderson, Philippe Mathieu-Daudé
From: Richard Henderson <richard.henderson@linaro.org>
Require that the caller output the offset and increment bufptr.
Use QEMU_HEXDUMP_LINE_BYTES in vhost_vdpa_dump_config instead
of raw integer.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20240412073346.458116-2-richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/qemu/cutils.h | 2 +-
hw/virtio/vhost-vdpa.c | 4 ++--
util/hexdump.c | 13 ++++++-------
hw/virtio/trace-events | 2 +-
4 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/include/qemu/cutils.h b/include/qemu/cutils.h
index 741dade7cf..d7715f7a33 100644
--- a/include/qemu/cutils.h
+++ b/include/qemu/cutils.h
@@ -287,7 +287,7 @@ int parse_debug_env(const char *name, int max, int initial);
*/
#define QEMU_HEXDUMP_LINE_BYTES 16 /* Number of bytes to dump */
#define QEMU_HEXDUMP_LINE_LEN 75 /* Number of characters in line */
-void qemu_hexdump_line(char *line, unsigned int b, const void *bufptr,
+void qemu_hexdump_line(char *line, const void *bufptr,
unsigned int len, bool ascii);
/*
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
index ed99ab8745..f3a86c1a8c 100644
--- a/hw/virtio/vhost-vdpa.c
+++ b/hw/virtio/vhost-vdpa.c
@@ -949,8 +949,8 @@ static void vhost_vdpa_dump_config(struct vhost_dev *dev, const uint8_t *config,
for (b = 0; b < config_len; b += 16) {
len = config_len - b;
- qemu_hexdump_line(line, b, config, len, false);
- trace_vhost_vdpa_dump_config(dev, line);
+ qemu_hexdump_line(line, config + b, len, false);
+ trace_vhost_vdpa_dump_config(dev, b, line);
}
}
diff --git a/util/hexdump.c b/util/hexdump.c
index 9921114b3c..7324e7b126 100644
--- a/util/hexdump.c
+++ b/util/hexdump.c
@@ -16,7 +16,7 @@
#include "qemu/osdep.h"
#include "qemu/cutils.h"
-void qemu_hexdump_line(char *line, unsigned int b, const void *bufptr,
+void qemu_hexdump_line(char *line, const void *bufptr,
unsigned int len, bool ascii)
{
const char *buf = bufptr;
@@ -26,13 +26,12 @@ void qemu_hexdump_line(char *line, unsigned int b, const void *bufptr,
len = QEMU_HEXDUMP_LINE_BYTES;
}
- line += snprintf(line, 6, "%04x:", b);
for (i = 0; i < QEMU_HEXDUMP_LINE_BYTES; i++) {
- if ((i % 4) == 0) {
+ if (i != 0 && (i % 4) == 0) {
*line++ = ' ';
}
if (i < len) {
- line += sprintf(line, " %02x", (unsigned char)buf[b + i]);
+ line += sprintf(line, " %02x", (unsigned char)buf[i]);
} else {
line += sprintf(line, " ");
}
@@ -40,7 +39,7 @@ void qemu_hexdump_line(char *line, unsigned int b, const void *bufptr,
if (ascii) {
*line++ = ' ';
for (i = 0; i < len; i++) {
- c = buf[b + i];
+ c = buf[i];
if (c < ' ' || c > '~') {
c = '.';
}
@@ -58,8 +57,8 @@ void qemu_hexdump(FILE *fp, const char *prefix,
for (b = 0; b < size; b += QEMU_HEXDUMP_LINE_BYTES) {
len = size - b;
- qemu_hexdump_line(line, b, bufptr, len, true);
- fprintf(fp, "%s: %s\n", prefix, line);
+ qemu_hexdump_line(line, bufptr + b, len, true);
+ fprintf(fp, "%s: %04x: %s\n", prefix, b, line);
}
}
diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events
index 96632fd026..3cf84e04a7 100644
--- a/hw/virtio/trace-events
+++ b/hw/virtio/trace-events
@@ -50,7 +50,7 @@ vhost_vdpa_get_device_id(void *dev, uint32_t device_id) "dev: %p device_id %"PRI
vhost_vdpa_reset_device(void *dev) "dev: %p"
vhost_vdpa_get_vq_index(void *dev, int idx, int vq_idx) "dev: %p idx: %d vq idx: %d"
vhost_vdpa_set_vring_enable_one(void *dev, unsigned i, int enable, int r) "dev: %p, idx: %u, enable: %u, r: %d"
-vhost_vdpa_dump_config(void *dev, const char *line) "dev: %p %s"
+vhost_vdpa_dump_config(void *dev, unsigned ofs, const char *line) "dev: %p 0x%04x: %s"
vhost_vdpa_set_config(void *dev, uint32_t offset, uint32_t size, uint32_t flags) "dev: %p offset: %"PRIu32" size: %"PRIu32" flags: 0x%"PRIx32
vhost_vdpa_get_config(void *dev, void *config, uint32_t config_len) "dev: %p config: %p config_len: %"PRIu32
vhost_vdpa_suspend(void *dev) "dev: %p"
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 10/32] util/hexdump: Remove ascii parameter from qemu_hexdump_line
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (8 preceding siblings ...)
2024-06-04 9:55 ` [PULL 09/32] util/hexdump: Remove b parameter from qemu_hexdump_line Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 11/32] MAINTAINERS: drop usb maintainership Philippe Mathieu-Daudé
` (22 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel; +Cc: Richard Henderson, Philippe Mathieu-Daudé
From: Richard Henderson <richard.henderson@linaro.org>
Split out asciidump_line as a separate function, local to hexdump.c,
for use by qemu_hexdump. Use "%-*s" to generate the alignment
between the hex and the ascii, rather than explicit spaces.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20240412073346.458116-3-richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/qemu/cutils.h | 3 +--
hw/virtio/vhost-vdpa.c | 2 +-
util/hexdump.c | 56 ++++++++++++++++++++++++------------------
3 files changed, 34 insertions(+), 27 deletions(-)
diff --git a/include/qemu/cutils.h b/include/qemu/cutils.h
index d7715f7a33..c5dea63742 100644
--- a/include/qemu/cutils.h
+++ b/include/qemu/cutils.h
@@ -287,8 +287,7 @@ int parse_debug_env(const char *name, int max, int initial);
*/
#define QEMU_HEXDUMP_LINE_BYTES 16 /* Number of bytes to dump */
#define QEMU_HEXDUMP_LINE_LEN 75 /* Number of characters in line */
-void qemu_hexdump_line(char *line, const void *bufptr,
- unsigned int len, bool ascii);
+void qemu_hexdump_line(char *line, const void *bufptr, size_t len);
/*
* Hexdump a buffer to a file. An optional string prefix is added to every line
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
index f3a86c1a8c..7368b71902 100644
--- a/hw/virtio/vhost-vdpa.c
+++ b/hw/virtio/vhost-vdpa.c
@@ -949,7 +949,7 @@ static void vhost_vdpa_dump_config(struct vhost_dev *dev, const uint8_t *config,
for (b = 0; b < config_len; b += 16) {
len = config_len - b;
- qemu_hexdump_line(line, config + b, len, false);
+ qemu_hexdump_line(line, config + b, len);
trace_vhost_vdpa_dump_config(dev, b, line);
}
}
diff --git a/util/hexdump.c b/util/hexdump.c
index 7324e7b126..0f943e31e5 100644
--- a/util/hexdump.c
+++ b/util/hexdump.c
@@ -16,49 +16,57 @@
#include "qemu/osdep.h"
#include "qemu/cutils.h"
-void qemu_hexdump_line(char *line, const void *bufptr,
- unsigned int len, bool ascii)
+void qemu_hexdump_line(char *line, const void *bufptr, size_t len)
{
const char *buf = bufptr;
- int i, c;
+ int i;
if (len > QEMU_HEXDUMP_LINE_BYTES) {
len = QEMU_HEXDUMP_LINE_BYTES;
}
- for (i = 0; i < QEMU_HEXDUMP_LINE_BYTES; i++) {
+ for (i = 0; i < len; i++) {
if (i != 0 && (i % 4) == 0) {
*line++ = ' ';
}
- if (i < len) {
- line += sprintf(line, " %02x", (unsigned char)buf[i]);
- } else {
- line += sprintf(line, " ");
- }
- }
- if (ascii) {
- *line++ = ' ';
- for (i = 0; i < len; i++) {
- c = buf[i];
- if (c < ' ' || c > '~') {
- c = '.';
- }
- *line++ = c;
- }
+ line += sprintf(line, " %02x", (unsigned char)buf[i]);
}
*line = '\0';
}
+static void asciidump_line(char *line, const void *bufptr, size_t len)
+{
+ const char *buf = bufptr;
+
+ for (size_t i = 0; i < len; i++) {
+ char c = buf[i];
+
+ if (c < ' ' || c > '~') {
+ c = '.';
+ }
+ *line++ = c;
+ }
+ *line = '\0';
+}
+
+#define QEMU_HEXDUMP_LINE_WIDTH \
+ (QEMU_HEXDUMP_LINE_BYTES * 2 + QEMU_HEXDUMP_LINE_BYTES / 4)
+
void qemu_hexdump(FILE *fp, const char *prefix,
const void *bufptr, size_t size)
{
- unsigned int b, len;
char line[QEMU_HEXDUMP_LINE_LEN];
+ char ascii[QEMU_HEXDUMP_LINE_BYTES + 1];
+ size_t b, len;
- for (b = 0; b < size; b += QEMU_HEXDUMP_LINE_BYTES) {
- len = size - b;
- qemu_hexdump_line(line, bufptr + b, len, true);
- fprintf(fp, "%s: %04x: %s\n", prefix, b, line);
+ for (b = 0; b < size; b += len) {
+ len = MIN(size - b, QEMU_HEXDUMP_LINE_BYTES);
+
+ qemu_hexdump_line(line, bufptr + b, len);
+ asciidump_line(ascii, bufptr + b, len);
+
+ fprintf(fp, "%s: %04zx: %-*s %s\n",
+ prefix, b, QEMU_HEXDUMP_LINE_WIDTH, line, ascii);
}
}
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 11/32] MAINTAINERS: drop usb maintainership
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (9 preceding siblings ...)
2024-06-04 9:55 ` [PULL 10/32] util/hexdump: Remove ascii " Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 12/32] system/runstate: Remove unused 'qemu/plugin.h' header Philippe Mathieu-Daudé
` (21 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Manos Pitsidianakis, Philippe Mathieu-Daudé
From: Gerd Hoffmann <kraxel@redhat.com>
Remove myself from usb entries.
Flip status to "Orphan" for entries which have nobody else listed.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Message-ID: <20240528083858.836262-3-kraxel@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
MAINTAINERS | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 448dc951c5..5bc478f7ff 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2141,8 +2141,7 @@ F: tests/qtest/fuzz-sdcard-test.c
F: tests/qtest/sdhci-test.c
USB
-M: Gerd Hoffmann <kraxel@redhat.com>
-S: Odd Fixes
+S: Orphan
F: hw/usb/*
F: stubs/usb-dev-stub.c
F: tests/qtest/usb-*-test.c
@@ -2151,7 +2150,6 @@ F: include/hw/usb.h
F: include/hw/usb/
USB (serial adapter)
-R: Gerd Hoffmann <kraxel@redhat.com>
M: Samuel Thibault <samuel.thibault@ens-lyon.org>
S: Maintained
F: hw/usb/dev-serial.c
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 12/32] system/runstate: Remove unused 'qemu/plugin.h' header
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (10 preceding siblings ...)
2024-06-04 9:55 ` [PULL 11/32] MAINTAINERS: drop usb maintainership Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 13/32] accel/tcg: Move common declarations to 'internal-common.h' Philippe Mathieu-Daudé
` (20 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Philippe Mathieu-Daudé, Richard Henderson, Pierrick Bouvier
system/runstate.c never required "qemu/plugin.h".
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-Id: <20240528145953.65398-2-philmd@linaro.org>
---
system/runstate.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/system/runstate.c b/system/runstate.c
index cb4905a40f..ec32e270cb 100644
--- a/system/runstate.c
+++ b/system/runstate.c
@@ -45,7 +45,6 @@
#include "qemu/job.h"
#include "qemu/log.h"
#include "qemu/module.h"
-#include "qemu/plugin.h"
#include "qemu/sockets.h"
#include "qemu/timer.h"
#include "qemu/thread.h"
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 13/32] accel/tcg: Move common declarations to 'internal-common.h'
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (11 preceding siblings ...)
2024-06-04 9:55 ` [PULL 12/32] system/runstate: Remove unused 'qemu/plugin.h' header Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 14/32] accel/kvm: Fix two lines with hard-coded tabs Philippe Mathieu-Daudé
` (19 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Philippe Mathieu-Daudé, Richard Henderson, Pierrick Bouvier
'internal-target.h' is meant for target-specific declarations,
while 'internal-common.h' for common ones. Move common declarations
to it.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-Id: <20240528145953.65398-3-philmd@linaro.org>
---
accel/tcg/internal-common.h | 15 +++++++++++++++
accel/tcg/internal-target.h | 14 --------------
accel/tcg/tcg-all.c | 2 +-
3 files changed, 16 insertions(+), 15 deletions(-)
diff --git a/accel/tcg/internal-common.h b/accel/tcg/internal-common.h
index cff43d221b..a8fc3db774 100644
--- a/accel/tcg/internal-common.h
+++ b/accel/tcg/internal-common.h
@@ -15,6 +15,8 @@
extern int64_t max_delay;
extern int64_t max_advance;
+extern bool one_insn_per_tb;
+
/*
* Return true if CS is not running in parallel with other cpus, either
* because there are no other cpus or we are within an exclusive context.
@@ -41,4 +43,17 @@ static inline bool cpu_plugin_mem_cbs_enabled(const CPUState *cpu)
#endif
}
+TranslationBlock *tb_gen_code(CPUState *cpu, vaddr pc,
+ uint64_t cs_base, uint32_t flags,
+ int cflags);
+void page_init(void);
+void tb_htable_init(void);
+void tb_reset_jump(TranslationBlock *tb, int n);
+TranslationBlock *tb_link_page(TranslationBlock *tb);
+void cpu_restore_state_from_tb(CPUState *cpu, TranslationBlock *tb,
+ uintptr_t host_pc);
+
+bool tcg_exec_realizefn(CPUState *cpu, Error **errp);
+void tcg_exec_unrealizefn(CPUState *cpu);
+
#endif
diff --git a/accel/tcg/internal-target.h b/accel/tcg/internal-target.h
index 4e36cf858e..fe109724c6 100644
--- a/accel/tcg/internal-target.h
+++ b/accel/tcg/internal-target.h
@@ -69,19 +69,7 @@ void tb_invalidate_phys_range_fast(ram_addr_t ram_addr,
G_NORETURN void cpu_io_recompile(CPUState *cpu, uintptr_t retaddr);
#endif /* CONFIG_SOFTMMU */
-TranslationBlock *tb_gen_code(CPUState *cpu, vaddr pc,
- uint64_t cs_base, uint32_t flags,
- int cflags);
-void page_init(void);
-void tb_htable_init(void);
-void tb_reset_jump(TranslationBlock *tb, int n);
-TranslationBlock *tb_link_page(TranslationBlock *tb);
bool tb_invalidate_phys_page_unwind(tb_page_addr_t addr, uintptr_t pc);
-void cpu_restore_state_from_tb(CPUState *cpu, TranslationBlock *tb,
- uintptr_t host_pc);
-
-bool tcg_exec_realizefn(CPUState *cpu, Error **errp);
-void tcg_exec_unrealizefn(CPUState *cpu);
/* Return the current PC from CPU, which may be cached in TB. */
static inline vaddr log_pc(CPUState *cpu, const TranslationBlock *tb)
@@ -93,8 +81,6 @@ static inline vaddr log_pc(CPUState *cpu, const TranslationBlock *tb)
}
}
-extern bool one_insn_per_tb;
-
/**
* tcg_req_mo:
* @type: TCGBar
diff --git a/accel/tcg/tcg-all.c b/accel/tcg/tcg-all.c
index c6619f5b98..2090907dba 100644
--- a/accel/tcg/tcg-all.c
+++ b/accel/tcg/tcg-all.c
@@ -38,7 +38,7 @@
#if !defined(CONFIG_USER_ONLY)
#include "hw/boards.h"
#endif
-#include "internal-target.h"
+#include "internal-common.h"
struct TCGState {
AccelState parent_obj;
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 14/32] accel/kvm: Fix two lines with hard-coded tabs
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (12 preceding siblings ...)
2024-06-04 9:55 ` [PULL 13/32] accel/tcg: Move common declarations to 'internal-common.h' Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 15/32] hw/core: expand on the alignment of CPUState Philippe Mathieu-Daudé
` (18 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Zhao Liu, Philippe Mathieu-Daudé
From: Peter Maydell <peter.maydell@linaro.org>
In kvm-all.c, two lines have been accidentally indented with
hard-coded tabs rather than spaces. Normalise to match the rest
of the file.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Message-ID: <20240531170952.505323-1-peter.maydell@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
accel/kvm/kvm-all.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index c0be9f5eed..009b49de44 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -2893,7 +2893,7 @@ int kvm_convert_memory(hwaddr start, hwaddr size, bool to_private)
!memory_region_is_ram_device(mr) &&
!memory_region_is_rom(mr) &&
!memory_region_is_romd(mr)) {
- ret = 0;
+ ret = 0;
} else {
error_report("Convert non guest_memfd backed memory region "
"(0x%"HWADDR_PRIx" ,+ 0x%"HWADDR_PRIx") to %s",
@@ -2964,7 +2964,7 @@ int kvm_cpu_exec(CPUState *cpu)
kvm_arch_pre_run(cpu, run);
if (qatomic_read(&cpu->exit_request)) {
- trace_kvm_interrupt_exit_request();
+ trace_kvm_interrupt_exit_request();
/*
* KVM requires us to reenter the kernel after IO exits to complete
* instruction emulation. This self-signal will ensure that we
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 15/32] hw/core: expand on the alignment of CPUState
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (13 preceding siblings ...)
2024-06-04 9:55 ` [PULL 14/32] accel/kvm: Fix two lines with hard-coded tabs Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 16/32] cpu: move Qemu[Thread|Cond] setup into common code Philippe Mathieu-Daudé
` (17 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Alex Bennée, Pierrick Bouvier, Philippe Mathieu-Daudé
From: Alex Bennée <alex.bennee@linaro.org>
Make the relationship between CPUState, ArchCPU and cpu_env a bit
clearer in the kdoc comments.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-ID: <20240530194250.1801701-2-alex.bennee@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/core/cpu.h | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index bb398e8237..be44746d24 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -391,7 +391,8 @@ struct qemu_work_item;
#define CPU_UNSET_NUMA_NODE_ID -1
/**
- * CPUState:
+ * struct CPUState - common state of one CPU core or thread.
+ *
* @cpu_index: CPU index (informative).
* @cluster_index: Identifies which cluster this CPU is in.
* For boards which don't define clusters or for "loose" CPUs not assigned
@@ -439,10 +440,15 @@ struct qemu_work_item;
* @kvm_fetch_index: Keeps the index that we last fetched from the per-vCPU
* dirty ring structure.
*
- * State of one CPU core or thread.
+ * @neg_align: The CPUState is the common part of a concrete ArchCPU
+ * which is allocated when an individual CPU instance is created. As
+ * such care is taken is ensure there is no gap between between
+ * CPUState and CPUArchState within ArchCPU.
*
- * Align, in order to match possible alignment required by CPUArchState,
- * and eliminate a hole between CPUState and CPUArchState within ArchCPU.
+ * @neg: The architectural register state ("cpu_env") immediately follows
+ * CPUState in ArchCPU and is passed to TCG code. The @neg structure holds
+ * some common TCG CPU variables which are accessed with a negative offset
+ * from cpu_env.
*/
struct CPUState {
/*< private >*/
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 16/32] cpu: move Qemu[Thread|Cond] setup into common code
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (14 preceding siblings ...)
2024-06-04 9:55 ` [PULL 15/32] hw/core: expand on the alignment of CPUState Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 17/32] cpu-target: don't set cpu->thread_id to bogus value Philippe Mathieu-Daudé
` (16 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Alex Bennée, Pierrick Bouvier, Philippe Mathieu-Daudé
From: Alex Bennée <alex.bennee@linaro.org>
Aside from the round robin threads this is all common code. By
moving the halt_cond setup we also no longer need hacks to work around
the race between QOM object creation and thread creation.
It is a little ugly to free stuff up for the round robin thread but
better it deal with its own specialises than making the other
accelerators jump through hoops.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-ID: <20240530194250.1801701-3-alex.bennee@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/core/cpu.h | 4 ++++
accel/dummy-cpus.c | 3 ---
accel/hvf/hvf-accel-ops.c | 4 ----
accel/kvm/kvm-accel-ops.c | 3 ---
accel/tcg/tcg-accel-ops-mttcg.c | 4 ----
accel/tcg/tcg-accel-ops-rr.c | 14 +++++++-------
hw/core/cpu-common.c | 5 +++++
target/i386/nvmm/nvmm-accel-ops.c | 3 ---
target/i386/whpx/whpx-accel-ops.c | 3 ---
9 files changed, 16 insertions(+), 27 deletions(-)
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index be44746d24..a2c8536943 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -404,10 +404,14 @@ struct qemu_work_item;
* @tcg_cflags: Pre-computed cflags for this cpu.
* @nr_cores: Number of cores within this CPU package.
* @nr_threads: Number of threads within this CPU core.
+ * @thread: Host thread details, only live once @created is #true
+ * @sem: WIN32 only semaphore used only for qtest
+ * @thread_id: native thread id of vCPU, only live once @created is #true
* @running: #true if CPU is currently running (lockless).
* @has_waiter: #true if a CPU is currently waiting for the cpu_exec_end;
* valid under cpu_list_lock.
* @created: Indicates whether the CPU thread has been successfully created.
+ * @halt_cond: condition variable sleeping threads can wait on.
* @interrupt_request: Indicates a pending interrupt request.
* @halted: Nonzero if the CPU is in suspended state.
* @stop: Indicates a pending stop request.
diff --git a/accel/dummy-cpus.c b/accel/dummy-cpus.c
index 20519f1ea4..f32d8c8dc3 100644
--- a/accel/dummy-cpus.c
+++ b/accel/dummy-cpus.c
@@ -68,9 +68,6 @@ void dummy_start_vcpu_thread(CPUState *cpu)
{
char thread_name[VCPU_THREAD_NAME_SIZE];
- cpu->thread = g_malloc0(sizeof(QemuThread));
- cpu->halt_cond = g_malloc0(sizeof(QemuCond));
- qemu_cond_init(cpu->halt_cond);
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/DUMMY",
cpu->cpu_index);
qemu_thread_create(cpu->thread, thread_name, dummy_cpu_thread_fn, cpu,
diff --git a/accel/hvf/hvf-accel-ops.c b/accel/hvf/hvf-accel-ops.c
index 40d4187d9d..6f1e27ef46 100644
--- a/accel/hvf/hvf-accel-ops.c
+++ b/accel/hvf/hvf-accel-ops.c
@@ -463,10 +463,6 @@ static void hvf_start_vcpu_thread(CPUState *cpu)
*/
assert(hvf_enabled());
- cpu->thread = g_malloc0(sizeof(QemuThread));
- cpu->halt_cond = g_malloc0(sizeof(QemuCond));
- qemu_cond_init(cpu->halt_cond);
-
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/HVF",
cpu->cpu_index);
qemu_thread_create(cpu->thread, thread_name, hvf_cpu_thread_fn,
diff --git a/accel/kvm/kvm-accel-ops.c b/accel/kvm/kvm-accel-ops.c
index 94c828ac8d..c239dfc87a 100644
--- a/accel/kvm/kvm-accel-ops.c
+++ b/accel/kvm/kvm-accel-ops.c
@@ -66,9 +66,6 @@ static void kvm_start_vcpu_thread(CPUState *cpu)
{
char thread_name[VCPU_THREAD_NAME_SIZE];
- cpu->thread = g_malloc0(sizeof(QemuThread));
- cpu->halt_cond = g_malloc0(sizeof(QemuCond));
- qemu_cond_init(cpu->halt_cond);
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/KVM",
cpu->cpu_index);
qemu_thread_create(cpu->thread, thread_name, kvm_vcpu_thread_fn,
diff --git a/accel/tcg/tcg-accel-ops-mttcg.c b/accel/tcg/tcg-accel-ops-mttcg.c
index c552b45b8e..49814ec4af 100644
--- a/accel/tcg/tcg-accel-ops-mttcg.c
+++ b/accel/tcg/tcg-accel-ops-mttcg.c
@@ -137,10 +137,6 @@ void mttcg_start_vcpu_thread(CPUState *cpu)
g_assert(tcg_enabled());
tcg_cpu_init_cflags(cpu, current_machine->smp.max_cpus > 1);
- cpu->thread = g_new0(QemuThread, 1);
- cpu->halt_cond = g_malloc0(sizeof(QemuCond));
- qemu_cond_init(cpu->halt_cond);
-
/* create a thread per vCPU with TCG (MTTCG) */
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG",
cpu->cpu_index);
diff --git a/accel/tcg/tcg-accel-ops-rr.c b/accel/tcg/tcg-accel-ops-rr.c
index 894e73e52c..84c36c1450 100644
--- a/accel/tcg/tcg-accel-ops-rr.c
+++ b/accel/tcg/tcg-accel-ops-rr.c
@@ -317,22 +317,22 @@ void rr_start_vcpu_thread(CPUState *cpu)
tcg_cpu_init_cflags(cpu, false);
if (!single_tcg_cpu_thread) {
- cpu->thread = g_new0(QemuThread, 1);
- cpu->halt_cond = g_new0(QemuCond, 1);
- qemu_cond_init(cpu->halt_cond);
+ single_tcg_halt_cond = cpu->halt_cond;
+ single_tcg_cpu_thread = cpu->thread;
/* share a single thread for all cpus with TCG */
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "ALL CPUs/TCG");
qemu_thread_create(cpu->thread, thread_name,
rr_cpu_thread_fn,
cpu, QEMU_THREAD_JOINABLE);
-
- single_tcg_halt_cond = cpu->halt_cond;
- single_tcg_cpu_thread = cpu->thread;
} else {
- /* we share the thread */
+ /* we share the thread, dump spare data */
+ g_free(cpu->thread);
+ qemu_cond_destroy(cpu->halt_cond);
cpu->thread = single_tcg_cpu_thread;
cpu->halt_cond = single_tcg_halt_cond;
+
+ /* copy the stuff done at start of rr_cpu_thread_fn */
cpu->thread_id = first_cpu->thread_id;
cpu->neg.can_do_io = 1;
cpu->created = true;
diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
index 0f0a247f56..6cfc01593a 100644
--- a/hw/core/cpu-common.c
+++ b/hw/core/cpu-common.c
@@ -261,6 +261,11 @@ static void cpu_common_initfn(Object *obj)
cpu->nr_threads = 1;
cpu->cflags_next_tb = -1;
+ /* allocate storage for thread info, initialise condition variables */
+ cpu->thread = g_new0(QemuThread, 1);
+ cpu->halt_cond = g_new0(QemuCond, 1);
+ qemu_cond_init(cpu->halt_cond);
+
qemu_mutex_init(&cpu->work_mutex);
qemu_lockcnt_init(&cpu->in_ioctl_lock);
QSIMPLEQ_INIT(&cpu->work_list);
diff --git a/target/i386/nvmm/nvmm-accel-ops.c b/target/i386/nvmm/nvmm-accel-ops.c
index 6b2bfd9b9c..0ba31201e2 100644
--- a/target/i386/nvmm/nvmm-accel-ops.c
+++ b/target/i386/nvmm/nvmm-accel-ops.c
@@ -64,9 +64,6 @@ static void nvmm_start_vcpu_thread(CPUState *cpu)
{
char thread_name[VCPU_THREAD_NAME_SIZE];
- cpu->thread = g_new0(QemuThread, 1);
- cpu->halt_cond = g_new0(QemuCond, 1);
- qemu_cond_init(cpu->halt_cond);
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/NVMM",
cpu->cpu_index);
qemu_thread_create(cpu->thread, thread_name, qemu_nvmm_cpu_thread_fn,
diff --git a/target/i386/whpx/whpx-accel-ops.c b/target/i386/whpx/whpx-accel-ops.c
index 189ae0f140..1a2b4e1c43 100644
--- a/target/i386/whpx/whpx-accel-ops.c
+++ b/target/i386/whpx/whpx-accel-ops.c
@@ -64,9 +64,6 @@ static void whpx_start_vcpu_thread(CPUState *cpu)
{
char thread_name[VCPU_THREAD_NAME_SIZE];
- cpu->thread = g_new0(QemuThread, 1);
- cpu->halt_cond = g_new0(QemuCond, 1);
- qemu_cond_init(cpu->halt_cond);
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/WHPX",
cpu->cpu_index);
qemu_thread_create(cpu->thread, thread_name, whpx_cpu_thread_fn,
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 17/32] cpu-target: don't set cpu->thread_id to bogus value
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (15 preceding siblings ...)
2024-06-04 9:55 ` [PULL 16/32] cpu: move Qemu[Thread|Cond] setup into common code Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 18/32] plugins: remove special casing for cpu->realized Philippe Mathieu-Daudé
` (15 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Alex Bennée, Pierrick Bouvier, Philippe Mathieu-Daudé
From: Alex Bennée <alex.bennee@linaro.org>
The thread_id isn't valid until the threads are created. There is no
point setting it here. The only thing that cares about the thread_id
is qmp_query_cpus_fast.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-ID: <20240530194250.1801701-4-alex.bennee@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
cpu-target.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/cpu-target.c b/cpu-target.c
index 5af120e8aa..499facf774 100644
--- a/cpu-target.c
+++ b/cpu-target.c
@@ -241,7 +241,6 @@ void cpu_exec_initfn(CPUState *cpu)
cpu->num_ases = 0;
#ifndef CONFIG_USER_ONLY
- cpu->thread_id = qemu_get_thread_id();
cpu->memory = get_system_memory();
object_ref(OBJECT(cpu->memory));
#endif
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 18/32] plugins: remove special casing for cpu->realized
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (16 preceding siblings ...)
2024-06-04 9:55 ` [PULL 17/32] cpu-target: don't set cpu->thread_id to bogus value Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 19/32] core/cpu-common: initialise plugin state before thread creation Philippe Mathieu-Daudé
` (14 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Alex Bennée, Pierrick Bouvier, Philippe Mathieu-Daudé
From: Alex Bennée <alex.bennee@linaro.org>
Now the condition variable is initialised early on we don't need to go
through hoops to avoid calling async_run_on_cpu.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-ID: <20240530194250.1801701-5-alex.bennee@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
plugins/core.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/plugins/core.c b/plugins/core.c
index 0726bc7f25..badede28cf 100644
--- a/plugins/core.c
+++ b/plugins/core.c
@@ -65,11 +65,7 @@ static void plugin_cpu_update__locked(gpointer k, gpointer v, gpointer udata)
CPUState *cpu = container_of(k, CPUState, cpu_index);
run_on_cpu_data mask = RUN_ON_CPU_HOST_ULONG(*plugin.mask);
- if (DEVICE(cpu)->realized) {
- async_run_on_cpu(cpu, plugin_cpu_update__async, mask);
- } else {
- plugin_cpu_update__async(cpu, mask);
- }
+ async_run_on_cpu(cpu, plugin_cpu_update__async, mask);
}
void plugin_unregister_cb__locked(struct qemu_plugin_ctx *ctx,
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 19/32] core/cpu-common: initialise plugin state before thread creation
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (17 preceding siblings ...)
2024-06-04 9:55 ` [PULL 18/32] plugins: remove special casing for cpu->realized Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 20/32] xen: Add xen_mr_is_memory() Philippe Mathieu-Daudé
` (13 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Alex Bennée, Pierrick Bouvier, Philippe Mathieu-Daudé
From: Alex Bennée <alex.bennee@linaro.org>
Originally I tried to move where vCPU thread initialisation to later
in realize. However pulling that thread (sic) got gnarly really
quickly. It turns out some steps of CPU realization need values that
can only be determined from the running vCPU thread.
However having moved enough out of the thread creation we can now
queue work before the thread starts (at least for TCG guests) and
avoid the race between vcpu_init and other vcpu states a plugin might
subscribe to.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-ID: <20240530194250.1801701-6-alex.bennee@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/core/cpu-common.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
index 6cfc01593a..bf1a7b8892 100644
--- a/hw/core/cpu-common.c
+++ b/hw/core/cpu-common.c
@@ -222,14 +222,6 @@ static void cpu_common_realizefn(DeviceState *dev, Error **errp)
cpu_resume(cpu);
}
- /* Plugin initialization must wait until the cpu start executing code */
-#ifdef CONFIG_PLUGIN
- if (tcg_enabled()) {
- cpu->plugin_state = qemu_plugin_create_vcpu_state();
- async_run_on_cpu(cpu, qemu_plugin_vcpu_init__async, RUN_ON_CPU_NULL);
- }
-#endif
-
/* NOTE: latest generic point where the cpu is fully realized */
}
@@ -273,6 +265,18 @@ static void cpu_common_initfn(Object *obj)
QTAILQ_INIT(&cpu->watchpoints);
cpu_exec_initfn(cpu);
+
+ /*
+ * Plugin initialization must wait until the cpu start executing
+ * code, but we must queue this work before the threads are
+ * created to ensure we don't race.
+ */
+#ifdef CONFIG_PLUGIN
+ if (tcg_enabled()) {
+ cpu->plugin_state = qemu_plugin_create_vcpu_state();
+ async_run_on_cpu(cpu, qemu_plugin_vcpu_init__async, RUN_ON_CPU_NULL);
+ }
+#endif
}
static void cpu_common_finalize(Object *obj)
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 20/32] xen: Add xen_mr_is_memory()
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (18 preceding siblings ...)
2024-06-04 9:55 ` [PULL 19/32] core/cpu-common: initialise plugin state before thread creation Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 21/32] physmem: Always pass offset + addr to xen_map_cache Philippe Mathieu-Daudé
` (12 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Edgar E. Iglesias, Stefano Stabellini, David Hildenbrand,
Philippe Mathieu-Daudé
From: "Edgar E. Iglesias" <edgar.iglesias@amd.com>
Add xen_mr_is_memory() to abstract away tests for the
xen_memory MR.
No functional changes.
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20240529140739.1387692-4-edgar.iglesias@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/sysemu/xen.h | 1 +
hw/xen/xen-hvm-common.c | 10 ++++++++--
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/include/sysemu/xen.h b/include/sysemu/xen.h
index 754ec2e6cb..3445888e39 100644
--- a/include/sysemu/xen.h
+++ b/include/sysemu/xen.h
@@ -49,4 +49,5 @@ static inline void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
#endif /* CONFIG_XEN_IS_POSSIBLE */
+bool xen_mr_is_memory(MemoryRegion *mr);
#endif
diff --git a/hw/xen/xen-hvm-common.c b/hw/xen/xen-hvm-common.c
index 2d1b032121..a0a0252da0 100644
--- a/hw/xen/xen-hvm-common.c
+++ b/hw/xen/xen-hvm-common.c
@@ -12,6 +12,12 @@
MemoryRegion xen_memory;
+/* Check for xen memory. */
+bool xen_mr_is_memory(MemoryRegion *mr)
+{
+ return mr == &xen_memory;
+}
+
void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, MemoryRegion *mr,
Error **errp)
{
@@ -28,7 +34,7 @@ void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, MemoryRegion *mr,
return;
}
- if (mr == &xen_memory) {
+ if (xen_mr_is_memory(mr)) {
return;
}
@@ -55,7 +61,7 @@ static void xen_set_memory(struct MemoryListener *listener,
{
XenIOState *state = container_of(listener, XenIOState, memory_listener);
- if (section->mr == &xen_memory) {
+ if (xen_mr_is_memory(section->mr)) {
return;
} else {
if (add) {
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 21/32] physmem: Always pass offset + addr to xen_map_cache
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (19 preceding siblings ...)
2024-06-04 9:55 ` [PULL 20/32] xen: Add xen_mr_is_memory() Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 22/32] physmem: Replace check for RAMBlock offset 0 with xen_mr_is_memory Philippe Mathieu-Daudé
` (11 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Edgar E. Iglesias, Stefano Stabellini, David Hildenbrand,
Philippe Mathieu-Daudé
From: "Edgar E. Iglesias" <edgar.iglesias@amd.com>
Always pass address with offset to xen_map_cache().
This is in preparation for support for grant mappings.
Since this is within a block that checks for offset == 0,
this has no functional changes.
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Reviewed-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20240529140739.1387692-5-edgar.iglesias@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
system/physmem.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/system/physmem.c b/system/physmem.c
index 342b7a8fd4..5e6257ef65 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -2230,7 +2230,8 @@ static void *qemu_ram_ptr_length(RAMBlock *block, ram_addr_t addr,
* In that case just map the requested area.
*/
if (block->offset == 0) {
- return xen_map_cache(block->mr, addr, len, lock, lock,
+ return xen_map_cache(block->mr, block->offset + addr,
+ len, lock, lock,
is_write);
}
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 22/32] physmem: Replace check for RAMBlock offset 0 with xen_mr_is_memory
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (20 preceding siblings ...)
2024-06-04 9:55 ` [PULL 21/32] physmem: Always pass offset + addr to xen_map_cache Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:55 ` [PULL 23/32] hw/xen: Constify XenLegacyDevice::XenDevOps Philippe Mathieu-Daudé
` (10 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel
Cc: Edgar E. Iglesias, Stefano Stabellini, David Hildenbrand,
Philippe Mathieu-Daudé
From: "Edgar E. Iglesias" <edgar.iglesias@amd.com>
For xen, when checking for the first RAM (xen_memory), use
xen_mr_is_memory() rather than checking for a RAMBlock with
offset 0.
All Xen machines create xen_memory first so this has no
functional change for existing machines.
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Reviewed-by: David Hildenbrand <david@redhat.com>
Message-ID: <20240529140739.1387692-6-edgar.iglesias@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
system/physmem.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/system/physmem.c b/system/physmem.c
index 5e6257ef65..b7847db1a2 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -2229,7 +2229,7 @@ static void *qemu_ram_ptr_length(RAMBlock *block, ram_addr_t addr,
* because we don't want to map the entire memory in QEMU.
* In that case just map the requested area.
*/
- if (block->offset == 0) {
+ if (xen_mr_is_memory(block->mr)) {
return xen_map_cache(block->mr, block->offset + addr,
len, lock, lock,
is_write);
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 23/32] hw/xen: Constify XenLegacyDevice::XenDevOps
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (21 preceding siblings ...)
2024-06-04 9:55 ` [PULL 22/32] physmem: Replace check for RAMBlock offset 0 with xen_mr_is_memory Philippe Mathieu-Daudé
@ 2024-06-04 9:55 ` Philippe Mathieu-Daudé
2024-06-04 9:56 ` [PULL 24/32] hw/xen: Constify xenstore_be::XenDevOps Philippe Mathieu-Daudé
` (9 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:55 UTC (permalink / raw)
To: qemu-devel; +Cc: Philippe Mathieu-Daudé, Paul Durrant
XenDevOps @ops is not updated, mark it const.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Paul Durrant <paul@xen.org>
Message-Id: <20240510104908.76908-3-philmd@linaro.org>
---
include/hw/xen/xen_pvdev.h | 2 +-
hw/xen/xen-legacy-backend.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/hw/xen/xen_pvdev.h b/include/hw/xen/xen_pvdev.h
index fdf84f47af..0c98444047 100644
--- a/include/hw/xen/xen_pvdev.h
+++ b/include/hw/xen/xen_pvdev.h
@@ -52,7 +52,7 @@ struct XenLegacyDevice {
xenevtchn_handle *evtchndev;
xengnttab_handle *gnttabdev;
- struct XenDevOps *ops;
+ const struct XenDevOps *ops;
QTAILQ_ENTRY(XenLegacyDevice) next;
};
diff --git a/hw/xen/xen-legacy-backend.c b/hw/xen/xen-legacy-backend.c
index 6f0b300a42..33620fe42e 100644
--- a/hw/xen/xen-legacy-backend.c
+++ b/hw/xen/xen-legacy-backend.c
@@ -170,7 +170,7 @@ int xen_be_copy_grant_refs(struct XenLegacyDevice *xendev,
*/
static struct XenLegacyDevice *xen_be_get_xendev(const char *type, int dom,
int dev,
- struct XenDevOps *ops)
+ const struct XenDevOps *ops)
{
struct XenLegacyDevice *xendev;
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 24/32] hw/xen: Constify xenstore_be::XenDevOps
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (22 preceding siblings ...)
2024-06-04 9:55 ` [PULL 23/32] hw/xen: Constify XenLegacyDevice::XenDevOps Philippe Mathieu-Daudé
@ 2024-06-04 9:56 ` Philippe Mathieu-Daudé
2024-06-04 9:56 ` [PULL 25/32] hw/xen: Make XenDevOps structures const Philippe Mathieu-Daudé
` (8 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:56 UTC (permalink / raw)
To: qemu-devel; +Cc: Philippe Mathieu-Daudé, Paul Durrant
XenDevOps @ops is not updated, mark it const.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Paul Durrant <paul@xen.org>
Message-Id: <20240510104908.76908-4-philmd@linaro.org>
---
include/hw/xen/xen-legacy-backend.h | 2 +-
hw/xen/xen-legacy-backend.c | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/hw/xen/xen-legacy-backend.h b/include/hw/xen/xen-legacy-backend.h
index 979c4ea04c..62623ecb30 100644
--- a/include/hw/xen/xen-legacy-backend.h
+++ b/include/hw/xen/xen-legacy-backend.h
@@ -40,7 +40,7 @@ void xen_be_check_state(struct XenLegacyDevice *xendev);
/* xen backend driver bits */
void xen_be_init(void);
-int xen_be_register(const char *type, struct XenDevOps *ops);
+int xen_be_register(const char *type, const struct XenDevOps *ops);
int xen_be_set_state(struct XenLegacyDevice *xendev, enum xenbus_state state);
int xen_be_bind_evtchn(struct XenLegacyDevice *xendev);
void xen_be_set_max_grant_refs(struct XenLegacyDevice *xendev,
diff --git a/hw/xen/xen-legacy-backend.c b/hw/xen/xen-legacy-backend.c
index 33620fe42e..5514184f9c 100644
--- a/hw/xen/xen-legacy-backend.c
+++ b/hw/xen/xen-legacy-backend.c
@@ -520,7 +520,7 @@ void xen_be_check_state(struct XenLegacyDevice *xendev)
struct xenstore_be {
const char *type;
int dom;
- struct XenDevOps *ops;
+ const struct XenDevOps *ops;
};
static void xenstore_update_be(void *opaque, const char *watch)
@@ -557,7 +557,7 @@ static void xenstore_update_be(void *opaque, const char *watch)
}
}
-static int xenstore_scan(const char *type, int dom, struct XenDevOps *ops)
+static int xenstore_scan(const char *type, int dom, const struct XenDevOps *ops)
{
struct XenLegacyDevice *xendev;
char path[XEN_BUFSIZE];
@@ -624,7 +624,7 @@ void xen_be_init(void)
xen_set_dynamic_sysbus();
}
-int xen_be_register(const char *type, struct XenDevOps *ops)
+int xen_be_register(const char *type, const struct XenDevOps *ops)
{
char path[50];
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 25/32] hw/xen: Make XenDevOps structures const
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (23 preceding siblings ...)
2024-06-04 9:56 ` [PULL 24/32] hw/xen: Constify xenstore_be::XenDevOps Philippe Mathieu-Daudé
@ 2024-06-04 9:56 ` Philippe Mathieu-Daudé
2024-06-04 9:56 ` [PULL 26/32] hw/xen: Register framebuffer backend via xen_backend_init() Philippe Mathieu-Daudé
` (7 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:56 UTC (permalink / raw)
To: qemu-devel; +Cc: Philippe Mathieu-Daudé, Paul Durrant
Keep XenDevOps structures in .rodata.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Paul Durrant <paul@xen.org>
Message-Id: <20240510104908.76908-5-philmd@linaro.org>
---
include/hw/xen/xen-legacy-backend.h | 2 +-
hw/9pfs/xen-9p-backend.c | 2 +-
hw/display/xenfb.c | 4 ++--
hw/usb/xen-usb.c | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/include/hw/xen/xen-legacy-backend.h b/include/hw/xen/xen-legacy-backend.h
index 62623ecb30..e55a14057f 100644
--- a/include/hw/xen/xen-legacy-backend.h
+++ b/include/hw/xen/xen-legacy-backend.h
@@ -67,7 +67,7 @@ static inline void xen_be_unmap_grant_ref(struct XenLegacyDevice *xendev,
}
/* backend drivers not included in all machines */
-extern struct XenDevOps xen_framebuffer_ops; /* xenfb.c */
+extern const struct XenDevOps xen_framebuffer_ops; /* xenfb.c */
/* configuration (aka xenbus setup) */
void xen_config_cleanup(void);
diff --git a/hw/9pfs/xen-9p-backend.c b/hw/9pfs/xen-9p-backend.c
index a3ac53f989..79359d911a 100644
--- a/hw/9pfs/xen-9p-backend.c
+++ b/hw/9pfs/xen-9p-backend.c
@@ -513,7 +513,7 @@ static void xen_9pfs_alloc(struct XenLegacyDevice *xendev)
xenstore_write_be_int(xendev, "max-ring-page-order", MAX_RING_ORDER);
}
-static struct XenDevOps xen_9pfs_ops = {
+static const struct XenDevOps xen_9pfs_ops = {
.size = sizeof(Xen9pfsDev),
.flags = DEVOPS_FLAG_NEED_GNTDEV,
.alloc = xen_9pfs_alloc,
diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c
index 27536bfce0..b6d370bdf6 100644
--- a/hw/display/xenfb.c
+++ b/hw/display/xenfb.c
@@ -972,7 +972,7 @@ static void fb_event(struct XenLegacyDevice *xendev)
/* -------------------------------------------------------------------- */
-static struct XenDevOps xen_kbdmouse_ops = {
+static const struct XenDevOps xen_kbdmouse_ops = {
.size = sizeof(struct XenInput),
.init = input_init,
.initialise = input_initialise,
@@ -981,7 +981,7 @@ static struct XenDevOps xen_kbdmouse_ops = {
.event = input_event,
};
-struct XenDevOps xen_framebuffer_ops = {
+const struct XenDevOps xen_framebuffer_ops = {
.size = sizeof(struct XenFB),
.init = fb_init,
.initialise = fb_initialise,
diff --git a/hw/usb/xen-usb.c b/hw/usb/xen-usb.c
index 416623f956..13901625c0 100644
--- a/hw/usb/xen-usb.c
+++ b/hw/usb/xen-usb.c
@@ -1083,7 +1083,7 @@ static void usbback_event(struct XenLegacyDevice *xendev)
qemu_bh_schedule(usbif->bh);
}
-static struct XenDevOps xen_usb_ops = {
+static const struct XenDevOps xen_usb_ops = {
.size = sizeof(struct usbback_info),
.flags = DEVOPS_FLAG_NEED_GNTDEV,
.init = usbback_init,
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 26/32] hw/xen: Register framebuffer backend via xen_backend_init()
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (24 preceding siblings ...)
2024-06-04 9:56 ` [PULL 25/32] hw/xen: Make XenDevOps structures const Philippe Mathieu-Daudé
@ 2024-06-04 9:56 ` Philippe Mathieu-Daudé
2024-06-04 9:56 ` [PULL 27/32] hw/misc/debugexit: use runstate API instead of plain exit() Philippe Mathieu-Daudé
` (6 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:56 UTC (permalink / raw)
To: qemu-devel; +Cc: Philippe Mathieu-Daudé, Paul Durrant
Align the framebuffer backend with the other legacy ones,
register it via xen_backend_init() when '-vga xenfb' is
used. It is safe because MODULE_INIT_XEN_BACKEND is called
in xen_bus_realize(), long after CLI processing initialized
the vga_interface_type variable.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Paul Durrant <paul@xen.org>
Message-Id: <20240510104908.76908-8-philmd@linaro.org>
---
include/hw/xen/xen-legacy-backend.h | 3 ---
hw/display/xenfb.c | 9 +++++++--
hw/xenpv/xen_machine_pv.c | 2 --
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/include/hw/xen/xen-legacy-backend.h b/include/hw/xen/xen-legacy-backend.h
index e55a14057f..943732b8d1 100644
--- a/include/hw/xen/xen-legacy-backend.h
+++ b/include/hw/xen/xen-legacy-backend.h
@@ -66,9 +66,6 @@ static inline void xen_be_unmap_grant_ref(struct XenLegacyDevice *xendev,
return xen_be_unmap_grant_refs(xendev, ptr, &ref, 1);
}
-/* backend drivers not included in all machines */
-extern const struct XenDevOps xen_framebuffer_ops; /* xenfb.c */
-
/* configuration (aka xenbus setup) */
void xen_config_cleanup(void);
int xen_config_dev_vfb(int vdev, const char *type);
diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c
index b6d370bdf6..ff442ced1a 100644
--- a/hw/display/xenfb.c
+++ b/hw/display/xenfb.c
@@ -29,6 +29,7 @@
#include "ui/input.h"
#include "ui/console.h"
+#include "sysemu/sysemu.h"
#include "hw/xen/xen-legacy-backend.h"
#include "hw/xen/interface/io/fbif.h"
@@ -996,8 +997,12 @@ static const GraphicHwOps xenfb_ops = {
.ui_info = xenfb_ui_info,
};
-static void xen_vkbd_register_backend(void)
+static void xen_ui_register_backend(void)
{
xen_be_register("vkbd", &xen_kbdmouse_ops);
+
+ if (vga_interface_type == VGA_XENFB) {
+ xen_be_register("vfb", &xen_framebuffer_ops);
+ }
}
-xen_backend_init(xen_vkbd_register_backend);
+xen_backend_init(xen_ui_register_backend);
diff --git a/hw/xenpv/xen_machine_pv.c b/hw/xenpv/xen_machine_pv.c
index b500ce0989..24395f42cb 100644
--- a/hw/xenpv/xen_machine_pv.c
+++ b/hw/xenpv/xen_machine_pv.c
@@ -50,8 +50,6 @@ static void xen_init_pv(MachineState *machine)
break;
}
- xen_be_register("vfb", &xen_framebuffer_ops);
-
/* configure framebuffer */
if (vga_interface_type == VGA_XENFB) {
xen_config_dev_vfb(0, "vnc");
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 27/32] hw/misc/debugexit: use runstate API instead of plain exit()
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (25 preceding siblings ...)
2024-06-04 9:56 ` [PULL 26/32] hw/xen: Register framebuffer backend via xen_backend_init() Philippe Mathieu-Daudé
@ 2024-06-04 9:56 ` Philippe Mathieu-Daudé
2024-06-04 9:56 ` [PULL 28/32] hw/dma/xlnx_dpdma: Read descriptor into buffer, not into pointer-to-buffer Philippe Mathieu-Daudé
` (5 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:56 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Weißschuh, Philippe Mathieu-Daudé
From: Thomas Weißschuh <thomas@t-8ch.de>
Directly calling exit() prevents any kind of management or handling.
Instead use the corresponding runstate API.
The default behavior of the runstate API is the same as exit().
Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20240523-debugexit-v1-1-d52fcaf7bf8b@t-8ch.de>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/misc/debugexit.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/hw/misc/debugexit.c b/hw/misc/debugexit.c
index ab6de69ce7..c5c562fd93 100644
--- a/hw/misc/debugexit.c
+++ b/hw/misc/debugexit.c
@@ -12,6 +12,7 @@
#include "hw/qdev-properties.h"
#include "qemu/module.h"
#include "qom/object.h"
+#include "sysemu/runstate.h"
#define TYPE_ISA_DEBUG_EXIT_DEVICE "isa-debug-exit"
OBJECT_DECLARE_SIMPLE_TYPE(ISADebugExitState, ISA_DEBUG_EXIT_DEVICE)
@@ -32,7 +33,8 @@ static uint64_t debug_exit_read(void *opaque, hwaddr addr, unsigned size)
static void debug_exit_write(void *opaque, hwaddr addr, uint64_t val,
unsigned width)
{
- exit((val << 1) | 1);
+ qemu_system_shutdown_request_with_code(SHUTDOWN_CAUSE_GUEST_SHUTDOWN,
+ (val << 1) | 1);
}
static const MemoryRegionOps debug_exit_ops = {
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 28/32] hw/dma/xlnx_dpdma: Read descriptor into buffer, not into pointer-to-buffer
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (26 preceding siblings ...)
2024-06-04 9:56 ` [PULL 27/32] hw/misc/debugexit: use runstate API instead of plain exit() Philippe Mathieu-Daudé
@ 2024-06-04 9:56 ` Philippe Mathieu-Daudé
2024-06-04 9:56 ` [PULL 29/32] hw/acpi: Remove the deprecated QAPI MEM_UNPLUG_ERROR event Philippe Mathieu-Daudé
` (4 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:56 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Edgar E . Iglesias, Philippe Mathieu-Daudé
From: Peter Maydell <peter.maydell@linaro.org>
In fdf029762f501 we factored out the handling of reading and writing
DMA descriptors from guest memory. Unfortunately we accidentally
made the descriptor-read read the descriptor into the address of the
buffer rather than into the buffer, because we didn't notice we
needed to update the arguments to the dma_memory_read() call. Before
the refactoring, "&desc" is the address of a local struct DPDMADescriptor
variable in xlnx_dpdma_start_operation(), which is the correct target
for the guest-memory-read. But after the refactoring 'desc' is the
"DPDMADescriptor *desc" argument to the new function, and so it is
already an address.
This bug is an overrun of a stack variable, since a pointer is at
most 8 bytes long and we try to read 64 bytes, as well as being
incorrect behaviour.
Pass 'desc' rather than '&desc' as the dma_memory_read() argument
to fix this.
(The same bug is not present in xlnx_dpdma_write_descriptor(),
because there we are writing the descriptor from a local struct
variable "DPDMADescriptor tmp_desc" and so passing &tmp_desc to
dma_memory_write() is correct.)
Spotted by Coverity: CID 1546649
Fixes: fdf029762f50101 ("xlnx_dpdma: fix descriptor endianness bug")
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20240531124628.476938-1-peter.maydell@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/dma/xlnx_dpdma.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/dma/xlnx_dpdma.c b/hw/dma/xlnx_dpdma.c
index dde4aeca40..a685bd28bb 100644
--- a/hw/dma/xlnx_dpdma.c
+++ b/hw/dma/xlnx_dpdma.c
@@ -619,7 +619,7 @@ static MemTxResult xlnx_dpdma_read_descriptor(XlnxDPDMAState *s,
DPDMADescriptor *desc)
{
MemTxResult res = dma_memory_read(&address_space_memory, desc_addr,
- &desc, sizeof(DPDMADescriptor),
+ desc, sizeof(DPDMADescriptor),
MEMTXATTRS_UNSPECIFIED);
if (res) {
return res;
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 29/32] hw/acpi: Remove the deprecated QAPI MEM_UNPLUG_ERROR event
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (27 preceding siblings ...)
2024-06-04 9:56 ` [PULL 28/32] hw/dma/xlnx_dpdma: Read descriptor into buffer, not into pointer-to-buffer Philippe Mathieu-Daudé
@ 2024-06-04 9:56 ` Philippe Mathieu-Daudé
2024-06-04 9:56 ` [PULL 30/32] trace: Remove deprecated 'vcpu' field from QMP trace events Philippe Mathieu-Daudé
` (3 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:56 UTC (permalink / raw)
To: qemu-devel
Cc: Philippe Mathieu-Daudé, Harsh Prateek Bora,
Michael S . Tsirkin, Markus Armbruster
The MEM_UNPLUG_ERROR event is deprecated since commit d43f1670c7
("qapi/qdev.json: add DEVICE_UNPLUG_GUEST_ERROR QAPI event"),
time to remove it.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20240530071548.20074-2-philmd@linaro.org>
---
docs/about/deprecated.rst | 5 -----
docs/about/removed-features.rst | 9 +++++++++
qapi/machine.json | 28 ----------------------------
hw/acpi/memory_hotplug.c | 8 --------
hw/ppc/spapr.c | 11 +----------
5 files changed, 10 insertions(+), 51 deletions(-)
diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
index 40585ca7d5..4a61894db6 100644
--- a/docs/about/deprecated.rst
+++ b/docs/about/deprecated.rst
@@ -151,11 +151,6 @@ property types.
QEMU Machine Protocol (QMP) events
----------------------------------
-``MEM_UNPLUG_ERROR`` (since 6.2)
-''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-
-Use the more generic event ``DEVICE_UNPLUG_GUEST_ERROR`` instead.
-
``vcpu`` trace events (since 8.1)
'''''''''''''''''''''''''''''''''
diff --git a/docs/about/removed-features.rst b/docs/about/removed-features.rst
index fba0cfb0b0..f1e70263e2 100644
--- a/docs/about/removed-features.rst
+++ b/docs/about/removed-features.rst
@@ -671,6 +671,15 @@ Use ``multifd-channels`` instead.
Use ``multifd-compression`` instead.
+QEMU Machine Protocol (QMP) events
+----------------------------------
+
+``MEM_UNPLUG_ERROR`` (removed in 9.1)
+'''''''''''''''''''''''''''''''''''''
+
+MEM_UNPLUG_ERROR has been replaced by the more generic ``DEVICE_UNPLUG_GUEST_ERROR`` event.
+
+
Human Monitor Protocol (HMP) commands
-------------------------------------
diff --git a/qapi/machine.json b/qapi/machine.json
index bce6e1bbc4..453feb9347 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -1607,34 +1607,6 @@
{ 'event': 'MEMORY_DEVICE_SIZE_CHANGE',
'data': { '*id': 'str', 'size': 'size', 'qom-path' : 'str'} }
-##
-# @MEM_UNPLUG_ERROR:
-#
-# Emitted when memory hot unplug error occurs.
-#
-# @device: device name
-#
-# @msg: Informative message
-#
-# Features:
-#
-# @deprecated: This event is deprecated. Use
-# @DEVICE_UNPLUG_GUEST_ERROR instead.
-#
-# Since: 2.4
-#
-# Example:
-#
-# <- { "event": "MEM_UNPLUG_ERROR",
-# "data": { "device": "dimm1",
-# "msg": "acpi: device unplug for unsupported device"
-# },
-# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
-##
-{ 'event': 'MEM_UNPLUG_ERROR',
- 'data': { 'device': 'str', 'msg': 'str' },
- 'features': ['deprecated'] }
-
##
# @BootConfiguration:
#
diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c
index de6f974ebb..9b974b7274 100644
--- a/hw/acpi/memory_hotplug.c
+++ b/hw/acpi/memory_hotplug.c
@@ -178,14 +178,6 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
hotplug_handler_unplug(hotplug_ctrl, dev, &local_err);
if (local_err) {
trace_mhp_acpi_pc_dimm_delete_failed(mem_st->selector);
-
- /*
- * Send both MEM_UNPLUG_ERROR and DEVICE_UNPLUG_GUEST_ERROR
- * while the deprecation of MEM_UNPLUG_ERROR is
- * pending.
- */
- qapi_event_send_mem_unplug_error(dev->id ? : "",
- error_get_pretty(local_err));
qapi_event_send_device_unplug_guest_error(dev->id,
dev->canonical_path);
error_free(local_err);
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 4345764bce..81a187f126 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3786,7 +3786,6 @@ void spapr_memory_unplug_rollback(SpaprMachineState *spapr, DeviceState *dev)
SpaprDrc *drc;
uint32_t nr_lmbs;
uint64_t size, addr_start, addr;
- g_autofree char *qapi_error = NULL;
int i;
if (!dev) {
@@ -3823,16 +3822,8 @@ void spapr_memory_unplug_rollback(SpaprMachineState *spapr, DeviceState *dev)
/*
* Tell QAPI that something happened and the memory
- * hotunplug wasn't successful. Keep sending
- * MEM_UNPLUG_ERROR even while sending
- * DEVICE_UNPLUG_GUEST_ERROR until the deprecation of
- * MEM_UNPLUG_ERROR is due.
+ * hotunplug wasn't successful.
*/
- qapi_error = g_strdup_printf("Memory hotunplug rejected by the guest "
- "for device %s", dev->id);
-
- qapi_event_send_mem_unplug_error(dev->id ? : "", qapi_error);
-
qapi_event_send_device_unplug_guest_error(dev->id,
dev->canonical_path);
}
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 30/32] trace: Remove deprecated 'vcpu' field from QMP trace events
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (28 preceding siblings ...)
2024-06-04 9:56 ` [PULL 29/32] hw/acpi: Remove the deprecated QAPI MEM_UNPLUG_ERROR event Philippe Mathieu-Daudé
@ 2024-06-04 9:56 ` Philippe Mathieu-Daudé
2024-06-04 9:56 ` [PULL 31/32] qga: Remove deprecated 'blacklist' argument / config key Philippe Mathieu-Daudé
` (2 subsequent siblings)
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:56 UTC (permalink / raw)
To: qemu-devel
Cc: Philippe Mathieu-Daudé, Michael S . Tsirkin,
Markus Armbruster
'vcpu' fields are deprecated since commit 5485e52a33
("qapi: make the vcpu parameters deprecated for 8.1"),
time to remove them.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20240530071548.20074-3-philmd@linaro.org>
---
docs/about/deprecated.rst | 11 -----------
docs/about/removed-features.rst | 6 ++++++
qapi/trace.json | 27 +++------------------------
trace/qmp.c | 2 --
trace/trace-hmp-cmds.c | 4 ++--
5 files changed, 11 insertions(+), 39 deletions(-)
diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
index 4a61894db6..187c8a3f97 100644
--- a/docs/about/deprecated.rst
+++ b/docs/about/deprecated.rst
@@ -148,17 +148,6 @@ accepted incorrect commands will return an error. Users should make sure that
all arguments passed to ``device_add`` are consistent with the documented
property types.
-QEMU Machine Protocol (QMP) events
-----------------------------------
-
-``vcpu`` trace events (since 8.1)
-'''''''''''''''''''''''''''''''''
-
-The ability to instrument QEMU helper functions with vCPU-aware trace
-points was removed in 7.0. However QMP still exposed the vcpu
-parameter. This argument has now been deprecated and the remaining
-remaining trace points that used it are selected just by name.
-
Host Architectures
------------------
diff --git a/docs/about/removed-features.rst b/docs/about/removed-features.rst
index f1e70263e2..1e64c27cd8 100644
--- a/docs/about/removed-features.rst
+++ b/docs/about/removed-features.rst
@@ -679,6 +679,12 @@ QEMU Machine Protocol (QMP) events
MEM_UNPLUG_ERROR has been replaced by the more generic ``DEVICE_UNPLUG_GUEST_ERROR`` event.
+``vcpu`` trace events (removed in 9.1)
+''''''''''''''''''''''''''''''''''''''
+
+The ability to instrument QEMU helper functions with vCPU-aware trace
+points was removed in 7.0.
+
Human Monitor Protocol (HMP) commands
-------------------------------------
diff --git a/qapi/trace.json b/qapi/trace.json
index 043d12f83e..9ebb6d9eaf 100644
--- a/qapi/trace.json
+++ b/qapi/trace.json
@@ -35,17 +35,10 @@
#
# @state: Tracing state.
#
-# @vcpu: Whether this is a per-vCPU event (since 2.7).
-#
-# Features:
-#
-# @deprecated: Member @vcpu is deprecated, and always ignored.
-#
# Since: 2.2
##
{ 'struct': 'TraceEventInfo',
- 'data': {'name': 'str', 'state': 'TraceEventState',
- 'vcpu': { 'type': 'bool', 'features': ['deprecated'] } } }
+ 'data': {'name': 'str', 'state': 'TraceEventState' } }
##
# @trace-event-get-state:
@@ -54,12 +47,6 @@
#
# @name: Event name pattern (case-sensitive glob).
#
-# @vcpu: The vCPU to query (since 2.7).
-#
-# Features:
-#
-# @deprecated: Member @vcpu is deprecated, and always ignored.
-#
# Returns: a list of @TraceEventInfo for the matching events
#
# Since: 2.2
@@ -71,8 +58,7 @@
# <- { "return": [ { "name": "qemu_memalign", "state": "disabled", "vcpu": false } ] }
##
{ 'command': 'trace-event-get-state',
- 'data': {'name': 'str',
- '*vcpu': {'type': 'int', 'features': ['deprecated'] } },
+ 'data': {'name': 'str' },
'returns': ['TraceEventInfo'] }
##
@@ -86,12 +72,6 @@
#
# @ignore-unavailable: Do not match unavailable events with @name.
#
-# @vcpu: The vCPU to act upon (all by default; since 2.7).
-#
-# Features:
-#
-# @deprecated: Member @vcpu is deprecated, and always ignored.
-#
# Since: 2.2
#
# Example:
@@ -101,5 +81,4 @@
# <- { "return": {} }
##
{ 'command': 'trace-event-set-state',
- 'data': {'name': 'str', 'enable': 'bool', '*ignore-unavailable': 'bool',
- '*vcpu': {'type': 'int', 'features': ['deprecated'] } } }
+ 'data': {'name': 'str', 'enable': 'bool', '*ignore-unavailable': 'bool' } }
diff --git a/trace/qmp.c b/trace/qmp.c
index 3e3971c6a8..074a27b204 100644
--- a/trace/qmp.c
+++ b/trace/qmp.c
@@ -48,7 +48,6 @@ static bool check_events(bool ignore_unavailable, bool is_pattern,
}
TraceEventInfoList *qmp_trace_event_get_state(const char *name,
- bool has_vcpu, int64_t vcpu,
Error **errp)
{
TraceEventInfoList *events = NULL;
@@ -86,7 +85,6 @@ TraceEventInfoList *qmp_trace_event_get_state(const char *name,
void qmp_trace_event_set_state(const char *name, bool enable,
bool has_ignore_unavailable, bool ignore_unavailable,
- bool has_vcpu, int64_t vcpu,
Error **errp)
{
TraceEventIter iter;
diff --git a/trace/trace-hmp-cmds.c b/trace/trace-hmp-cmds.c
index 86211fce27..d38dd600de 100644
--- a/trace/trace-hmp-cmds.c
+++ b/trace/trace-hmp-cmds.c
@@ -40,7 +40,7 @@ void hmp_trace_event(Monitor *mon, const QDict *qdict)
Error *local_err = NULL;
qmp_trace_event_set_state(tp_name, new_state,
- true, true, false, 0, &local_err);
+ true, true, &local_err);
if (local_err) {
error_report_err(local_err);
}
@@ -82,7 +82,7 @@ void hmp_info_trace_events(Monitor *mon, const QDict *qdict)
name = "*";
}
- events = qmp_trace_event_get_state(name, false, 0, &local_err);
+ events = qmp_trace_event_get_state(name, &local_err);
if (local_err) {
error_report_err(local_err);
return;
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 31/32] qga: Remove deprecated 'blacklist' argument / config key
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (29 preceding siblings ...)
2024-06-04 9:56 ` [PULL 30/32] trace: Remove deprecated 'vcpu' field from QMP trace events Philippe Mathieu-Daudé
@ 2024-06-04 9:56 ` Philippe Mathieu-Daudé
2024-06-04 9:56 ` [PULL 32/32] usb: add config options for the hub and hid devices Philippe Mathieu-Daudé
2024-06-04 21:25 ` [PULL 00/32] Misc HW / accel patches Richard Henderson
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:56 UTC (permalink / raw)
To: qemu-devel; +Cc: Philippe Mathieu-Daudé, Konstantin Kostiuk
The 'blacklist' argument / config key are deprecated since commit
582a098e6c ("qga: Replace 'blacklist' command line and config file
options by 'block-rpcs'"), time to remove them.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com>
Message-Id: <20240530070413.19181-1-philmd@linaro.org>
---
docs/about/deprecated.rst | 18 ------------------
docs/about/removed-features.rst | 18 ++++++++++++++++++
qga/main.c | 6 ------
3 files changed, 18 insertions(+), 24 deletions(-)
diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
index 187c8a3f97..a6f4655a3a 100644
--- a/docs/about/deprecated.rst
+++ b/docs/about/deprecated.rst
@@ -462,24 +462,6 @@ versions, aliases will point to newer CPU model versions
depending on the machine type, so management software must
resolve CPU model aliases before starting a virtual machine.
-QEMU guest agent
-----------------
-
-``--blacklist`` command line option (since 7.2)
-'''''''''''''''''''''''''''''''''''''''''''''''
-
-``--blacklist`` has been replaced by ``--block-rpcs`` (which is a better
-wording for what this option does). The short form ``-b`` still stays
-the same and thus is the preferred way for scripts that should run with
-both, older and future versions of QEMU.
-
-``blacklist`` config file option (since 7.2)
-''''''''''''''''''''''''''''''''''''''''''''
-
-The ``blacklist`` config file option has been renamed to ``block-rpcs``
-(to be in sync with the renaming of the corresponding command line
-option).
-
Migration
---------
diff --git a/docs/about/removed-features.rst b/docs/about/removed-features.rst
index 1e64c27cd8..210a90bee8 100644
--- a/docs/about/removed-features.rst
+++ b/docs/about/removed-features.rst
@@ -1144,4 +1144,22 @@ stable for some time and is now widely used.
The command line and feature set is very close to the removed
C implementation.
+QEMU guest agent
+----------------
+
+``--blacklist`` command line option (removed in 9.1)
+''''''''''''''''''''''''''''''''''''''''''''''''''''
+
+``--blacklist`` has been replaced by ``--block-rpcs`` (which is a better
+wording for what this option does). The short form ``-b`` still stays
+the same and thus is the preferred way for scripts that should run with
+both, older and future versions of QEMU.
+
+``blacklist`` config file option (removed in 9.1)
+'''''''''''''''''''''''''''''''''''''''''''''''''
+
+The ``blacklist`` config file option has been renamed to ``block-rpcs``
+(to be in sync with the renaming of the corresponding command line
+option).
+
.. _Intel discontinuance notification: https://www.intel.com/content/www/us/en/content-details/781327/intel-is-discontinuing-ip-ordering-codes-listed-in-pdn2312-for-nios-ii-ip.html
diff --git a/qga/main.c b/qga/main.c
index bdf5344584..f4d5f15bb3 100644
--- a/qga/main.c
+++ b/qga/main.c
@@ -1071,11 +1071,6 @@ static void config_load(GAConfig *config)
g_key_file_get_boolean(keyfile, "general", "retry-path", &gerr);
}
- if (g_key_file_has_key(keyfile, "general", "blacklist", NULL)) {
- g_warning("config using deprecated 'blacklist' key, should be replaced"
- " with the 'block-rpcs' key.");
- blockrpcs_key = "blacklist";
- }
if (g_key_file_has_key(keyfile, "general", blockrpcs_key, NULL)) {
config->bliststr =
g_key_file_get_string(keyfile, "general", blockrpcs_key, &gerr);
@@ -1190,7 +1185,6 @@ static void config_parse(GAConfig *config, int argc, char **argv)
{ "path", 1, NULL, 'p' },
{ "daemonize", 0, NULL, 'd' },
{ "block-rpcs", 1, NULL, 'b' },
- { "blacklist", 1, NULL, 'b' }, /* deprecated alias for 'block-rpcs' */
{ "allow-rpcs", 1, NULL, 'a' },
#ifdef _WIN32
{ "service", 1, NULL, 's' },
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PULL 32/32] usb: add config options for the hub and hid devices
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (30 preceding siblings ...)
2024-06-04 9:56 ` [PULL 31/32] qga: Remove deprecated 'blacklist' argument / config key Philippe Mathieu-Daudé
@ 2024-06-04 9:56 ` Philippe Mathieu-Daudé
2024-06-04 21:25 ` [PULL 00/32] Misc HW / accel patches Richard Henderson
32 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-04 9:56 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Thomas Huth, Philippe Mathieu-Daudé
From: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20240530112718.1752905-3-kraxel@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/usb/Kconfig | 10 ++++++++++
hw/usb/meson.build | 4 ++--
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/hw/usb/Kconfig b/hw/usb/Kconfig
index f569ed7eea..84bc7fbe36 100644
--- a/hw/usb/Kconfig
+++ b/hw/usb/Kconfig
@@ -65,6 +65,16 @@ config TUSB6010
bool
select USB_MUSB
+config USB_HUB
+ bool
+ default y
+ depends on USB
+
+config USB_HID
+ bool
+ default y
+ depends on USB
+
config USB_TABLET_WACOM
bool
default y
diff --git a/hw/usb/meson.build b/hw/usb/meson.build
index 23f7f7acb5..d7de1003e3 100644
--- a/hw/usb/meson.build
+++ b/hw/usb/meson.build
@@ -35,8 +35,8 @@ system_ss.add(when: 'CONFIG_XLNX_VERSAL', if_true: files('xlnx-versal-usb2-ctrl-
system_ss.add(when: 'CONFIG_XLNX_USB_SUBSYS', if_true: files('xlnx-usb-subsystem.c'))
# emulated usb devices
-system_ss.add(when: 'CONFIG_USB', if_true: files('dev-hub.c'))
-system_ss.add(when: 'CONFIG_USB', if_true: files('dev-hid.c'))
+system_ss.add(when: 'CONFIG_USB_HUB', if_true: files('dev-hub.c'))
+system_ss.add(when: 'CONFIG_USB_HID', if_true: files('dev-hid.c'))
system_ss.add(when: 'CONFIG_USB_TABLET_WACOM', if_true: files('dev-wacom.c'))
system_ss.add(when: 'CONFIG_USB_STORAGE_CORE', if_true: files('dev-storage.c'))
system_ss.add(when: 'CONFIG_USB_STORAGE_BOT', if_true: files('dev-storage-bot.c'))
--
2.41.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [PULL 00/32] Misc HW / accel patches
2024-06-04 9:55 [PULL 00/32] Misc HW / accel patches Philippe Mathieu-Daudé
` (31 preceding siblings ...)
2024-06-04 9:56 ` [PULL 32/32] usb: add config options for the hub and hid devices Philippe Mathieu-Daudé
@ 2024-06-04 21:25 ` Richard Henderson
32 siblings, 0 replies; 34+ messages in thread
From: Richard Henderson @ 2024-06-04 21:25 UTC (permalink / raw)
To: qemu-devel
On 6/4/24 04:55, Philippe Mathieu-Daudé wrote:
> The following changes since commit 3ab42e46acf867c45bc929fcc37693e327a35a24:
>
> Merge tag 'pull-ufs-20240603' ofhttps://gitlab.com/jeuk20.kim/qemu into staging (2024-06-03 08:18:14 -0500)
>
> are available in the Git repository at:
>
> https://github.com/philmd/qemu.git tags/hw-misc-accel-20240604
>
> for you to fetch changes up to 7c2397643c1e025c157bab95088b3b480f0d98ae:
>
> usb: add config options for the hub and hid devices (2024-06-04 11:53:43 +0200)
>
> Following checkpatch.pl error ignored:
>
> ERROR: suspect code indent for conditional statements (7, 10)
> #95: FILE: disas/microblaze.c:718:
> if ( ((((instr & IMM_MASK) >> IMM_LOW) ^ op->immval_mask) & 0xE000) == REG_PVR_MASK) {
> + snprintf(tmpstr, sizeof(tmpstr), "%s%u", pvr_register_prefix,
>
> total: 1 errors, 0 warnings, 79 lines checked
>
> ----------------------------------------------------------------
> Misc HW & accelerators patch queue
>
> - Use async exit in debugexit model (Thomas)
> - Fixed bug reading xlnx_dpdma descriptor (Peter)
> - Initialise plugin state before vCPU/thread creation (Alex)
> - Few sprintf() calls removed (Richard & Philippe)
> - Few deprecated QMP events removed (Philippe)
> - Housekeeping in Xen (Edgar & Philippe)
> - Split USB HID/HUB & update MAINTAINERS (Gerd)
Applied, thanks. Please update https://wiki.qemu.org/ChangeLog/9.1 as appropriate.
r~
^ permalink raw reply [flat|nested] 34+ messages in thread