qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v4 16/23] target/riscv: call plugin trap callbacks


From: Alistair Francis
Subject: Re: [PATCH v4 16/23] target/riscv: call plugin trap callbacks
Date: Tue, 13 May 2025 08:50:23 +1000

On Sun, May 11, 2025 at 11:18 PM Julian Ganz <neither@nut.email> wrote:
>
> We recently introduced API for registering callbacks for trap related
> events as well as the corresponding hook functions. Due to differences
> between architectures, the latter need to be called from target specific
> code.
>
> This change places hooks for RISC-V targets.
>
> Signed-off-by: Julian Ganz <neither@nut.email>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  target/riscv/cpu_helper.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
> index d5039f69a9..dce7e34cba 100644
> --- a/target/riscv/cpu_helper.c
> +++ b/target/riscv/cpu_helper.c
> @@ -36,6 +36,7 @@
>  #include "cpu_bits.h"
>  #include "debug.h"
>  #include "pmp.h"
> +#include "qemu/plugin.h"
>
>  int riscv_env_mmu_index(CPURISCVState *env, bool ifetch)
>  {
> @@ -2173,6 +2174,7 @@ void riscv_cpu_do_interrupt(CPUState *cs)
>      uint64_t hdeleg = async ? env->hideleg : env->hedeleg;
>      const bool prev_virt = env->virt_enabled;
>      const target_ulong prev_priv = env->priv;
> +    uint64_t last_pc = env->pc;
>      target_ulong tval = 0;
>      target_ulong tinst = 0;
>      target_ulong htval = 0;
> @@ -2195,6 +2197,7 @@ void riscv_cpu_do_interrupt(CPUState *cs)
>          case RISCV_EXCP_SEMIHOST:
>              do_common_semihosting(cs);
>              env->pc += 4;
> +            qemu_plugin_vcpu_hostcall_cb(cs, last_pc);
>              return;
>  #endif
>          case RISCV_EXCP_LOAD_GUEST_ACCESS_FAULT:
> @@ -2464,6 +2467,12 @@ void riscv_cpu_do_interrupt(CPUState *cs)
>                          prev_priv, prev_virt);
>      }
>
> +    if (async) {
> +        qemu_plugin_vcpu_interrupt_cb(cs, last_pc);
> +    } else {
> +        qemu_plugin_vcpu_exception_cb(cs, last_pc);
> +    }
> +
>      /*
>       * Interrupt/exception/trap delivery is asynchronous event and as per
>       * zicfilp spec CPU should clear up the ELP state. No harm in clearing
> --
> 2.49.0
>
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]