From patchwork Thu May 30 01:05:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 10968027 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 827A9112C for ; Thu, 30 May 2019 01:05:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7184C28877 for ; Thu, 30 May 2019 01:05:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 65D9228904; Thu, 30 May 2019 01:05:24 +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 D5405288AD for ; Thu, 30 May 2019 01:05:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727390AbfE3BFW (ORCPT ); Wed, 29 May 2019 21:05:22 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:45334 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726718AbfE3BFW (ORCPT ); Wed, 29 May 2019 21:05:22 -0400 Received: by mail-pl1-f193.google.com with SMTP id x7so819517plr.12; Wed, 29 May 2019 18:05:21 -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=NLeouBxvUtFtJV7am8sp6M7SEvXrySNvZkPzWOWKABQ=; b=rUo60yynsbKsshLQJMouNQAziTzNmjRr0IrYQEN6uXQhuGzYx9rP8N4Y5MwRtDkISy MCWY1boqAGqiNRG67jAbXC/TX+Mfuu6NY/J9Tqjpw+KVYzThjQmaDeQ4CmJ4uueXhC1f bJVF6Q/GCVOoZdKjOmYsRnhLu3QrLpA2SIyr4dAeGhiYFsk/yBOBVLHBJvhA3wvY0BZs gtGWTjHTWbWTKOWFbYf5GMPFOOVGfKDpR5sQVJXMPNtuq0E/uYVXQLs2IzLvZ1GMB/tM 7RhD9YZM7DSEeiAcy7A6yWOUo+iqDNCxwLvz9xLuc6Aa7bZ4ZCSexi+UQF3wegZDR2ye Ianw== 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=NLeouBxvUtFtJV7am8sp6M7SEvXrySNvZkPzWOWKABQ=; b=QPesrVubccDQBzWcp+zrrKZnRgrWC9D2CkKLLA0q/RbFE1fY3uqP+MCtlhiocvLsDR 1uGnSCLttbSbar3AWNgHx60O4gcatofipZIyIkLkIgpp9Fa4gFCrMBEm2FNhZK7siZ+q DylUyfa1IyxkUuWyvwwG+9StHO0tEhWNVXwq6/w0NuV98+iA/XsxxQ2UNtLxV6pY204I vHL6qYVc8wFZ0R5Aok2g8UKV6rsgDMP7vj87pN8wwQq/PlvWydm7s9sfZGoFXnTU8LCL PrEsUBGZ/mHW6iGvAsuxsvDVvrDWJ5nIvIq7LEKT5jmIV98ps8sCHDslu6Efa7z0tDnR vhCA== X-Gm-Message-State: APjAAAXEH6nfmGgq2YVbwX8Gp1DbkQjRgQO8VJvimsZEjdoiNSDokUgJ V9BBm2ytzVc0j/kfNnv1rMYuUyA4 X-Google-Smtp-Source: APXvYqxLom5xJx688ah6RS1P7ouc7Bj45i+N4LrNo5xTkjJCzMiGyx3l40AVSQnOOkaxCVVWxgBGuA== X-Received: by 2002:a17:902:7618:: with SMTP id k24mr1005552pll.78.1559178321005; Wed, 29 May 2019 18:05:21 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id c76sm861965pfc.43.2019.05.29.18.05.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 29 May 2019 18:05:20 -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?= , Liran Alon Subject: [PATCH v3 1/3] KVM: X86: Yield to IPI target if necessary Date: Thu, 30 May 2019 09:05:05 +0800 Message-Id: <1559178307-6835-2-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1559178307-6835-1-git-send-email-wanpengli@tencent.com> References: <1559178307-6835-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ář Cc: Liran Alon 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 Thu May 30 01:05:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 10968031 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 5C68D15E6 for ; Thu, 30 May 2019 01:05:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4DD5A288AD for ; Thu, 30 May 2019 01:05:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 41CDA28917; Thu, 30 May 2019 01:05:34 +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 DD4FD288AD for ; Thu, 30 May 2019 01:05:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727408AbfE3BFY (ORCPT ); Wed, 29 May 2019 21:05:24 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:38687 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727402AbfE3BFX (ORCPT ); Wed, 29 May 2019 21:05:23 -0400 Received: by mail-pf1-f194.google.com with SMTP id a186so2091627pfa.5; Wed, 29 May 2019 18:05:23 -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=Nl87Zzt2g/Jhk18hZDpMWkRfM4v7xHWaSrq5qLezpJc=; b=Lf/QLagolBqTstdBtF0EHeqzeM+OeTuLhSpkv/iHTh0H0681R/OJPR3dS9Lu92ch0C gC2Hyub52q69czChb5oYC5DDr+BQDqRClJJOf0UUNMJcPWzmC7EKsbLSi4heAHpJ1LX0 zT27udAuTMtT20uuAWhmHZS9ivfLb4V111AeyLNwC/K3p75Q313wSqUsbuiLk+BN+xys O1r1MjMWpOpEg+GSUz8d8P6smE1ZXxLuGlpHVl9kBO+daVsPmH6jnnTZ8e1ygQA8Eelg ikCkQQnkF/tWqFEyF2Jjs00VOOcs5AvJnz0dl61zcn5GkbIfGoZdEd8WPK+MriVfxQEK ER4w== 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=Nl87Zzt2g/Jhk18hZDpMWkRfM4v7xHWaSrq5qLezpJc=; b=IuWrRq9RIkF67TWcBpPTbivB4r5AmhZ46tHVANn5O3U0I7AdYzyEr3x5h0XPfmzIWr p5qWnjn8JbGk154N5Xz5KZAB0uU/pwZhGyAxKt+Hch33Y/xqv7He7VDXKUh4ei3WeYM8 oJRhaAHJ6atFIXibir6vA051joWOEemLudOiidnczj9Jnb+Iuy7TXBleY0eWY2Botw0W Anvb13NazSb+Zp+kEO3Zbrf3kXM5cfLwymYEBfAEsDapWzXmEkFNTxj3Ea/J/ALD9D8C URxS+y6LRnl0Q8+BNe5RAC1OaT74mv683oo/Uasw40l8WitA3GdOGL5sTMJnyJt7n+c9 t8Tw== X-Gm-Message-State: APjAAAVVvWDX4cxRudrQjyFbPHoiGwsibMtYAHm2P3x9cRwd337FCmQb p2dnGrcDTOgHZ9ZYzcaHFr77ulqx X-Google-Smtp-Source: APXvYqzn35UrHLbk3sYI0EeUtfr/XAbRlrVdSiTj/y3EKOPC/FZ7tWNsFsfV47WqqsEh3cl9SxPkZg== X-Received: by 2002:a62:ed0a:: with SMTP id u10mr621128pfh.243.1559178323036; Wed, 29 May 2019 18:05:23 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id c76sm861965pfc.43.2019.05.29.18.05.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 29 May 2019 18:05:22 -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?= , Liran Alon Subject: [PATCH v3 2/3] KVM: X86: Implement PV sched yield hypercall Date: Thu, 30 May 2019 09:05:06 +0800 Message-Id: <1559178307-6835-3-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1559178307-6835-1-git-send-email-wanpengli@tencent.com> References: <1559178307-6835-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 increasement 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ář Cc: Liran Alon 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..8575b36 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 = NULL; + struct kvm_apic_map *map = NULL; + + rcu_read_lock(); + map = rcu_dereference(kvm->arch.apic_map); + + if (unlikely(!map) || dest_id > map->max_apic_id) + 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 Thu May 30 01:05:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 10968029 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 846E915E6 for ; Thu, 30 May 2019 01:05:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 74C9A288A9 for ; Thu, 30 May 2019 01:05:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 691972888B; Thu, 30 May 2019 01:05:31 +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 16E4528910 for ; Thu, 30 May 2019 01:05:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727427AbfE3BF0 (ORCPT ); Wed, 29 May 2019 21:05:26 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:46849 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727413AbfE3BF0 (ORCPT ); Wed, 29 May 2019 21:05:26 -0400 Received: by mail-pf1-f195.google.com with SMTP id y11so2761181pfm.13; Wed, 29 May 2019 18:05:25 -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=2Z5Idi/CPSKFvBQKuXpbeCGvfVzaiO/7Q4QPnwgN73w=; b=MsTTioVd0Q4UgE8TapYzvgKyK0YFqeLTqVZMeGpF0faA4drW/imNuPVPl88UU70BDd Vp0DiHzYxbVftjqJ9I3URqWMEI6pNtXLUFMJxUj+f5e/0Vkc+K+9650LzpkmAo7ZRNvG anoAwr9zoV6KEvhL1KCvcz3swsRUSK7EYmVV9VgH/kvbxZQBvDo5xF6HSK5nFL0ZYJwz 56sGJxWFGw83vCS1iC5hn0KlZP4VT6+/YW3w973NjQO4poAJoZ2/ngMb9lJgcuh0brPq CZpXEz4DyxOvfJ7X8FjSB8K1nw5FLAbvoKOXa4h0klV7kTo8zDcO/oyuwVUwp6889QJh SHlw== 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=2Z5Idi/CPSKFvBQKuXpbeCGvfVzaiO/7Q4QPnwgN73w=; b=ffuvhQKqkMmp6NzgFAxTZyv3nwcpxBAbYMqmUWg66gOnHc3XWr7om2xpSR/pluqnqe MP1u2ov8APf/gc1vvVSiDIN5OpF0ZMQRMUiDKj77I2Zbf0azyllxEwwF4KCZO7FRBBv5 95sCOrQRPlg+yrzYWQVW0cvdWaLFAwOBIRnvpxPR1cLlR1D1vN+PpBSnMtWuXWNu3Hxk wRhWfiZdt7Fd8za1qwhSXWhR9klRjrlF6iCM2VbzIVABFF7hjzy23iL65mWggo6GhIA4 E9U2H7TkfZYVkxOrrDIGUpk8yLwW0Qdxm22jnDvKqPWIwTuWa+UltcQDphH3OuXMRkUk OOBg== X-Gm-Message-State: APjAAAXsZisypqHeFZICy3qC11WWdQq0IJwBN+RLs5Es/2veS75/jOle lOgm+KNz50G5zMeAquRmuKA9Rhy2 X-Google-Smtp-Source: APXvYqwk6+JJYGYvr0hdpknvKOIwvBZmtpTrd/Ht+n3ygGFXlv4pYsSVn6lxop4vpnreCEsv7C9VRA== X-Received: by 2002:a63:fa16:: with SMTP id y22mr1000163pgh.15.1559178325168; Wed, 29 May 2019 18:05:25 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id c76sm861965pfc.43.2019.05.29.18.05.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 29 May 2019 18:05:24 -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?= , Liran Alon Subject: [PATCH v3 3/3] KVM: X86: Expose PV_SCHED_YIELD CPUID feature bit to guest Date: Thu, 30 May 2019 09:05:07 +0800 Message-Id: <1559178307-6835-4-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1559178307-6835-1-git-send-email-wanpengli@tencent.com> References: <1559178307-6835-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ář Cc: Liran Alon 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);