[Top][All Lists]

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

Re: [PATCH] spapr: prevent hdec timer being set up under virtual hypervi

From: Cédric Le Goater
Subject: Re: [PATCH] spapr: prevent hdec timer being set up under virtual hypervisor
Date: Mon, 14 Feb 2022 19:05:42 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.3.0

On 2/14/22 14:32, Fabiano Rosas wrote:
Nicholas Piggin <npiggin@gmail.com> writes:

The spapr virtual hypervisor does not require the hdecr timer.

Why is that? Is this not needed for an emulated powernv running KVM

It is now also running in the QEMU pseries machine (L0) when a
nested is running. That's part of the implementation Nick did for
the KVM-on-pseries-in-QEMU-TCG.

But isn't that redundant with the cpu_ppc_hdecr_init() and
cpu_ppc_hdecr_exit() from the RFC ? and shouldn't that be
created only once, when the first nested is started or when
the machine is if cap-nested-hv=on ?

Remove it.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
  hw/ppc/ppc.c            | 2 +-
  hw/ppc/spapr_cpu_core.c | 6 +++---
  2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c
index 462c87dba8..a7c262db93 100644
--- a/hw/ppc/ppc.c
+++ b/hw/ppc/ppc.c
@@ -1072,7 +1072,7 @@ clk_setup_cb cpu_ppc_tb_init (CPUPPCState *env, uint32_t 
      /* Create new timer */
      tb_env->decr_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, &cpu_ppc_decr_cb, 
-    if (env->has_hv_mode) {
+    if (env->has_hv_mode && !cpu->vhyp) {

hmm, Can we have (env->has_hv_mode && cpu->vhyp) ?  this is confusing :/



          tb_env->hdecr_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, 
      } else {
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index a781e97f8d..ed84713960 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -261,12 +261,12 @@ static bool spapr_realize_vcpu(PowerPCCPU *cpu, 
SpaprMachineState *spapr,
          return false;
- /* Set time-base frequency to 512 MHz */
-    cpu_ppc_tb_init(env, SPAPR_TIMEBASE_FREQ);
      cpu_ppc_set_vhyp(cpu, PPC_VIRTUAL_HYPERVISOR(spapr));
+ /* Set time-base frequency to 512 MHz. vhyp must be set first. */
+    cpu_ppc_tb_init(env, SPAPR_TIMEBASE_FREQ);
      if (spapr_irq_cpu_intc_create(spapr, cpu, errp) < 0) {
          return false;

reply via email to

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