Re: [PATCH 2/2] LoongArch: KVM: Do not restart SW timer when it is expired

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

 



The code itself looks good to me, but could you please tell me what
does "LoongArch guest has separate hw timer" mean?

Huacai

On Tue, Jan 30, 2024 at 3:22 PM Bibo Mao <maobibo@xxxxxxxxxxx> wrote:
>
> LoongArch guest has separate hw timer, SW timer is to wake up
> blocked vcpu thread, rather than HW timer emulation. When blocking
> vcpu schedules out, SW timer is used to wakeup blocked vcpu thread
> and injects timer interrupt. It does not care about whether guest
> timer is in period mode or oneshot mode, and SW timer needs not be
> restarted since vcpu has been woken.
>
> This patch does not restart sw timer when it is expired.
>
> Signed-off-by: Bibo Mao <maobibo@xxxxxxxxxxx>
> ---
>  arch/loongarch/kvm/timer.c | 20 +-------------------
>  1 file changed, 1 insertion(+), 19 deletions(-)
>
> diff --git a/arch/loongarch/kvm/timer.c b/arch/loongarch/kvm/timer.c
> index a9125f0a12d1..d3282f01d4d9 100644
> --- a/arch/loongarch/kvm/timer.c
> +++ b/arch/loongarch/kvm/timer.c
> @@ -23,24 +23,6 @@ static inline u64 tick_to_ns(struct kvm_vcpu *vcpu, u64 tick)
>         return div_u64(tick * MNSEC_PER_SEC, vcpu->arch.timer_mhz);
>  }
>
> -/*
> - * Push timer forward on timeout.
> - * Handle an hrtimer event by push the hrtimer forward a period.
> - */
> -static enum hrtimer_restart kvm_count_timeout(struct kvm_vcpu *vcpu)
> -{
> -       unsigned long cfg, period;
> -
> -       /* Add periodic tick to current expire time */
> -       cfg = kvm_read_sw_gcsr(vcpu->arch.csr, LOONGARCH_CSR_TCFG);
> -       if (cfg & CSR_TCFG_PERIOD) {
> -               period = tick_to_ns(vcpu, cfg & CSR_TCFG_VAL);
> -               hrtimer_add_expires_ns(&vcpu->arch.swtimer, period);
> -               return HRTIMER_RESTART;
> -       } else
> -               return HRTIMER_NORESTART;
> -}
> -
>  /* Low level hrtimer wake routine */
>  enum hrtimer_restart kvm_swtimer_wakeup(struct hrtimer *timer)
>  {
> @@ -50,7 +32,7 @@ enum hrtimer_restart kvm_swtimer_wakeup(struct hrtimer *timer)
>         kvm_queue_irq(vcpu, INT_TI);
>         rcuwait_wake_up(&vcpu->wait);
>
> -       return kvm_count_timeout(vcpu);
> +       return HRTIMER_NORESTART;
>  }
>
>  /*
> --
> 2.39.3
>





[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux