From patchwork Tue May 28 07:56:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 10964063 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 2FBA8112C for ; Tue, 28 May 2019 07:56:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 252E520000 for ; Tue, 28 May 2019 07:56:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1967120602; Tue, 28 May 2019 07:56:59 +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 9DA1A20000 for ; Tue, 28 May 2019 07:56:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727668AbfE1H4n (ORCPT ); Tue, 28 May 2019 03:56:43 -0400 Received: from mail-pl1-f196.google.com ([209.85.214.196]:41791 "EHLO mail-pl1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726203AbfE1H4m (ORCPT ); Tue, 28 May 2019 03:56:42 -0400 Received: by mail-pl1-f196.google.com with SMTP id d14so2462198pls.8; Tue, 28 May 2019 00:56: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=vBM+WK9qA4pZcm6B2byvLBaRkxAGft4URtktgvLLdCc=; b=JInhJusXdNRvizlS/hd37l6Y16ynpVF/UvQlbgOYXpoOiZkgJm/wRnL2qrDn8EMKM+ w8wHMRCIYB5wcP+TjSlYyY/UdS5dRgDZU7emHMetVEA/YfY9YaNY8teQlgAXalQeE6fI wWWaawdEypFe6D/l8Ll/cjLYtdTo1Sfwlo6KQzKLwzgjpUzdqFoKFc1LWNnw3pg9ZxDY 3iaWzXGNfjnCFT6wHR7TW87wqUCjLWrI/VWb4wlhp0gpUFCFD9ctpFfWstDNJHBRelwG JfVDhzmktKRc3q1EcsekGCHIv5cmMJgjCbZ88S04bmeNR60upHoDL9e/9h+Dmn7uaLF7 1RCQ== 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=vBM+WK9qA4pZcm6B2byvLBaRkxAGft4URtktgvLLdCc=; b=c6VGecJInmbHX9xLFoX1sJIPCKP7Ze/BbDrMm6XqlYSsCEdkpQ7vyuxjh9acboYYaH qhcLBvVKxEaIz7IKcmbV3bCILPXnCetrDTmmQTTv6napG+6QDDiskWwaTUcDE0e86Vrw Vo1WCTVqV614jGHtSpEmNVrQAXnRIveo3/rZvaQnnR5RxI5As+S+lskbJT3fucnavFje 9zVDfuKFrgotkaMqTEAm/D70NSa3WaLLiTvgdZb4qXoas8fB27PW1PyHxc1m95L2nMad 6dQyIXSIBSmihzbJeXPLAqY6JikcJ9vmlEUa31ichREnhnqpXo+TRCtABeL2Ha41o9XA a/YA== X-Gm-Message-State: APjAAAX6lJoY9P2LRFyxeVc/3xZVbQtozeg+bszAJo47rO4IX88exXUb VWNTaRGoAD4OOsbzP0vfwO5GFRuh X-Google-Smtp-Source: APXvYqwi/vF2Ts9P6G8kddMC+iQp2de0ohNy54gkaCgABmwnCvZDpikniLBMGKeim87zMuth7Y+HcA== X-Received: by 2002:a17:902:d706:: with SMTP id w6mr16088826ply.261.1559030201859; Tue, 28 May 2019 00:56:41 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id t64sm2906920pjb.0.2019.05.28.00.56.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 28 May 2019 00:56: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 RESEND v2 1/3] KVM: X86: Implement PV sched yield in linux guest Date: Tue, 28 May 2019 15:56:33 +0800 Message-Id: <1559030195-2872-2-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1559030195-2872-1-git-send-email-wanpengli@tencent.com> References: <1559030195-2872-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 When sending a call-function IPI-many to vCPUs, yield if any of the IPI target vCPUs was preempted, we just select the first preempted target vCPU which we found since the state of target vCPUs can change underneath and to avoid race conditions. Cc: Paolo Bonzini Cc: Radim Krčmář Signed-off-by: Wanpeng Li --- Documentation/virtual/kvm/hypercalls.txt | 11 +++++++++++ arch/x86/include/uapi/asm/kvm_para.h | 1 + arch/x86/kernel/kvm.c | 21 +++++++++++++++++++++ include/uapi/linux/kvm_para.h | 1 + 4 files changed, 34 insertions(+) diff --git a/Documentation/virtual/kvm/hypercalls.txt b/Documentation/virtual/kvm/hypercalls.txt index da24c13..da21065 100644 --- a/Documentation/virtual/kvm/hypercalls.txt +++ b/Documentation/virtual/kvm/hypercalls.txt @@ -141,3 +141,14 @@ a0 corresponds to the APIC ID in the third argument (a2), bit 1 corresponds to the APIC ID a2+1, and so on. Returns the number of CPUs to which the IPIs were delivered successfully. + +7. KVM_HC_SCHED_YIELD +------------------------ +Architecture: x86 +Status: active +Purpose: Hypercall used to yield if the IPI target vCPU is preempted + +a0: destination APIC ID + +Usage example: When sending a call-function IPI-many to vCPUs, yield if +any of the IPI target vCPUs was preempted. diff --git a/arch/x86/include/uapi/asm/kvm_para.h b/arch/x86/include/uapi/asm/kvm_para.h index 19980ec..d0bf77c 100644 --- a/arch/x86/include/uapi/asm/kvm_para.h +++ b/arch/x86/include/uapi/asm/kvm_para.h @@ -29,6 +29,7 @@ #define KVM_FEATURE_PV_TLB_FLUSH 9 #define KVM_FEATURE_ASYNC_PF_VMEXIT 10 #define KVM_FEATURE_PV_SEND_IPI 11 +#define KVM_FEATURE_PV_SCHED_YIELD 12 #define KVM_HINTS_REALTIME 0 diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 3f0cc82..54400c2 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -540,6 +540,21 @@ static void kvm_setup_pv_ipi(void) pr_info("KVM setup pv IPIs\n"); } +static void kvm_smp_send_call_func_ipi(const struct cpumask *mask) +{ + int cpu; + + native_send_call_func_ipi(mask); + + /* Make sure other vCPUs get a chance to run if they need to. */ + for_each_cpu(cpu, mask) { + if (vcpu_is_preempted(cpu)) { + kvm_hypercall1(KVM_HC_SCHED_YIELD, per_cpu(x86_cpu_to_apicid, cpu)); + break; + } + } +} + static void __init kvm_smp_prepare_cpus(unsigned int max_cpus) { native_smp_prepare_cpus(max_cpus); @@ -651,6 +666,12 @@ static void __init kvm_guest_init(void) #ifdef CONFIG_SMP smp_ops.smp_prepare_cpus = kvm_smp_prepare_cpus; smp_ops.smp_prepare_boot_cpu = kvm_smp_prepare_boot_cpu; + if (kvm_para_has_feature(KVM_FEATURE_PV_SCHED_YIELD) && + !kvm_para_has_hint(KVM_HINTS_REALTIME) && + kvm_para_has_feature(KVM_FEATURE_STEAL_TIME)) { + smp_ops.send_call_func_ipi = kvm_smp_send_call_func_ipi; + pr_info("KVM setup pv sched yield\n"); + } if (cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN, "x86/kvm:online", kvm_cpu_online, kvm_cpu_down_prepare) < 0) pr_err("kvm_guest: Failed to install cpu hotplug callbacks\n"); diff --git a/include/uapi/linux/kvm_para.h b/include/uapi/linux/kvm_para.h index 6c0ce49..8b86609 100644 --- a/include/uapi/linux/kvm_para.h +++ b/include/uapi/linux/kvm_para.h @@ -28,6 +28,7 @@ #define KVM_HC_MIPS_CONSOLE_OUTPUT 8 #define KVM_HC_CLOCK_PAIRING 9 #define KVM_HC_SEND_IPI 10 +#define KVM_HC_SCHED_YIELD 11 /* * hypercalls use architecture specific From patchwork Tue May 28 07:56:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 10964059 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 425B61575 for ; Tue, 28 May 2019 07:56:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3775F20000 for ; Tue, 28 May 2019 07:56:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2B82520602; Tue, 28 May 2019 07:56:49 +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 C063C20000 for ; Tue, 28 May 2019 07:56:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727903AbfE1H4r (ORCPT ); Tue, 28 May 2019 03:56:47 -0400 Received: from mail-pg1-f196.google.com ([209.85.215.196]:47062 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727707AbfE1H4o (ORCPT ); Tue, 28 May 2019 03:56:44 -0400 Received: by mail-pg1-f196.google.com with SMTP id v9so4081118pgr.13; Tue, 28 May 2019 00:56:44 -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=IcCjT6H+ppzU8yxObmCoxmme1+yJ2Skn/UpNWVNXol4=; b=r9JapoW1TH03Z/msb2tYdBDcW+hg2JYfMfbi9w7RxLk2HRF018D93yT2si+fcWvWJY awPPWDkG3esohpIPq+sPC+d9BmmDseTIzY+MY7hgLZSfnX+bemH8hy6ftlhBI74VHnLR 6jj6HKcdtouJ68EbmdMAVXrC02sUsTtkwgwMs/GZe/jnlKaQVcBlJ5cm7o5VVAQZQK6n +Gk8ec9f7wATmcKF9Jo7vZ+l1XKsXscjs7KpjDVstDmhNXQx6Otj9c1lLGsaSA4Lc+hV zOHe4ve5j7rYdLat+R7sraBfQT65GZm91JLYLJ22YlrHWfL4i0Vy70zYCZFUFMHHCkeQ jw8A== 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=IcCjT6H+ppzU8yxObmCoxmme1+yJ2Skn/UpNWVNXol4=; b=GR8S+RuS7Xi16znXoR6jqJUxXqED3Vs4Z2c/WSDRc3Lq8n1xKAY5QNo9A9zwCg0xNA JVIFfqXpYRI+vUVHi3SBch8O3TepWfRRAb+yK2rikfSXqqaySmHCsOjkGWpQd9kf40AY f43fzFoyWxw5h6IcdZeuA5xLUbNfPUdiRLphiYNyUV+rmWe1Ubk7fC2xy9e+TQBE7C7a WWkrTAY32auGdWUbNZcKGe3vj23skZHZrfI7d/VVoyfn/58+NIcMDcNDHbbRDR6KURjr XpaIsAg9+EyizLNzsFUZUzxuWMCQ7GCps0OfSk6tgwx9mplBglLHqPMj9iIthyW3C7uA VW+g== X-Gm-Message-State: APjAAAXu0XQXFo4gErt1UIfqsvpeSDaUS4r8ZzEaSYioNh7wSGptGCVV bqv7ktxxljzO5Kpek7VTKYZqylV9 X-Google-Smtp-Source: APXvYqykojq1rbvP+sqE1AFM44WkyozcRq8ufVLdy925zEx8t//KLsj8Hj/DGg7G8sgPNaOqUhEzrQ== X-Received: by 2002:a63:246:: with SMTP id 67mr132546747pgc.145.1559030203643; Tue, 28 May 2019 00:56:43 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id t64sm2906920pjb.0.2019.05.28.00.56.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 28 May 2019 00:56:43 -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 RESEND v2 2/3] KVM: X86: Implement PV sched yield hypercall Date: Tue, 28 May 2019 15:56:34 +0800 Message-Id: <1559030195-2872-3-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1559030195-2872-1-git-send-email-wanpengli@tencent.com> References: <1559030195-2872-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 The target vCPUs are in runnable state after vcpu_kick and suitable as a yield target. This patch implements the sched yield hypercall. 17% performance increase of ebizzy benchmark can be observed in an over-subscribe environment. (w/ kvm-pv-tlb disabled, testing TLB flush call-function IPI-many since call-function is not easy to be trigged by userspace workload). Cc: Paolo Bonzini Cc: Radim Krčmář Signed-off-by: Wanpeng Li --- arch/x86/kvm/x86.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index e7e57de..f73af3b 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -7172,6 +7172,28 @@ void kvm_vcpu_deactivate_apicv(struct kvm_vcpu *vcpu) kvm_x86_ops->refresh_apicv_exec_ctrl(vcpu); } +static void kvm_sched_yield(struct kvm *kvm, unsigned long dest_id) +{ + struct kvm_vcpu *target; + struct kvm_apic_map *map; + + rcu_read_lock(); + map = rcu_dereference(kvm->arch.apic_map); + + if (unlikely(!map)) + goto out; + + if (map->phys_map[dest_id]->vcpu) { + target = map->phys_map[dest_id]->vcpu; + rcu_read_unlock(); + kvm_vcpu_yield_to(target); + } + +out: + if (!target) + rcu_read_unlock(); +} + int kvm_emulate_hypercall(struct kvm_vcpu *vcpu) { unsigned long nr, a0, a1, a2, a3, ret; @@ -7218,6 +7240,10 @@ int kvm_emulate_hypercall(struct kvm_vcpu *vcpu) case KVM_HC_SEND_IPI: ret = kvm_pv_send_ipi(vcpu->kvm, a0, a1, a2, a3, op_64_bit); break; + case KVM_HC_SCHED_YIELD: + kvm_sched_yield(vcpu->kvm, a0); + ret = 0; + break; default: ret = -KVM_ENOSYS; break; From patchwork Tue May 28 07:56:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 10964061 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 0561E112C for ; Tue, 28 May 2019 07:56:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EC69E20000 for ; Tue, 28 May 2019 07:56:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E0B2A20602; Tue, 28 May 2019 07:56:56 +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 8BFC020000 for ; Tue, 28 May 2019 07:56:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727844AbfE1H4r (ORCPT ); Tue, 28 May 2019 03:56:47 -0400 Received: from mail-pg1-f196.google.com ([209.85.215.196]:45685 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726203AbfE1H4q (ORCPT ); Tue, 28 May 2019 03:56:46 -0400 Received: by mail-pg1-f196.google.com with SMTP id w34so5804347pga.12; Tue, 28 May 2019 00:56:45 -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=i/suq6wlpwcJ3ogbpvRkyctj8x187X3vDma99VWceU4=; b=ECYqfw7gsUzl3sA/NMdyK82zPejq0iU0eFkiPFVAoME0Qa3iZzAwZNgvBuXJkmdANB c1xG8te3/3BcbDvLIdQwEuw3vO/W8Cb7R1MwBfUs2fLqFvKl3/ubr3/aS4/PcjQahdQg g6ZIide7yY0c4/NlSxHoYnryflJTZuCqc9I7vgLuNsb5gGsnvvJcugKVzwZPTbPap7ll 2sXVDzGcaaVaGvzfsczAL9f7/UEoy4qWfn7Z3LvgNKzDXWtBxEOT/qdamNv5l9X5SY9X 2+LbJ7KKndXocJxlSlwkd0YUcf/vtsC3f+pGQTxX7AHHk7Xgz8V45Hgc9SApTu98iqDS FemQ== 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=i/suq6wlpwcJ3ogbpvRkyctj8x187X3vDma99VWceU4=; b=kvA83/YRWTyQGGdJd/6/2DeAKLaoCNXmVokPzqitFyPrPQ1wL6fP/DkyyucImeZ7QO eg3BV/qIKpZ5gIigbQfKXFV9fLFXDxXj00AkEbLWydw950NbMgfSeA/sfshyL2ZWc0bp obmNaUkWiPDzhF48/afPBHQgCBVKZXkk852QB0CcUr7qU/9zpjSn6iwPz6Y4mpar1mUH tjPhfSMl60yJ3MbOwRNvzOBk7q12mtYAOEF+othPoZEjZO4C6mMw6JytSpnF6TyMsLMm gc+iEDPO4HFnvNq1A0AebFF3vezp+Q4K9Ez4IxYHEHZGQZV7OgYe4AHsEJouAf0ijV1o Qizw== X-Gm-Message-State: APjAAAVyqNaPrtIaIwB3vI2rbrWQhzXNr8IKzJe4qSooY4pXlwmkON5n 6Mo233sUOqkWDPuuXEUsQ5HqUy7M X-Google-Smtp-Source: APXvYqzLwS6S67O6iGxhlvp+de+SklbtDAPQhSBt8APPY0ylnxElE1Ll524sT2mFjHjyUjXlhQH+Aw== X-Received: by 2002:a65:4b88:: with SMTP id t8mr131708342pgq.374.1559030205498; Tue, 28 May 2019 00:56:45 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id t64sm2906920pjb.0.2019.05.28.00.56.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 28 May 2019 00:56:45 -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 RESEND v2 3/3] KVM: X86: Expose PV_SCHED_YIELD CPUID feature bit to guest Date: Tue, 28 May 2019 15:56:35 +0800 Message-Id: <1559030195-2872-4-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1559030195-2872-1-git-send-email-wanpengli@tencent.com> References: <1559030195-2872-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 Expose PV_SCHED_YIELD feature bit to guest, the guest can check this feature bit before using paravirtualized sched yield. Cc: Paolo Bonzini Cc: Radim Krčmář Signed-off-by: Wanpeng Li --- Documentation/virtual/kvm/cpuid.txt | 4 ++++ arch/x86/kvm/cpuid.c | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Documentation/virtual/kvm/cpuid.txt b/Documentation/virtual/kvm/cpuid.txt index 97ca194..1c39683 100644 --- a/Documentation/virtual/kvm/cpuid.txt +++ b/Documentation/virtual/kvm/cpuid.txt @@ -66,6 +66,10 @@ KVM_FEATURE_PV_SEND_IPI || 11 || guest checks this feature bit || || before using paravirtualized || || send IPIs. ------------------------------------------------------------------------------ +KVM_FEATURE_PV_SHED_YIELD || 12 || guest checks this feature bit + || || before using paravirtualized + || || sched yield. +------------------------------------------------------------------------------ KVM_FEATURE_CLOCKSOURCE_STABLE_BIT || 24 || host will warn if no guest-side || || per-cpu warps are expected in || || kvmclock. diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index e18a9f9..c018fc8 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -643,7 +643,8 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, (1 << KVM_FEATURE_PV_UNHALT) | (1 << KVM_FEATURE_PV_TLB_FLUSH) | (1 << KVM_FEATURE_ASYNC_PF_VMEXIT) | - (1 << KVM_FEATURE_PV_SEND_IPI); + (1 << KVM_FEATURE_PV_SEND_IPI) | + (1 << KVM_FEATURE_PV_SCHED_YIELD); if (sched_info_on()) entry->eax |= (1 << KVM_FEATURE_STEAL_TIME);