From patchwork Mon May 27 10:34:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 10962515 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 8F675933 for ; Mon, 27 May 2019 10:34:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7EF4E2896F for ; Mon, 27 May 2019 10:34:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 72F3428A31; Mon, 27 May 2019 10:34:27 +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 74BD42896F for ; Mon, 27 May 2019 10:34:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726941AbfE0KeY (ORCPT ); Mon, 27 May 2019 06:34:24 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:39418 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725858AbfE0KeX (ORCPT ); Mon, 27 May 2019 06:34:23 -0400 Received: by mail-pf1-f195.google.com with SMTP id z26so9365204pfg.6; Mon, 27 May 2019 03:34:22 -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=ISntIzPRhi1novfNIUIoq8j4mN3/8DjvUbUpkbo09pCTHdRBsUziP2PIUoRUtdXVCT kV2GdCD2b4tGohQ4Hty1tJnpywXMVAQ7yXi2za+wVKfsyCa7n78KQH1un7E8DNHfjQDJ IuCjpcv2SMnFnTQ/qyPuS9tx4SOwLBfQhOQfOgRFXPUwlD94yVoWIMFG9y9d4awV07dB qdKNyLpFVbLlwLr3L1F3k5kBpVLAjHZL6N7+6JrU+PLRmOP3Coa4iqCjjE8j+bVptLlw Vw+cJxEpBhGphWPMfWAmYA6zgz55Z7bZMFnRYAlt42ANxmdDbSeeaKfmfQnQLa7FgeiL Uz1w== 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=tiUfTn/WJ8DNRSxnPaHN++7/N68LV4Oj5lbOKdCIM2oSPoOw4zx6d4/NjaCOKsL1zD FWMcpycg/C2X4wPIHpAN8Hwk1W4ZpmvWrgA6C8aqr9jPXHrRmG3cD2pl7m89wtGObEVK KpPJPL6EW/XXOEHfkGDeAb0vEnbqn2NCrJRxsItW6QtiK2G1+bRjn5xmWddkdhYp54p2 PGUuWAbPCvl8CxjT355HFLcD8/CMGMjD1IpQWReufDsWoTEdDd2H127FYZaVNmnOrW8L /VuiJRccshe4AsUQob9TgCsnF90pi3ouDjfR0hziuQDYCtglIAgDTZNNLHVe0w14UT+M mG5g== X-Gm-Message-State: APjAAAWtHxkz1dPCdxZzCjynA91p9TZT1i8ud6XVUofvIIwjZJ03fXFU YlDvrLZ3vk81hf+6epIcMrYAGzD2 X-Google-Smtp-Source: APXvYqznobAQK1C+wXpTTAo3yaYzYHyj5rAO9BM24BpvbLoj75xMi2luo3Vo5AAi4SZCeV/ga+cmFA== X-Received: by 2002:a65:448a:: with SMTP id l10mr8005875pgq.53.1558953262208; Mon, 27 May 2019 03:34:22 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id y16sm19216452pfo.133.2019.05.27.03.34.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 27 May 2019 03:34:21 -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 1/3] KVM: X86: Implement PV sched yield in linux guest Date: Mon, 27 May 2019 18:34:13 +0800 Message-Id: <1558953255-9432-2-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1558953255-9432-1-git-send-email-wanpengli@tencent.com> References: <1558953255-9432-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 Mon May 27 10:34:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 10962519 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 D0A3776 for ; Mon, 27 May 2019 10:34:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C06C02896F for ; Mon, 27 May 2019 10:34:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B483128A31; Mon, 27 May 2019 10:34:37 +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 6185B2896F for ; Mon, 27 May 2019 10:34:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726960AbfE0KeZ (ORCPT ); Mon, 27 May 2019 06:34:25 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:33421 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726946AbfE0KeY (ORCPT ); Mon, 27 May 2019 06:34:24 -0400 Received: by mail-pg1-f194.google.com with SMTP id h17so8910348pgv.0; Mon, 27 May 2019 03:34:24 -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=Vpg2cDctWQejTN0F0qGalNdJQTFib3kHrQ/n0YmUAdw=; b=PyYO+5b16GmfOefyscRtRj3Z2WjyjUIpS+UlV0KmTktn6t90oEM4gQdAcdXGGBhvwX kH7+OFk1XLfQ2izT57PzI7xA64olkk58wHc49BoTNDVKWrk/LX5IJM8lUESeLJW9yfuF 3+/kaqqHvb4ZQC3UBjczm/vz5Ox1Boho4/46wFWPlTSgZuhbDJl2JZkG7/2BCtWoH8K3 mTPRA9HQoSaUckfDymaTuGGNBHasI7Fg65z5YsdhsV7emO0hhPjDDEP7h62Gd3ulQR2+ 9hn6TsOdwTlIUHlG77VK2yJvvgsVjWitydeVqNzpWgSsBxtHqR3h8l+A7v53o4o+0kap h8iw== 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=Vpg2cDctWQejTN0F0qGalNdJQTFib3kHrQ/n0YmUAdw=; b=HlP77IDgA4c3ANnalZYl726tLWbdqqGTkcQLnwEYiuflJCiIuq5J0abesPBLINekZ5 /Phuj9QXl3SuYFVAGjmtLB6Py4nrJtlvlipiQrp2sDiKagViZNDpPZxIa5xmLASkh2ZO hns9j1iZuYCrbPWNnwWcI/D+Ibi9mv6q8A8PrtA3UpDsg3DCbq3zPbPZ+oGNOcZ5Vusa lSswl3gf+lXqinSGnN1CVc2tCZUSqv2qh+fkzbPI+g7UcBYE0wo5Tjv7tc0DqqHn/JZf 0uen8KE6x5tFcI3dDCefUmSZ5Ij8hy5+XH6Ms3gLvDOMgfngI0I9LY0g3VrjAbjDdKS1 cyLw== X-Gm-Message-State: APjAAAXSIILCB2o9k5L3hq7iM5AqL5gf6+U/EafFhB5l3sqSrmbn6cOe CcP2t8W6kCyGu81iWLbzGGAfU00l X-Google-Smtp-Source: APXvYqzt5TabbzEZfV9CZ9lZOdRVBBWybF9uBxkoZ3l8vJUzsPlArc0kJGvmPyJ2PznDqBjKthgyjw== X-Received: by 2002:a62:1846:: with SMTP id 67mr116709452pfy.33.1558953264163; Mon, 27 May 2019 03:34:24 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id y16sm19216452pfo.133.2019.05.27.03.34.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 27 May 2019 03:34:23 -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 2/3] KVM: X86: Implement PV sched yield hypercall Date: Mon, 27 May 2019 18:34:14 +0800 Message-Id: <1558953255-9432-3-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1558953255-9432-1-git-send-email-wanpengli@tencent.com> References: <1558953255-9432-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% performace 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 | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index e7e57de..45403a6 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -7172,6 +7172,19 @@ void kvm_vcpu_deactivate_apicv(struct kvm_vcpu *vcpu) kvm_x86_ops->refresh_apicv_exec_ctrl(vcpu); } +void kvm_sched_yield(struct kvm *kvm, u64 dest_id) +{ + struct kvm_vcpu *target; + struct kvm_apic_map *map; + + rcu_read_lock(); + map = rcu_dereference(kvm->arch.apic_map); + target = map->phys_map[dest_id]->vcpu; + rcu_read_unlock(); + + kvm_vcpu_yield_to(target); +} + int kvm_emulate_hypercall(struct kvm_vcpu *vcpu) { unsigned long nr, a0, a1, a2, a3, ret; @@ -7218,6 +7231,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 Mon May 27 10:34:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 10962517 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 82087933 for ; Mon, 27 May 2019 10:34:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6EA262896F for ; Mon, 27 May 2019 10:34:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 60F5728A31; Mon, 27 May 2019 10:34:36 +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 5FAE82896F for ; Mon, 27 May 2019 10:34:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726992AbfE0Kea (ORCPT ); Mon, 27 May 2019 06:34:30 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:43648 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726966AbfE0Ke0 (ORCPT ); Mon, 27 May 2019 06:34:26 -0400 Received: by mail-pf1-f194.google.com with SMTP id c6so9356532pfa.10; Mon, 27 May 2019 03:34:26 -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=KM/wQeMtXxU5Vx49+QokFlUXZuaHcWVOERnaL+ZNQQ7Iua5QA+FLVFtlfKTucwFSlh Yib1TEkh0PHPfc0xVNRM/nfHs/b6biN6VItfQ7uYq2GDrHTJQaFNTdcV4Vmk1Vc3vA96 JTGc5BDtmAbtYNOa8yNWaXLBroo8wMZYqWuExL+VdOqVdWYO6FCY7bFLvRYloKYpM2Sw yYHmPIa8voeA6mhRyJg3hg5FjMOGmv3m4UR4iC241+/SmnU2BYl/GcFglR9zv0RADYYa DpApbJDnXqHT4xBUn/YOeHTgMbOB7cjb6dzoZcswmGB3UN3EvZLz7vSZDVfx2EOs9vdS TI7w== 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=OXybjskZre2ODLIC080s7VH8Q0cx7va/KzS3p19jiD7qZbKuuW978MIhKzw6tkNPOd ggKCOn9D0vCmoMNYtSt664b+NoZkbnVozR+3yK2u1gXY0uiXUpv0rwjXj32J+T9g0dKu y8gHKis8MVsknEQbagFz3IfIxPak8nMYUM7tauI/L1N1xF1oOAExZAOeVr3mOT4B6560 HNzdpJIQn52Fqotyzc0Ph31dm/nQxnUxFAFqv3NjauXxvnTfyDuwheoEnG+ZCceLmHhW 79Ck7WPvAySMf0L2sGG16KoqjB7dBmz1CD8fTPaB2N9+5K38hN5i7IIDpxQ+tCZZcD+l rhgA== X-Gm-Message-State: APjAAAW+aLnjvLNN5ae6AuY5lanrSigcAvPTZUXMV2wp1XwhijaUeTk9 Xlj6RM1253qH0duBf9VplhBrt2WF X-Google-Smtp-Source: APXvYqzAT7QeHLGJyQ/o+5xUOpLK6bOYfK3aacI1sGN1vtBbJwsA7VWvShHuB+34piV9p8/IeVhlCw== X-Received: by 2002:a63:6647:: with SMTP id a68mr107738296pgc.292.1558953265907; Mon, 27 May 2019 03:34:25 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id y16sm19216452pfo.133.2019.05.27.03.34.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 27 May 2019 03:34:25 -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 3/3] KVM: X86: Expose PV_SCHED_YIELD CPUID feature bit to guest Date: Mon, 27 May 2019 18:34:15 +0800 Message-Id: <1558953255-9432-4-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1558953255-9432-1-git-send-email-wanpengli@tencent.com> References: <1558953255-9432-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);