From patchwork Mon Aug 5 02:03:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 11075955 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 46FF11510 for ; Mon, 5 Aug 2019 02:04:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3210E28712 for ; Mon, 5 Aug 2019 02:04:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 25E0F2872E; Mon, 5 Aug 2019 02:04:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 581AC28712 for ; Mon, 5 Aug 2019 02:04:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726877AbfHECDe (ORCPT ); Sun, 4 Aug 2019 22:03:34 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:45301 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726561AbfHECDd (ORCPT ); Sun, 4 Aug 2019 22:03:33 -0400 Received: by mail-pf1-f195.google.com with SMTP id r1so38758706pfq.12; Sun, 04 Aug 2019 19:03:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=jiBgil2/CkGQonyAGH+YMpxsvKYd1DL9LetvX2PzPhw=; b=Sri3eDfc55rI/wpwxTRkj+wYpuXeNOp1RNaGXWAtZwYN2OSDgwA1vmavxFv5ksAwrI 4dQtipdp0Dcnh06Hnoq53v+zCyNVgRa44voGibej/Jbefpn29PqGcMjqezq0O2DGe1X1 A15jqQvx/GpcghTEiftmrQlt3jrqN74mEPBJ3nokf9EKm049NisKhPuv+KGC6q32cyQM PdAowMOLod1qYJ27TLW/+qjNNNoanboDzG+JbneWMBDHLG+rI+618ftP4Fq1gDwuwLKG pO+fwW775gdlwvyGZ3SyWlqobd5CyJtZYfB9EUJojPwr2byWtz7/ZKgOX8f0CoPlBpLm 5BdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=jiBgil2/CkGQonyAGH+YMpxsvKYd1DL9LetvX2PzPhw=; b=DFG1J+PX7Pid4tvWwdE6isRkAIJRA0A+822Q+FCVtqOSsWFMs0RaBQS8DvhkhIDP1L bNMF7XyNrkqFJHORRR68cHTtuQOLmHriAG+KrfrWnhla1x6vxB+/j9s0e3G81Lya0std uySFe5F9PeZ0Ijd0l7bvYVez1K9SJOYcLM5OvejqUflKYCvDTyIy5erJvwuWTQfRmVvr laQ4ctV8dl4LhzFJZ6CDPEbSinh0W1Bc91o/ZV45qQ9yyFc4W9NrJnMLCS1HxiqCaByy 3If/u24ggKZjGdoelhyLpjzeOgugNVAUzllBUAPNxl/uFPTtGIaMfq8maNlunu7fn0CX p8PA== X-Gm-Message-State: APjAAAWMXU/to7V3gIEv+K/EbBxgAnrAGHfjwChwwFjgfH8rz8wxgRqv cyWMAKB5KSTso8PTlLLglwicO4U7 X-Google-Smtp-Source: APXvYqxxWug8Or45Qneeg9wv6QTz/aQQLe+0S9HWR44eyK+PFyFo45D8eoqR4rVD1eovdUsqTgjF6w== X-Received: by 2002:a63:7709:: with SMTP id s9mr18114256pgc.296.1564970612644; Sun, 04 Aug 2019 19:03:32 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id o32sm14739365pje.9.2019.08.04.19.03.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 04 Aug 2019 19:03:32 -0700 (PDT) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= , Christian Borntraeger , Marc Zyngier , stable@vger.kernel.org Subject: [PATCH v4 1/6] KVM: Fix leak vCPU's VMCS value into other pCPU Date: Mon, 5 Aug 2019 10:03:19 +0800 Message-Id: <1564970604-10044-1-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Wanpeng Li After commit d73eb57b80b (KVM: Boost vCPUs that are delivering interrupts), a five years old bug is exposed. Running ebizzy benchmark in three 80 vCPUs VMs on one 80 pCPUs Skylake server, a lot of rcu_sched stall warning splatting in the VMs after stress testing: INFO: rcu_sched detected stalls on CPUs/tasks: { 4 41 57 62 77} (detected by 15, t=60004 jiffies, g=899, c=898, q=15073) Call Trace: flush_tlb_mm_range+0x68/0x140 tlb_flush_mmu.part.75+0x37/0xe0 tlb_finish_mmu+0x55/0x60 zap_page_range+0x142/0x190 SyS_madvise+0x3cd/0x9c0 system_call_fastpath+0x1c/0x21 swait_active() sustains to be true before finish_swait() is called in kvm_vcpu_block(), voluntarily preempted vCPUs are taken into account by kvm_vcpu_on_spin() loop greatly increases the probability condition kvm_arch_vcpu_runnable(vcpu) is checked and can be true, when APICv is enabled the yield-candidate vCPU's VMCS RVI field leaks(by vmx_sync_pir_to_irr()) into spinning-on-a-taken-lock vCPU's current VMCS. This patch fixes it by checking conservatively a subset of events. Cc: Paolo Bonzini Cc: Radim Krčmář Cc: Christian Borntraeger Cc: Marc Zyngier Cc: stable@vger.kernel.org Fixes: 98f4a1467 (KVM: add kvm_arch_vcpu_runnable() test to kvm_vcpu_on_spin() loop) Signed-off-by: Wanpeng Li --- v3 -> v4: * just test KVM_REQ_* * rename the hook to apicv_has_pending_interrupt * wrap with #ifdef CONFIG_KVM_ASYNC_PF v2 -> v3: * check conservatively a subset of events v1 -> v2: * checking swait_active(&vcpu->wq) for involuntary preemption arch/mips/kvm/mips.c | 5 +++++ arch/powerpc/kvm/powerpc.c | 5 +++++ arch/s390/kvm/kvm-s390.c | 5 +++++ arch/x86/include/asm/kvm_host.h | 1 + arch/x86/kvm/svm.c | 6 ++++++ arch/x86/kvm/vmx/vmx.c | 6 ++++++ arch/x86/kvm/x86.c | 16 ++++++++++++++++ include/linux/kvm_host.h | 1 + virt/kvm/arm/arm.c | 5 +++++ virt/kvm/kvm_main.c | 16 +++++++++++++++- 10 files changed, 65 insertions(+), 1 deletion(-) diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c index 2cfe839..95a4642 100644 --- a/arch/mips/kvm/mips.c +++ b/arch/mips/kvm/mips.c @@ -98,6 +98,11 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) return !!(vcpu->arch.pending_exceptions); } +bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu) +{ + return kvm_arch_vcpu_runnable(vcpu); +} + bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu) { return false; diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index 0dba7eb..3e34d5f 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c @@ -50,6 +50,11 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *v) return !!(v->arch.pending_exceptions) || kvm_request_pending(v); } +bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu) +{ + return kvm_arch_vcpu_runnable(vcpu); +} + bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu) { return false; diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 3f520cd8..5623b23 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -3102,6 +3102,11 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) return kvm_s390_vcpu_has_irq(vcpu, 0); } +bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu) +{ + return kvm_arch_vcpu_runnable(vcpu); +} + bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu) { return !(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE); diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 7b0a4ee..25ffa7c 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1175,6 +1175,7 @@ struct kvm_x86_ops { int (*update_pi_irte)(struct kvm *kvm, unsigned int host_irq, uint32_t guest_irq, bool set); void (*apicv_post_state_restore)(struct kvm_vcpu *vcpu); + bool (*apicv_has_pending_interrupt)(struct kvm_vcpu *vcpu); int (*set_hv_timer)(struct kvm_vcpu *vcpu, u64 guest_deadline_tsc, bool *expired); diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 7eafc69..1b4384f 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -5190,6 +5190,11 @@ static void svm_deliver_avic_intr(struct kvm_vcpu *vcpu, int vec) kvm_vcpu_wake_up(vcpu); } +static bool svm_apicv_has_pending_interrupt(struct kvm_vcpu *vcpu) +{ + return false; +} + static void svm_ir_list_del(struct vcpu_svm *svm, struct amd_iommu_pi_data *pi) { unsigned long flags; @@ -7314,6 +7319,7 @@ static struct kvm_x86_ops svm_x86_ops __ro_after_init = { .pmu_ops = &amd_pmu_ops, .deliver_posted_interrupt = svm_deliver_avic_intr, + .apicv_has_pending_interrupt = svm_apicv_has_pending_interrupt, .update_pi_irte = svm_update_pi_irte, .setup_mce = svm_setup_mce, diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 074385c..59871b6 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -6117,6 +6117,11 @@ static int vmx_sync_pir_to_irr(struct kvm_vcpu *vcpu) return max_irr; } +static bool vmx_apicv_has_pending_interrupt(struct kvm_vcpu *vcpu) +{ + return pi_test_on(vcpu_to_pi_desc(vcpu)); +} + static void vmx_load_eoi_exitmap(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap) { if (!kvm_vcpu_apicv_active(vcpu)) @@ -7726,6 +7731,7 @@ static struct kvm_x86_ops vmx_x86_ops __ro_after_init = { .guest_apic_has_interrupt = vmx_guest_apic_has_interrupt, .sync_pir_to_irr = vmx_sync_pir_to_irr, .deliver_posted_interrupt = vmx_deliver_posted_interrupt, + .apicv_has_pending_interrupt = vmx_apicv_has_pending_interrupt, .set_tss_addr = vmx_set_tss_addr, .set_identity_map_addr = vmx_set_identity_map_addr, diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index c6d951c..f715efb 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -9698,6 +9698,22 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) return kvm_vcpu_running(vcpu) || kvm_vcpu_has_events(vcpu); } +bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu) +{ + if (READ_ONCE(vcpu->arch.pv.pv_unhalted)) + return true; + + if (kvm_test_request(KVM_REQ_NMI, vcpu) || + kvm_test_request(KVM_REQ_SMI, vcpu) || + kvm_test_request(KVM_REQ_EVENT, vcpu)) + return true; + + if (vcpu->arch.apicv_active && kvm_x86_ops->apicv_has_pending_interrupt(vcpu)) + return true; + + return false; +} + bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu) { return vcpu->arch.preempted_in_kernel; diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 5c5b586..9e4c2bb 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -872,6 +872,7 @@ int kvm_arch_check_processor_compat(void); int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu); int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu); +bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu); #ifndef __KVM_HAVE_ARCH_VM_ALLOC /* diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c index acc4324..2927895 100644 --- a/virt/kvm/arm/arm.c +++ b/virt/kvm/arm/arm.c @@ -444,6 +444,11 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *v) && !v->arch.power_off && !v->arch.pause); } +bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu) +{ + return kvm_arch_vcpu_runnable(vcpu); +} + bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu) { return vcpu_mode_priv(vcpu); diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 887f3b0..e121423 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2477,6 +2477,20 @@ static bool kvm_vcpu_eligible_for_directed_yield(struct kvm_vcpu *vcpu) #endif } +static bool vcpu_runnable(struct kvm_vcpu *vcpu) +{ + /* It is called outside vcpu_load/vcpu_put */ + if (kvm_arch_dy_runnable(vcpu)) + return true; + +#ifdef CONFIG_KVM_ASYNC_PF + if (!list_empty_careful(&vcpu->async_pf.done)) + return true; +#endif + + return false; +} + void kvm_vcpu_on_spin(struct kvm_vcpu *me, bool yield_to_kernel_mode) { struct kvm *kvm = me->kvm; @@ -2506,7 +2520,7 @@ void kvm_vcpu_on_spin(struct kvm_vcpu *me, bool yield_to_kernel_mode) continue; if (vcpu == me) continue; - if (swait_active(&vcpu->wq) && !kvm_arch_vcpu_runnable(vcpu)) + if (swait_active(&vcpu->wq) && !vcpu_runnable(vcpu)) continue; if (yield_to_kernel_mode && !kvm_arch_vcpu_in_kernel(vcpu)) continue; From patchwork Mon Aug 5 02:03:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 11075945 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CC855112C for ; Mon, 5 Aug 2019 02:03:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AF2C028712 for ; Mon, 5 Aug 2019 02:03:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A329A28756; Mon, 5 Aug 2019 02:03:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 382D228712 for ; Mon, 5 Aug 2019 02:03:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727002AbfHECDg (ORCPT ); Sun, 4 Aug 2019 22:03:36 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:45303 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726561AbfHECDf (ORCPT ); Sun, 4 Aug 2019 22:03:35 -0400 Received: by mail-pf1-f196.google.com with SMTP id r1so38758746pfq.12; Sun, 04 Aug 2019 19:03:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Jyl7Q+fNfa4JowIqcItEgbQqxdMDKkuTAtedoCYt2UY=; b=FvtLpj1sIKat6dYZDCdBvSFKvcXW3Uzr84PPtyV93kaWXBpfrl0mFg4f1neMu+P9Em I4fQvEcqTuyi0x86KFVggzspCC7VOzaD0TIOapteN+A+KR6LwI5y+l9cLxR4n4Rc09a9 I7vvBsLWOkbECEO2/Vwc+tAZGVv8EPoajf/CHljXF9KY5DSY6o78B1rorXDplCOTV4+L 2fZYeRVqqrhdRT3bap2WHJRAr6i29xQAYKyBS5/O315xGBd/3v6TrUT/Qh32TldsY96q K+7fVqzqxtHppK8rPWIjeZG0Swen6j9v06MbEiRkj2L5FzrbR5ITOQ3fneyvn6XS6c5r 6NCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Jyl7Q+fNfa4JowIqcItEgbQqxdMDKkuTAtedoCYt2UY=; b=RuUwGksfrIDE68rzrzgiiTBlhW0OL3vxWSkt3ZY9GyjhQ/4OFzMiuZynYMcAPY5DGG JVeOTyddu540vN54mjgKuShgIOreBbtuyeSt6s/SRmz7aT3Q2RUm9eKDdrLvPOA+0nVY LAj6NHD09cKZOKjtNETZg4u9P+RD6Glu0dQqOUOCB0OCSfAJKPqhvm5B2X+SyVym983t 5WB7WUQfpTo4oA0LfyaBOBLzYDQiSaZlasH69fYrNDxEOKQh+9loTPEbaSt0HQGiZhGY yjXQQxWIR+9kd+WR720lFsADgRxWXnJnPmZ/9kYTuIjuURxUbtU7dYtPNBKpV3GvWJ8w xFUQ== X-Gm-Message-State: APjAAAXjKAAF2selOS+6WTznxwnoI560Fsi0su4fg5pm/fk0t8Obafrv 7VsJofvnHk/jLDMSA5ElAejXguip X-Google-Smtp-Source: APXvYqwRqJB+jqVWCZuUvoalycZom+qF1VmCfkrl4I+LHUC3Ms2Glw+z/ecn2x+sAYTkrXOs8cxrUQ== X-Received: by 2002:a63:e54f:: with SMTP id z15mr133763407pgj.4.1564970614483; Sun, 04 Aug 2019 19:03:34 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id o32sm14739365pje.9.2019.08.04.19.03.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 04 Aug 2019 19:03:34 -0700 (PDT) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= Subject: [PATCH v4 2/6] KVM: LAPIC: Don't need to wakeup vCPU twice afer timer fire Date: Mon, 5 Aug 2019 10:03:20 +0800 Message-Id: <1564970604-10044-2-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1564970604-10044-1-git-send-email-wanpengli@tencent.com> References: <1564970604-10044-1-git-send-email-wanpengli@tencent.com> MIME-Version: 1.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Wanpeng Li kvm_set_pending_timer() will take care to wake up the sleeping vCPU which has pending timer, don't need to check this in apic_timer_expired() again. Cc: Paolo Bonzini Cc: Radim Krčmář Signed-off-by: Wanpeng Li --- arch/x86/kvm/lapic.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index 0aa1586..685d17c 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -1548,7 +1548,6 @@ static void kvm_apic_inject_pending_timer_irqs(struct kvm_lapic *apic) static void apic_timer_expired(struct kvm_lapic *apic) { struct kvm_vcpu *vcpu = apic->vcpu; - struct swait_queue_head *q = &vcpu->wq; struct kvm_timer *ktimer = &apic->lapic_timer; if (atomic_read(&apic->lapic_timer.pending)) @@ -1566,13 +1565,6 @@ static void apic_timer_expired(struct kvm_lapic *apic) atomic_inc(&apic->lapic_timer.pending); kvm_set_pending_timer(vcpu); - - /* - * For x86, the atomic_inc() is serialized, thus - * using swait_active() is safe. - */ - if (swait_active(q)) - swake_up_one(q); } static void start_sw_tscdeadline(struct kvm_lapic *apic) From patchwork Mon Aug 5 02:03:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 11075947 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2A1AB1709 for ; Mon, 5 Aug 2019 02:03:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 153FE286F3 for ; Mon, 5 Aug 2019 02:03:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 08F1228756; Mon, 5 Aug 2019 02:03:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AA816286F3 for ; Mon, 5 Aug 2019 02:03:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727043AbfHECDi (ORCPT ); Sun, 4 Aug 2019 22:03:38 -0400 Received: from mail-pg1-f193.google.com ([209.85.215.193]:45417 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727023AbfHECDh (ORCPT ); Sun, 4 Aug 2019 22:03:37 -0400 Received: by mail-pg1-f193.google.com with SMTP id o13so38824266pgp.12; Sun, 04 Aug 2019 19:03:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8vRU7XOXMncH2HX3CBvpyWbhKeVRVshARm7btXYP42w=; b=JRkjiLqhPiQzvIKEiCqljsdkL9L0PLKJGD0M8FGiSEQyGD+ayKEZ1oT7QXiCZFYHee 11YGuCpYCC6khFTJMikwh8WVdxpDp8RPH3UCmQX5RNukpM62vOyZS/JlrSYBauHjkbI4 ThhsMYl3X2EeTzmjEVV1jbSEz/RGq1kvDR3IcbnbmhmzBYr4MlWfX8lMILYtL3urNZ6v 5T0IEg7vk3JVIckFDPvX1DR1i/ngxbrIKITnakd7yN0ctRDNZ/UXgiUaTgqQ0KemY0sI s/UgfztHXULBduVkloiO3K0ih2YFU/b8D8hrcWR9ZJdxdJJedNKudUKhkzSth7mLDLAF 4QQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8vRU7XOXMncH2HX3CBvpyWbhKeVRVshARm7btXYP42w=; b=HYDXeY2IQHdkPCvCHQcws5ySpKdRohTsC3DPcYLtRo5rowoli++bH/73sK2kh49sTJ YUkEF6vxo6iePoaY28acGQNeGKY3ebBunqYIuz3ymaZC9O2pgKmQ12q31VD6zytnkL28 USmMPIWRDYXBxwTL1NV32j8rfwzGJ0iIcadjsjQZZCRNUmy2vvCgnIPTQHpMuhbwOF3p s4Dha3frmoNjR0fY/0H+y2dG5PQlTb0KM5G64n93hsTlaZJoSJ1Q9NZNZMf3aZgyanHU HHyC0cjycK/oHV2Ap5sMcsrxK/GWEKLvYRCVQmPlOMUcgQTN5rmfBHlR4cYDc571Qtf2 9mTg== X-Gm-Message-State: APjAAAUfsGrTn663v1ZHPfCpT4BzDCiN2//AW7kOM6W7iWa/RtZEfJtV ac/KrV60dOdTrMPIIPSe8vavHbc9 X-Google-Smtp-Source: APXvYqysH9UkVdeV7dX871CfGOlNrU5gaJfRp3C10inbQrUR5nPcAsJ8RE+ytIeCd/Eih61gHq03dQ== X-Received: by 2002:a17:90a:2ec1:: with SMTP id h1mr15787587pjs.119.1564970616325; Sun, 04 Aug 2019 19:03:36 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id o32sm14739365pje.9.2019.08.04.19.03.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 04 Aug 2019 19:03:35 -0700 (PDT) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= Subject: [PATCH v4 3/6] KVM: Check preempted_in_kernel for involuntary preemption Date: Mon, 5 Aug 2019 10:03:21 +0800 Message-Id: <1564970604-10044-3-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1564970604-10044-1-git-send-email-wanpengli@tencent.com> References: <1564970604-10044-1-git-send-email-wanpengli@tencent.com> MIME-Version: 1.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Wanpeng Li preempted_in_kernel is updated in preempt_notifier when involuntary preemption ocurrs, it can be stale when the voluntarily preempted vCPUs are taken into account by kvm_vcpu_on_spin() loop. This patch lets it just check preempted_in_kernel for involuntary preemption. Cc: Paolo Bonzini Cc: Radim Krčmář Signed-off-by: Wanpeng Li --- virt/kvm/kvm_main.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index e121423..2ae9e84 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2522,7 +2522,8 @@ void kvm_vcpu_on_spin(struct kvm_vcpu *me, bool yield_to_kernel_mode) continue; if (swait_active(&vcpu->wq) && !vcpu_runnable(vcpu)) continue; - if (yield_to_kernel_mode && !kvm_arch_vcpu_in_kernel(vcpu)) + if (READ_ONCE(vcpu->preempted) && yield_to_kernel_mode && + !kvm_arch_vcpu_in_kernel(vcpu)) continue; if (!kvm_vcpu_eligible_for_directed_yield(vcpu)) continue; @@ -4219,7 +4220,7 @@ static void kvm_sched_in(struct preempt_notifier *pn, int cpu) { struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn); - vcpu->preempted = false; + WRITE_ONCE(vcpu->preempted, false); WRITE_ONCE(vcpu->ready, false); kvm_arch_sched_in(vcpu, cpu); @@ -4233,7 +4234,7 @@ static void kvm_sched_out(struct preempt_notifier *pn, struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn); if (current->state == TASK_RUNNING) { - vcpu->preempted = true; + WRITE_ONCE(vcpu->preempted, true); WRITE_ONCE(vcpu->ready, true); } kvm_arch_vcpu_put(vcpu); From patchwork Mon Aug 5 02:03:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 11075951 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8E9E1112C for ; Mon, 5 Aug 2019 02:03:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7C085286F3 for ; Mon, 5 Aug 2019 02:03:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7026B28716; Mon, 5 Aug 2019 02:03:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 01744286F3 for ; Mon, 5 Aug 2019 02:03:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727086AbfHECDl (ORCPT ); Sun, 4 Aug 2019 22:03:41 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:36553 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727060AbfHECDj (ORCPT ); Sun, 4 Aug 2019 22:03:39 -0400 Received: by mail-pg1-f195.google.com with SMTP id l21so38836418pgm.3; Sun, 04 Aug 2019 19:03:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jGqqJdoFPgJRfsp1veHs6du8u1sFJO+Ydm26xk5LIKY=; b=Xk3DeOF+Q2VofPljRLhC6CCEq1+BN2Mk/wjSANITZuaSY20WOH+WPYkQJWFOObpmrO bpsnSXk5JcWYIMKSZC2plULWQtsCTYiGvkD/4az2GR4uOhj0wd+LstHF/ClEosGMCQPw lb1kb55OEJFNG7Eh9E644AfDvu3Lto1ZK89D2tyjouFjQguZnjRVFxaBrn4tnKUJyiNx Sr16EnS0eruQ0YO6gVBpfXjKsr/7r+/AemBkoYTu1EOHOJsFnCWSlOF9ccss3HE3Ak0b M/G5jQ3JvY9h9Xvc+Vmv0dd0UutHogKn/F7x5BHeHE0+hlLlUyh7+Qx2NVfiUnXByZz6 r06A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jGqqJdoFPgJRfsp1veHs6du8u1sFJO+Ydm26xk5LIKY=; b=JQrOjVgR8lKghFumUgt4rYXMU9FkypsIIZyYPMB0rfMNXh/0QLoMmQ5ccRUdTc0Zgv jybZvCeDtqT1hCtsaTv6vIgevVPe8V6HyUv535eE80Skav+VMVYMjgSzXtVMk+kh2Kik hgcgC40UBIbBOdv7igcukcn+oZWpX8bdz/C/f/Be+6jm+Sv6pMwJragSZm4y5c3VeMFf ve7upF2w6w8ZPWP0eSVA5yd32E+llzNuPgz4NIIP/A7NM+abMtytqsjsE+VpC5sApnxw F7TrWFb3pTLqit4QcYc+Cb4qk4/qTSu3ZqPVFSMVLc6tlb/AAQElIhuPFlvJRp9Wrw4i SHkw== X-Gm-Message-State: APjAAAXfX6o3Z1maRTzjnGUIjBh2kMH/GOAIm3Fcszdz/2laKVlSTDjU gMWMJ+rXcpL4/tatoxyfrL+8Pp2L X-Google-Smtp-Source: APXvYqz+Q9PM/X7k6L6D+IfKYndmCPEBeDNfA4xoBsr4C1ljccCsECgjdtNKyzuq869gnzWJhdzYzw== X-Received: by 2002:a63:2a08:: with SMTP id q8mr102013732pgq.415.1564970618660; Sun, 04 Aug 2019 19:03:38 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id o32sm14739365pje.9.2019.08.04.19.03.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 04 Aug 2019 19:03:38 -0700 (PDT) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= , Thomas Gleixner , Sean Christopherson , Nadav Amit Subject: [PATCH v4 4/6] KVM: X86: Use IPI shorthands in kvm guest when support Date: Mon, 5 Aug 2019 10:03:22 +0800 Message-Id: <1564970604-10044-4-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1564970604-10044-1-git-send-email-wanpengli@tencent.com> References: <1564970604-10044-1-git-send-email-wanpengli@tencent.com> MIME-Version: 1.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Wanpeng Li IPI shorthand is supported now by linux apic/x2apic driver, switch to IPI shorthand for all excluding self and all including self destination shorthand in kvm guest, to avoid splitting the target mask into several PV IPI hypercalls. This patch removes the kvm_send_ipi_all() and kvm_send_ipi_allbutself() since the callers in APIC codes have already taken care of apic_use_ipi_shorthand and fallback to ->send_IPI_mask and ->send_IPI_mask_allbutself if it is false. Cc: Thomas Gleixner Cc: Paolo Bonzini Cc: Radim Krčmář Cc: Sean Christopherson Cc: Nadav Amit Signed-off-by: Wanpeng Li --- Note: rebase against tip tree's x86/apic branch, but just modify kvm codes v1 -> v2: * remove kvm_send_ipi_all() and kvm_send_ipi_allbutself() arch/x86/kernel/kvm.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index b7f34fe..96626d8 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -505,16 +505,6 @@ static void kvm_send_ipi_mask_allbutself(const struct cpumask *mask, int vector) __send_ipi_mask(local_mask, vector); } -static void kvm_send_ipi_allbutself(int vector) -{ - kvm_send_ipi_mask_allbutself(cpu_online_mask, vector); -} - -static void kvm_send_ipi_all(int vector) -{ - __send_ipi_mask(cpu_online_mask, vector); -} - /* * Set the IPI entry points */ @@ -522,8 +512,6 @@ static void kvm_setup_pv_ipi(void) { apic->send_IPI_mask = kvm_send_ipi_mask; apic->send_IPI_mask_allbutself = kvm_send_ipi_mask_allbutself; - apic->send_IPI_allbutself = kvm_send_ipi_allbutself; - apic->send_IPI_all = kvm_send_ipi_all; pr_info("KVM setup pv IPIs\n"); } From patchwork Mon Aug 5 02:03:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 11075953 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1A496112C for ; Mon, 5 Aug 2019 02:03:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 07547286F3 for ; Mon, 5 Aug 2019 02:03:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EF84128716; Mon, 5 Aug 2019 02:03:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9B024286F3 for ; Mon, 5 Aug 2019 02:03:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727129AbfHECDu (ORCPT ); Sun, 4 Aug 2019 22:03:50 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:40398 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727082AbfHECDl (ORCPT ); Sun, 4 Aug 2019 22:03:41 -0400 Received: by mail-pf1-f195.google.com with SMTP id p184so38765839pfp.7; Sun, 04 Aug 2019 19:03:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tRG59/5lE82m1QRtQTpYyWmXnnIcRnkPvf94Bgtr6Rs=; b=q9mkPyPceELpn2nS45fd46f3dkwHuqerVMaCCDQW9O7ZH/uJcjqgXNwUzHpEPO+fkV bhmqeoFDPFXWFV6GCKMOonq5lalU8ZX8371rKLqI8mf4AnJd/klM8/C6hx2qxoqZrsdi PaJyeiqaJ4a35dHkOri7RlJ0enZQfn0EG6QxmnHMv8FLtl7QojEjVj8oCt7dRcA6whay IttSV6Ui/sXbt3uXRuGl+5hibYOHTLWKXVVG6TNpPzrU0obWgS3MObkwqMIeD79n5QCs vkjgtxsl6zShlvKSAEm70dD4GU/gIMhpMBToTEbhuGNVegwWv5/sty+QGTrUaj1vIh+s 2VKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tRG59/5lE82m1QRtQTpYyWmXnnIcRnkPvf94Bgtr6Rs=; b=nUxOwjVBHFucdJZNouf/lHw8kIZiodoFumF0oGGn72L1zhEJUUsqrWGKga/BUfBTQL HM4IBrrT6Z009oQjfP1JH6OOQdiXALHzi2b4YvNmj43OC7wO/H6FC7Adzrzf0gyi5Kz5 N2F8Y2N0na+xdEux86gb1TcbSpJhS0jLJftGXoSP0s0/QN9Fsf5pHfJaU3YnKJfeTY+A QrLgry8aJZZtKXtUPkzp2sQDOKnQ7LRYkZj8DalcEdbpwFdp6Gp7mE0X6/H9zDxWzLYJ cszVti1EAtxQq1p56dbSx6X3ZVHkHL4e4ZMMR79O7A5NnONAedbh/4MUoatGuS02IHnx zgkA== X-Gm-Message-State: APjAAAXX0+Of+grKcA2viLXwQMW+2+ASF14Ucsr5PuLk3hJ7pXvf3NnE PmddhFfutuswBVSCiLHEi5yJiGxn X-Google-Smtp-Source: APXvYqwx+O2T3Y/610fDmG08ETEs/T5eFALd0i8ye3h0Jacluk6ChqZA8qzKZcGWSykIkqQbUTCC7A== X-Received: by 2002:a63:ec13:: with SMTP id j19mr52731786pgh.369.1564970620508; Sun, 04 Aug 2019 19:03:40 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id o32sm14739365pje.9.2019.08.04.19.03.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 04 Aug 2019 19:03:40 -0700 (PDT) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= Subject: [PATCH v4 5/6] KVM: LAPIC: Add pv ipi tracepoint Date: Mon, 5 Aug 2019 10:03:23 +0800 Message-Id: <1564970604-10044-5-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1564970604-10044-1-git-send-email-wanpengli@tencent.com> References: <1564970604-10044-1-git-send-email-wanpengli@tencent.com> MIME-Version: 1.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Wanpeng Li Add pv ipi tracepoint. Cc: Paolo Bonzini Cc: Radim Krčmář Signed-off-by: Wanpeng Li --- arch/x86/kvm/lapic.c | 2 ++ arch/x86/kvm/trace.h | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index 685d17c..df5cd07 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -570,6 +570,8 @@ int kvm_pv_send_ipi(struct kvm *kvm, unsigned long ipi_bitmap_low, irq.level = (icr & APIC_INT_ASSERT) != 0; irq.trig_mode = icr & APIC_INT_LEVELTRIG; + trace_kvm_pv_send_ipi(irq.vector, min, ipi_bitmap_low, ipi_bitmap_high); + if (icr & APIC_DEST_MASK) return -KVM_EINVAL; if (icr & APIC_SHORT_MASK) diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h index b5c831e..ce6ee34 100644 --- a/arch/x86/kvm/trace.h +++ b/arch/x86/kvm/trace.h @@ -1462,6 +1462,31 @@ TRACE_EVENT(kvm_hv_send_ipi_ex, __entry->vector, __entry->format, __entry->valid_bank_mask) ); + +/* + * Tracepoints for kvm_pv_send_ipi. + */ +TRACE_EVENT(kvm_pv_send_ipi, + TP_PROTO(u32 vector, u32 min, unsigned long ipi_bitmap_low, unsigned long ipi_bitmap_high), + TP_ARGS(vector, min, ipi_bitmap_low, ipi_bitmap_high), + + TP_STRUCT__entry( + __field(u32, vector) + __field(u32, min) + __field(unsigned long, ipi_bitmap_low) + __field(unsigned long, ipi_bitmap_high) + ), + + TP_fast_assign( + __entry->vector = vector; + __entry->min = min; + __entry->ipi_bitmap_low = ipi_bitmap_low; + __entry->ipi_bitmap_high = ipi_bitmap_high; + ), + + TP_printk("vector %d min 0x%x ipi_bitmap_low 0x%lx ipi_bitmap_high 0x%lx", + __entry->vector, __entry->min, __entry->ipi_bitmap_low, __entry->ipi_bitmap_high) +); #endif /* _TRACE_KVM_H */ #undef TRACE_INCLUDE_PATH From patchwork Mon Aug 5 02:03:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 11075949 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E7B1B112C for ; Mon, 5 Aug 2019 02:03:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D533328712 for ; Mon, 5 Aug 2019 02:03:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C7F3D286F3; Mon, 5 Aug 2019 02:03:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6D4AE286F3 for ; Mon, 5 Aug 2019 02:03:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727103AbfHECDo (ORCPT ); Sun, 4 Aug 2019 22:03:44 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:34867 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727060AbfHECDn (ORCPT ); Sun, 4 Aug 2019 22:03:43 -0400 Received: by mail-pf1-f196.google.com with SMTP id u14so38787927pfn.2; Sun, 04 Aug 2019 19:03:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Hoi2qggJgGKlBqGJ2GtCroDIXuqb12/f4X0se5rdkzk=; b=ELHAEb/c0g8ciUTihz8zTEwp7BEgCe6Jif2phFQXVHydHHkUp6z2DGYbVMY7bemulb rnTGgy7Ar/5FVw914qquuOyhNx9fCROm7Jy4SEsXiXKJRKnNTlXuFA/XbCCl5A7eraEq StDL+CWkOO7lougYGUsxOZnqNLLzOn/Y+xAGtnPZGraqpPbLSbNHMO8sBWtsdzlLL9SN pt5ghjiaitwO50Qf54t4MVv7QbsicNW715PVgRgbBwwDNrVinqhN7drKclxKMvLlNKJ8 yy6KcDRYTH9r1lNJEdI3DoxJ1SBEi05CE2l0mI8G3JizdLzYk9Vb4AvJhqeklPJomkSF vzKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Hoi2qggJgGKlBqGJ2GtCroDIXuqb12/f4X0se5rdkzk=; b=JSpCIUh0It6XIEVLZvz0+kCQQiG2Ot1Vg2ah/ZeXR7/IbN2JTFi4gVctjy/l+3pQ0M ARloOEkcJ4lHq2lIY7cH0rWjHUvIFVprP1cI8J8wZyk7oROjEJef423/Q++RlmKRuldQ LbWGucgctoLf4p6Kh/lr8uIJT4hCPpKFRU8izhG+mKyQO81FiVsnpqh6Gl+ZZf9lspwC dqZoSDbE/tOAtDF4Dciz0Dp9DkFvEHaul1Ux/7QriGEYbr5Uub+Ok7b38OFZAPJEUvEz Qve7aLfrYWkr/RBynv8jB/6MVRYwlHg0+hn0EDHpkUKFd/fQjRSDlR3vbB1keql6kTUV 3y6Q== X-Gm-Message-State: APjAAAWbgUUiQ/98XWoLg2rw6B+ohRnPqZDd5Hp6knu2qazNhgLkFTmI evDiPmT2lX2+ge8Xk46G9+OmEQE4 X-Google-Smtp-Source: APXvYqxDROGQMciy3kn6lTsD8uj9Zufwk/bjW0IymlSN9rRmy6jNJFEGGM9u/GGNAL9RHc/G5O70Wg== X-Received: by 2002:a62:82c1:: with SMTP id w184mr72018868pfd.8.1564970622332; Sun, 04 Aug 2019 19:03:42 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id o32sm14739365pje.9.2019.08.04.19.03.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 04 Aug 2019 19:03:41 -0700 (PDT) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , =?utf-8?b?UmFkaW0gS3LEjW3DocWZ?= Subject: [PATCH v4 6/6] KVM: X86: Add pv tlb shootdown tracepoint Date: Mon, 5 Aug 2019 10:03:24 +0800 Message-Id: <1564970604-10044-6-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1564970604-10044-1-git-send-email-wanpengli@tencent.com> References: <1564970604-10044-1-git-send-email-wanpengli@tencent.com> MIME-Version: 1.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Wanpeng Li Add pv tlb shootdown tracepoint. Cc: Paolo Bonzini Cc: Radim Krčmář Signed-off-by: Wanpeng Li --- arch/x86/kvm/trace.h | 19 +++++++++++++++++++ arch/x86/kvm/x86.c | 2 ++ 2 files changed, 21 insertions(+) diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h index ce6ee34..84f32d3 100644 --- a/arch/x86/kvm/trace.h +++ b/arch/x86/kvm/trace.h @@ -1487,6 +1487,25 @@ TRACE_EVENT(kvm_pv_send_ipi, TP_printk("vector %d min 0x%x ipi_bitmap_low 0x%lx ipi_bitmap_high 0x%lx", __entry->vector, __entry->min, __entry->ipi_bitmap_low, __entry->ipi_bitmap_high) ); + +TRACE_EVENT(kvm_pv_tlb_flush, + TP_PROTO(unsigned int vcpu_id, bool need_flush_tlb), + TP_ARGS(vcpu_id, need_flush_tlb), + + TP_STRUCT__entry( + __field( unsigned int, vcpu_id ) + __field( bool, need_flush_tlb ) + ), + + TP_fast_assign( + __entry->vcpu_id = vcpu_id; + __entry->need_flush_tlb = need_flush_tlb; + ), + + TP_printk("vcpu %u need_flush_tlb %s", __entry->vcpu_id, + __entry->need_flush_tlb ? "true" : "false") +); + #endif /* _TRACE_KVM_H */ #undef TRACE_INCLUDE_PATH diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index f715efb..7a302cd 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -2452,6 +2452,8 @@ static void record_steal_time(struct kvm_vcpu *vcpu) * Doing a TLB flush here, on the guest's behalf, can avoid * expensive IPIs. */ + trace_kvm_pv_tlb_flush(vcpu->vcpu_id, + vcpu->arch.st.steal.preempted & KVM_VCPU_FLUSH_TLB); if (xchg(&vcpu->arch.st.steal.preempted, 0) & KVM_VCPU_FLUSH_TLB) kvm_vcpu_flush_tlb(vcpu, false);