Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp3947116ybz; Tue, 28 Apr 2020 03:08:36 -0700 (PDT) X-Google-Smtp-Source: APiQypJPMDawDpvbF97jCFEcrLf6s42dGm8lTZtH4oHOtv5dd5/Fim4VG8P8SK2xbWG/NR2DNryd X-Received: by 2002:a17:906:1d13:: with SMTP id n19mr1925982ejh.287.1588068516232; Tue, 28 Apr 2020 03:08:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588068516; cv=none; d=google.com; s=arc-20160816; b=kCKIL3aDMCh5yXUaByELGj2ehsf9ovT0OUuXtYGsd3QCeEq8FQ120+LaWHdSTuVdKi /xWbAUDMD4ppqCktG19ZVYoZVI5V95oEChiBfH2ANAJsE4soUrlaOlvaw1o6dYkBn4+k yA06oedTmNYvkqgoigSwuru2mRHd3KTODIofqwJlr25P9VJtM/gf0PvFVaoB1xTZI68I O2pI2WU7GxziCZjmGU9OG01fBthKSpSSzCnuUdFZiFWYelmd8nxTCNVaeevezYDaLMiW gAnCJvBwp5f+G2DjygTrWxDzG/i0VEyBWcYfobpCdz3LNZKGfaFasmJ8E0WDU7N/3c5Q EUyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=c+huRrl4EMmwLtCydWHPHBwimIQQrSdcPSmlbyOi6ak=; b=EOxOyG1zKrwjIriao2sF/CFUh4V9hvZkuAhZ0tPKoxL+IU6nPvWw/5qzas7ZuMFaVS e7undVPbQxpXFZkGKcPMNDhEj67z0OzvdGrrra7kreleMBFCyCm+Q+k+gLFxuc1iyO7c ZKphUEdxYKULbqQmp4nvgy+BjvscMx4O0CWR2V0QzbSiciEY19b/4UQM+EsC1b+6TjBs rZEqYRJVysVnc7VDyhBF1+pqr5lkUA98R24ahuWf0lDqGDG0eFygW7G3UnD2y4ml6+G4 QiUQJfuCkWdY61jBFtOxkkESy11AB53WUhsg9gfrL7S/9l9w2zZgIUX+VaT/Hua/FHqP fk3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=ZXQcasNb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id jz6si1562513ejb.327.2020.04.28.03.08.12; Tue, 28 Apr 2020 03:08:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=ZXQcasNb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727917AbgD1KFt (ORCPT + 99 others); Tue, 28 Apr 2020 06:05:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49144 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1727820AbgD1KFs (ORCPT ); Tue, 28 Apr 2020 06:05:48 -0400 Received: from mail-ot1-x344.google.com (mail-ot1-x344.google.com [IPv6:2607:f8b0:4864:20::344]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 511E5C03C1AC; Tue, 28 Apr 2020 03:05:48 -0700 (PDT) Received: by mail-ot1-x344.google.com with SMTP id 72so31654171otu.1; Tue, 28 Apr 2020 03:05:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=c+huRrl4EMmwLtCydWHPHBwimIQQrSdcPSmlbyOi6ak=; b=ZXQcasNbkucSaQmXTrTSqX7pZUJO2euHRVM05NZzm5TApUC2RLi8uiPoeIXyaeakg8 L6s31m697YGtYuo/2tuzhQkt/Hsy+AUjb3rLu2rA2YL9iaQdgRGY1ARTmpQzgheJxVnE HQNWIkhgPajVwvSY9z8CelokxtaWqOuE1qSh8YZJPRyZpIMxiZBOATTvk3UAbwlSuS5W ZlyX+NpB4hN6Y/BZE5qqAAFDLA4OdVFtwAC+PUqFzLBItCIEvDcdfjXhJI/iNXjDuNXE qdnmr8vMnZbJWcm17PQsuhSwhQK9dGIFV696cp8pZJhMh/ImQAJlIebRToOXiZaAa84c DbIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=c+huRrl4EMmwLtCydWHPHBwimIQQrSdcPSmlbyOi6ak=; b=Cr2xU40lhFKrmfJD0zLp60qiCoJsq2ZquVSVnmOdvf8BA2ZIYQB9YqUcjm473D5KYP 5IiUjz58cJnqXc56OlRuANwX7SuR6SBPwMyongl/9gTCEGlKVCyK8Vbfkxbld6uD06No 5sMy8Y6CMhZwMoypdASyWzSfzR/5/V6KA0RohSEIZCuExBP1dyeLCEeBo5xEk3LBSsRz KvgjaASVK/pDShfdQnhpHTk8EqJqL11si95STgwHd3vXjr9LX0UF0xMQMEDUVEJsTIyV FD4kjyKvZ/MgtDStosAs5AjVIBPqBbvn3uSdhNMxqTUFpDW6iCsm66+24U8k4keJ1S4p yacA== X-Gm-Message-State: AGi0PuaN3pDhZZbHChzbKbbkFiTKUgJmdoN8QvaIIRVXX4uI0NpKff1D QGdU2hEkPvKJBQ2KAj4cK0B/iRf2SHvCSc9fGzg= X-Received: by 2002:a9d:810:: with SMTP id 16mr21332951oty.56.1588068347645; Tue, 28 Apr 2020 03:05:47 -0700 (PDT) MIME-Version: 1.0 References: <1588055009-12677-1-git-send-email-wanpengli@tencent.com> <1588055009-12677-7-git-send-email-wanpengli@tencent.com> <15150824.2a36.171c0394538.Coremail.linxl3@wangsu.com> In-Reply-To: <15150824.2a36.171c0394538.Coremail.linxl3@wangsu.com> From: Wanpeng Li Date: Tue, 28 Apr 2020 18:05:37 +0800 Message-ID: Subject: Re: [PATCH v4 6/7] KVM: X86: TSCDEADLINE MSR emulation fastpath To: =?UTF-8?B?5p6X6ZGr6b6Z?= Cc: LKML , kvm , Paolo Bonzini , Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , Haiwei Li Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 28 Apr 2020 at 17:59, =E6=9E=97=E9=91=AB=E9=BE=99 wrote: > > On Tuesday, 28 Apr 2020 at 14:23, Wanpeng Li wrote: > > > > From: Wanpeng Li > > > > This patch implements tscdealine msr emulation fastpath, after wrmsr > > tscdeadline vmexit, handle it as soon as possible and vmentry immedi= ately > > without checking various kvm stuff when possible. > > > > Tested-by: Haiwei Li > > Cc: Haiwei Li > > Signed-off-by: Wanpeng Li > > --- > > arch/x86/kvm/lapic.c | 18 ++++++++++++------ > > arch/x86/kvm/vmx/vmx.c | 12 ++++++++---- > > arch/x86/kvm/x86.c | 30 ++++++++++++++++++++++++------ > > 3 files changed, 44 insertions(+), 16 deletions(-) > > > > diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c > > index 38f7dc9..3589237 100644 > > --- a/arch/x86/kvm/lapic.c > > +++ b/arch/x86/kvm/lapic.c > > @@ -1593,7 +1593,7 @@ static void kvm_apic_inject_pending_timer_irqs= (struct kvm_lapic *apic) > > } > > } > > > > -static void apic_timer_expired(struct kvm_lapic *apic) > > +static void apic_timer_expired(struct kvm_lapic *apic, bool from_ti= mer_fn) > > { > > struct kvm_vcpu *vcpu =3D apic->vcpu; > > struct kvm_timer *ktimer =3D &apic->lapic_timer; > > @@ -1604,6 +1604,12 @@ static void apic_timer_expired(struct kvm_lap= ic *apic) > > if (apic_lvtt_tscdeadline(apic) || ktimer->hv_timer_in_use) > > ktimer->expired_tscdeadline =3D ktimer->tscdeadline= ; > > > > + if (!from_timer_fn && vcpu->arch.apicv_active) { > > + WARN_ON(kvm_get_running_vcpu() !=3D vcpu); > > + kvm_apic_inject_pending_timer_irqs(apic); > > + return; > > + } > > + > > if (kvm_use_posted_timer_interrupt(apic->vcpu)) { > > if (apic->lapic_timer.timer_advance_ns) > > __kvm_wait_lapic_expire(vcpu); > > @@ -1643,7 +1649,7 @@ static void start_sw_tscdeadline(struct kvm_la= pic *apic) > > expire =3D ktime_sub_ns(expire, ktimer->timer_advance_= ns); > > hrtimer_start(&ktimer->timer, expire, HRTIMER_MODE= _ABS_HARD); > > } else > > - apic_timer_expired(apic); > > + apic_timer_expired(apic, false); > > > > local_irq_restore(flags); > > } > > @@ -1751,7 +1757,7 @@ static void start_sw_period(struct kvm_lapic *= apic) > > > > if (ktime_after(ktime_get(), > > apic->lapic_timer.target_expiration)) { > > - apic_timer_expired(apic); > > + apic_timer_expired(apic, false); > > > > if (apic_lvtt_oneshot(apic)) > > return; > > @@ -1813,7 +1819,7 @@ static bool start_hv_timer(struct kvm_lapic *a= pic) > > if (atomic_read(&ktimer->pending)) { > > cancel_hv_timer(apic); > > } else if (expired) { > > - apic_timer_expired(apic); > > + apic_timer_expired(apic, false); > > cancel_hv_timer(apic); > > } > > } > > @@ -1863,7 +1869,7 @@ void kvm_lapic_expired_hv_timer(struct kvm_vcp= u *vcpu) > > goto out; > > WARN_ON(swait_active(&vcpu->wq)); > > cancel_hv_timer(apic); > > - apic_timer_expired(apic); > > + apic_timer_expired(apic, false); > > > > if (apic_lvtt_period(apic) && apic->lapic_timer.period= ) { > > advance_periodic_target_expiration(apic); > > @@ -2369,7 +2375,7 @@ static enum hrtimer_restart apic_timer_fn(stru= ct hrtimer *data) > > struct kvm_timer *ktimer =3D container_of(data, struct kvm_timer,= timer); > > struct kvm_lapic *apic =3D container_of(ktimer, struct kvm_lapic,= lapic_timer); > > > > - apic_timer_expired(apic); > > + apic_timer_expired(apic, true); > > > > if (lapic_is_periodic(apic)) { > > advance_periodic_target_expiration(apic); > > diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c > > index ce19b0e..bb5c4f1 100644 > > --- a/arch/x86/kvm/vmx/vmx.c > > +++ b/arch/x86/kvm/vmx/vmx.c > > @@ -5994,7 +5994,8 @@ static int vmx_handle_exit(struct kvm_vcpu *vc= pu, fastpath_t exit_fastpath) > > if (exit_fastpath =3D=3D EXIT_FASTPATH_SKIP_EMUL_INS) { > > kvm_skip_emulated_instruction(vcpu); > Can we move this kvm_skip_emulated_instruction to handle_fastpath_set_msr= _irqoff? This will keep the style consistent. It can have other users sooner or later. Wanpeng