lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAAhV-H4rFwX2rm-PtvfY_4FA7qoj9UBH9or0LN31n+zdFozimg@mail.gmail.com>
Date: Mon, 26 Feb 2024 20:58:43 +0800
From: Huacai Chen <chenhuacai@...nel.org>
To: Bibo Mao <maobibo@...ngson.cn>
Cc: Tianrui Zhao <zhaotianrui@...ngson.cn>, kvm@...r.kernel.org, loongarch@...ts.linux.dev, 
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/2] LoongArch: KVM: Start SW timer only when vcpu is blocking

Queued for loongarch-kvm, thanks.

Huacai

On Tue, Jan 30, 2024 at 3:22 PM Bibo Mao <maobibo@...ngson.cn> wrote:
>
> SW timer is enabled when vcpu thread is scheduled out, and it is
> to wake up vcpu from blocked queue. If vcpu thread is scheduled out
> however is not blocked, such as it is preempted by other threads,
> it is not necessary to enable SW timer. Since vcpu thread is still
> on running queue if preempted and SW timer is only to wake up vcpu
> on blocking queue, so SW timer is not useful in this situation.
>
> This patch enables SW timer only when vcpu is scheduled out and
> is blocking.
>
> Signed-off-by: Bibo Mao <maobibo@...ngson.cn>
> ---
>  arch/loongarch/kvm/timer.c | 22 ++++++++--------------
>  1 file changed, 8 insertions(+), 14 deletions(-)
>
> diff --git a/arch/loongarch/kvm/timer.c b/arch/loongarch/kvm/timer.c
> index 111328f60872..a9125f0a12d1 100644
> --- a/arch/loongarch/kvm/timer.c
> +++ b/arch/loongarch/kvm/timer.c
> @@ -93,7 +93,8 @@ void kvm_restore_timer(struct kvm_vcpu *vcpu)
>         /*
>          * Freeze the soft-timer and sync the guest stable timer with it.
>          */
> -       hrtimer_cancel(&vcpu->arch.swtimer);
> +       if (kvm_vcpu_is_blocking(vcpu))
> +               hrtimer_cancel(&vcpu->arch.swtimer);
>
>         /*
>          * From LoongArch Reference Manual Volume 1 Chapter 7.6.2
> @@ -168,26 +169,19 @@ static void _kvm_save_timer(struct kvm_vcpu *vcpu)
>          * Here judge one-shot timer fired by checking whether TVAL is larger
>          * than TCFG
>          */
> -       if (ticks < cfg) {
> +       if (ticks < cfg)
>                 delta = tick_to_ns(vcpu, ticks);
> -               expire = ktime_add_ns(ktime_get(), delta);
> -               vcpu->arch.expire = expire;
> +       else
> +               delta = 0;
> +       expire = ktime_add_ns(ktime_get(), delta);
> +       vcpu->arch.expire = expire;
> +       if (kvm_vcpu_is_blocking(vcpu)) {
>
>                 /*
>                  * HRTIMER_MODE_PINNED is suggested since vcpu may run in
>                  * the same physical cpu in next time
>                  */
>                 hrtimer_start(&vcpu->arch.swtimer, expire, HRTIMER_MODE_ABS_PINNED);
> -       } else if (vcpu->stat.generic.blocking) {
> -               /*
> -                * Inject timer interrupt so that halt polling can dectect and exit.
> -                * VCPU is scheduled out already and sleeps in rcuwait queue and
> -                * will not poll pending events again. kvm_queue_irq() is not enough,
> -                * hrtimer swtimer should be used here.
> -                */
> -               expire = ktime_add_ns(ktime_get(), 10);
> -               vcpu->arch.expire = expire;
> -               hrtimer_start(&vcpu->arch.swtimer, expire, HRTIMER_MODE_ABS_PINNED);
>         }
>  }
>
> --
> 2.39.3
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ