From patchwork Wed Jan 10 00:39:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 186632 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2411:b0:101:2151:f287 with SMTP id m17csp498324dyi; Tue, 9 Jan 2024 16:40:38 -0800 (PST) X-Google-Smtp-Source: AGHT+IGpiTkQGgg1wlFoy0pb/ECH+6QJMurQCIw41lku6zH7oJ5bEBLaencFL5HZrPm+a0R3sH1i X-Received: by 2002:a05:6a20:510a:b0:199:e6af:30a with SMTP id a10-20020a056a20510a00b00199e6af030amr1554690pzc.38.1704847237952; Tue, 09 Jan 2024 16:40:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704847237; cv=none; d=google.com; s=arc-20160816; b=bv1VENfveCIx0egQ0wGdv79vo1aJaBkSYTs7n/7Ih/eXQ8TO+AKTfh51FIgCdwA1pW FIqQIVO3Q2mPGW9Imee2xEv9Agjtjn8diNKNW+/0BOdYcnqXTEc+r/p+vOnEtOYv0bl0 5ljghYfAUJckuneE8dvqyDHlBtvRarebBHB2V+n+U8o/+OkYA9BSLthjEruNS5/EclWu 8e5Uhu6YD9oq9tm2yjtSG9MGn56feNuvRKWTejICScAevsvQamTqTX78zctkb964xZ+0 2MG+YiJyq0z7GVI5kPDWuioN3BnPVbAhtuQWMjMR/Q1CqawyHNmo8Qj73DGLL/bTqGUR /MCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:from:subject:message-id:references:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:in-reply-to:date :reply-to:dkim-signature; bh=ePMAACFe2MrWq1DNaP6F2TM5DnJ2ZLx/mnijbLthbpo=; fh=/j5JD0kNmt6w2ElaoSjWxIvbDK7Ar0LSE5o5EAaCtME=; b=MRSVRMBrrYzcq4HICf/M5VM3aPOTzRCfVLprmk14qIH2GFJKBOikiOOwPTEjVKVvVM U4fvUX3mF8oqh1JPYq0s8KGkrGcZX7f3Qjmd5tmdRJOwkEvTvii83UxiNKnIop1umDNl cmBnNlR8JSiA4r4kfLE5O2zkMa+tcjtrpLVQulYGtvBwpRaY4lDKR9B+SC9PE3/V9Wx9 8ldlVU60SHbW5Iksj0f3mVG9IwtaIHFYrCiuCV9Fx+at/q+awqyqDdF/U6/cN/5WJk2L Y6K5dLu3X/Q5vcj0tPRN8IBuobthr/YvzZe7Tc6Rcfa+M0v1NXtw+kDtVuQ8MeNgolMt wZag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=E6lIprKj; spf=pass (google.com: domain of linux-kernel+bounces-21588-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-21588-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id x22-20020a631716000000b005cdfa6ec016si2400688pgl.535.2024.01.09.16.40.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jan 2024 16:40:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-21588-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=E6lIprKj; spf=pass (google.com: domain of linux-kernel+bounces-21588-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-21588-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 1D3622880F8 for ; Wed, 10 Jan 2024 00:40:32 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4DF766FAF; Wed, 10 Jan 2024 00:39:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="E6lIprKj" Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E73A2916 for ; Wed, 10 Jan 2024 00:39:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-6da129ea7dfso2123547b3a.2 for ; Tue, 09 Jan 2024 16:39:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1704847183; x=1705451983; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=ePMAACFe2MrWq1DNaP6F2TM5DnJ2ZLx/mnijbLthbpo=; b=E6lIprKjPCtPRRdwnoIxtEsxJQ8n/4jQgGAXVfiyYDu2sDnAbVzdXlgaDoVRcJxWGf KReekSIarPOLgOw5RU6Wirk3bYpxKqSuFwhy6Ov0n56TeppuG0gtI3kVW6IKgh399gj+ qsEgBrTh1azkW892HlSAcYoI0QgQ0zs5ehV3vDtkQYYejAzB2eJNiniMnxfSoNBAZQPB oo0w5jxocV97czR84GLg+4NmEUBN1XwJnFc7Exfzv2Q8iQMvCXWoKf4pcKfHNSfIjo7S ROcPCmLWm0VbnIHz/puEggHHPcFcAwweOtaBgIUMqH7wsKZe08bATIl5SP6ODw/jduKs QuAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704847183; x=1705451983; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ePMAACFe2MrWq1DNaP6F2TM5DnJ2ZLx/mnijbLthbpo=; b=OQvZmAYV0owa0h66UweJG4PV3pRQ3Iedprx/3dhNRfd59zgcQHEzYUaX2Jag/bs4k9 PT42ClGJPn/xON0WVLOgihHw9tC6SxxQlVifYIYiV15vlAchcW/0h7ZYriCtdE72ip5p IuMoADR128k3H6+uHq/ftKnJBHAq289ZJIzCCE2FcsRmBQhJnQTNB6NQs9ZeTOw52+gS 1/rkRPl65k/NnlcHF2wc9Ye/UurhVl5WPEvckDRrVsQn0ciadJ0mFVNzQskmBkmGx3wH 4849KVPr+Z9iAtJLrU594fNchTyhCyvYyReH4dMX0AcDdJvsRVI5H2leq7sr90PKmdbR rLyw== X-Gm-Message-State: AOJu0Yy4U08f3I8Uk8hV+Gl437wDpadSKP/+q86t9iGNOo2dPVjSORlG vFgn8qRWwvXpI5h29sX/s2L+wt6osoB0Z2xIyA== X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:ce8b:b0:1d3:e449:fb53 with SMTP id f11-20020a170902ce8b00b001d3e449fb53mr1035plg.4.1704847182436; Tue, 09 Jan 2024 16:39:42 -0800 (PST) Reply-To: Sean Christopherson Date: Tue, 9 Jan 2024 16:39:35 -0800 In-Reply-To: <20240110003938.490206-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240110003938.490206-1-seanjc@google.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20240110003938.490206-2-seanjc@google.com> Subject: [PATCH 1/4] KVM: Add dedicated arch hook for querying if vCPU was preempted in-kernel From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Like Xu X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787661897406772647 X-GMAIL-MSGID: 1787661897406772647 Plumb in a dedicated hook for querying whether or not a vCPU was preempted in-kernel. Unlike literally every other architecture, x86's VMX can check if a vCPU is in kernel context if and only if the vCPU is loaded on the current pCPU. x86's kvm_arch_vcpu_in_kernel() works around the limitation by querying kvm_get_running_vcpu() and redirecting to vcpu->arch.preempted_in_kernel as needed. But that's unnecessary, confusing, and fragile, e.g. x86 has had at least one bug where KVM incorrectly used a stale preempted_in_kernel. No functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: Yuan Yao --- arch/x86/kvm/x86.c | 5 +++++ include/linux/kvm_host.h | 1 + virt/kvm/kvm_main.c | 15 +++++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 27e23714e960..415509918c7f 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -13091,6 +13091,11 @@ bool kvm_arch_dy_has_pending_interrupt(struct kvm_vcpu *vcpu) return false; } +bool kvm_arch_vcpu_preempted_in_kernel(struct kvm_vcpu *vcpu) +{ + return kvm_arch_vcpu_in_kernel(vcpu); +} + bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu) { if (READ_ONCE(vcpu->arch.pv.pv_unhalted)) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 7e7fd25b09b3..28b020404a41 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1505,6 +1505,7 @@ 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); bool kvm_arch_dy_has_pending_interrupt(struct kvm_vcpu *vcpu); +bool kvm_arch_vcpu_preempted_in_kernel(struct kvm_vcpu *vcpu); int kvm_arch_post_init_vm(struct kvm *kvm); void kvm_arch_pre_destroy_vm(struct kvm *kvm); int kvm_arch_create_vm_debugfs(struct kvm *kvm); diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 10bfc88a69f7..6326852bfb3d 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -4042,11 +4042,22 @@ static bool vcpu_dy_runnable(struct kvm_vcpu *vcpu) return false; } +/* + * By default, simply query the target vCPU's current mode when checking if a + * vCPU was preempted in kernel mode. All architectures except x86 (or more + * specifical, except VMX) allow querying whether or not a vCPU is in kernel + * mode even if the vCPU is NOT loaded, i.e. using kvm_arch_vcpu_in_kernel() + * directly for cross-vCPU checks is functionally correct and accurate. + */ +bool __weak kvm_arch_vcpu_preempted_in_kernel(struct kvm_vcpu *vcpu) +{ + return kvm_arch_vcpu_in_kernel(vcpu); +} + bool __weak kvm_arch_dy_has_pending_interrupt(struct kvm_vcpu *vcpu) { return false; } - void kvm_vcpu_on_spin(struct kvm_vcpu *me, bool yield_to_kernel_mode) { struct kvm *kvm = me->kvm; @@ -4080,7 +4091,7 @@ void kvm_vcpu_on_spin(struct kvm_vcpu *me, bool yield_to_kernel_mode) continue; if (READ_ONCE(vcpu->preempted) && yield_to_kernel_mode && !kvm_arch_dy_has_pending_interrupt(vcpu) && - !kvm_arch_vcpu_in_kernel(vcpu)) + !kvm_arch_vcpu_preempted_in_kernel(vcpu)) continue; if (!kvm_vcpu_eligible_for_directed_yield(vcpu)) continue; From patchwork Wed Jan 10 00:39:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 186633 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2411:b0:101:2151:f287 with SMTP id m17csp498406dyi; Tue, 9 Jan 2024 16:41:00 -0800 (PST) X-Google-Smtp-Source: AGHT+IHsG/PaWpc/iIx0sVGoNt4K6OzzdjxVZOSJIBnLGV9v+KXOHPz96DaKy649b7kg9QuEzTPh X-Received: by 2002:a05:6358:904c:b0:175:649f:ebc4 with SMTP id f12-20020a056358904c00b00175649febc4mr214157rwf.12.1704847260127; Tue, 09 Jan 2024 16:41:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704847260; cv=none; d=google.com; s=arc-20160816; b=CujWJDq7ByEAObNnLuN9J7Zf4GS+Fdhr69RonnOVr9Nov0Q8Wrlrhd1kNDxtqPNa8Z UUrQpVtdk6Fh7dOfvt+GjuBCQ+58OQcLLIB3MPjiLUgoaqwFAAkyPyNN63yos2JP7808 DKqrXiStFgO+O/hQ3kQLRh3kVDH09+/VSOy872+GQYVLAL+PEn1/EtQB1tmgqoCeidzA p/HRcKi2yoNGFDizZRIRrs0l8AsQZSONDsAHd3xhyQ2yrCTxk96hW7bJ30Rc1nhm9iik 6REQ45LN4iz22atOCSPGKL1ILg68uS/dIfRHJ6lCXfnDLVyEIklP3xPGk+1dpvn+hHMk qemw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:from:subject:message-id:references:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:in-reply-to:date :reply-to:dkim-signature; bh=6xnKyEv4OBvotGnyOqTbS4nPA0NPUNoMw8n+LkAwHEU=; fh=/j5JD0kNmt6w2ElaoSjWxIvbDK7Ar0LSE5o5EAaCtME=; b=oPKpX+hXRgQAaKlwIDjP/gz+Sa9laLjiEr3iQ7660IbtCy3S+zyORg1ifSdt6YS6vV WumBbn59bQ54xayg12g6hzVE1FB3FZigd1R2pFF5/ywJMCuMB1kEwa7NFkJk+MDx8Lr+ EJRDgsW9jJ5yo6Oyhjv6PQfCachLpJnuJYPNBLNmAvz9DRq1tZyYEmdWuuHZo6RCoS34 bVUf/sVvqg6A51Z4H/lMrn/QhvJWTWhFkIKF6oXYmCJA02Y//wMr5Vv4zIhFzEtkj8wK ezyeGtLdzyKkwzPil2+GhhGFJSVgf59ggLWRhRsNzwBcHLf/27AJI4jV6Pm6+FMMOz+k rVKA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=XSWtWN7f; spf=pass (google.com: domain of linux-kernel+bounces-21589-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-21589-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id f3-20020a635103000000b005ce2b993254si2439978pgb.204.2024.01.09.16.40.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jan 2024 16:41:00 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-21589-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=XSWtWN7f; spf=pass (google.com: domain of linux-kernel+bounces-21589-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-21589-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id BF2DE281461 for ; Wed, 10 Jan 2024 00:40:59 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 57D30D51E; Wed, 10 Jan 2024 00:39:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XSWtWN7f" Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9FF554691 for ; Wed, 10 Jan 2024 00:39:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dbdb46770d7so4527766276.1 for ; Tue, 09 Jan 2024 16:39:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1704847184; x=1705451984; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=6xnKyEv4OBvotGnyOqTbS4nPA0NPUNoMw8n+LkAwHEU=; b=XSWtWN7fzQbbzIAWT1B2BF6Rik9aDdNQwqiBQYaglkEYF9/kL4ySWJKtEqxVcU0Q6h pHwuPqrAlH2dVU2o1GoOkk2E9GmumodNOpx7kAt0sC5LAizstjgCp95Fo9m+hEhOAKS9 J0YmrRRGwrgTrLZYWkhE7AbvXVD51ZaW6H+iL0OjbX2L91abrNhlS4TcU19J8VGra3we HKX1qpkn0nVmD9hqJqJNIqAUTrYJzuzkeU+dhe2D7vkyR4fN3ShQdAUEMOjFfo1ra313 RTGhtvCLyTQTwUCJtpa7qcLGkIrKjPLQVh2TLxtqk+0kQtrYN5+rKcfgFx8UcdtAhknj oV9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704847184; x=1705451984; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6xnKyEv4OBvotGnyOqTbS4nPA0NPUNoMw8n+LkAwHEU=; b=GD/HFCWUYbm91NuoRVzootRLquiyB0K/gW51tozUx01Dt3Mt555xrOY3B9vtQ9Uiiw 2NvrOBCK6UXP1gtyvuN3+0hyeLS0iVX9hbZ7nLhGjrHkUxPQLIUKt5ydpeinZBe4gBAN flTmYZtfl+Jj+zqz4bfUKh55yrIMWrCOTluMzSnj75St0CFX9DZ4J6zG19fxbdxz9Qe9 tJUJZ5DnNfAIkWVNUf4XxtWKJT8DIX6U6ZjcvxKZVCIksBU6V3sZgupTfnu1exOOLCWG ZBDd2i1r5CmG+sjbO7XL55kaflRgwZScwVS4uu+g4Ss2vvpU0GsamJZLxQXzD8qdH5ev ccPg== X-Gm-Message-State: AOJu0YyudBRb6dAY0X+VaZPYS045wtN/aVEwa2s9KPwdafUc/WJjIan7 mDbjPi2nbk/RQeckPdnARDXORcnyMgFqw0YPZA== X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6902:1348:b0:dbc:c697:63bd with SMTP id g8-20020a056902134800b00dbcc69763bdmr83934ybu.0.1704847184802; Tue, 09 Jan 2024 16:39:44 -0800 (PST) Reply-To: Sean Christopherson Date: Tue, 9 Jan 2024 16:39:36 -0800 In-Reply-To: <20240110003938.490206-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240110003938.490206-1-seanjc@google.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20240110003938.490206-3-seanjc@google.com> Subject: [PATCH 2/4] KVM: x86: Rely solely on preempted_in_kernel flag for directed yield From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Like Xu X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787661920197539083 X-GMAIL-MSGID: 1787661920197539083 Snapshot preempted_in_kernel using kvm_arch_vcpu_in_kernel() so that the flag is "accurate" (or rather, consistent and deterministic within KVM) for guest with protected state, and explicitly use preempted_in_kernel when checking if a vCPU was preempted in kernel mode instead of bouncing through kvm_arch_vcpu_in_kernel(). Drop the gnarly logic in kvm_arch_vcpu_in_kernel() that redirects to preempted_in_kernel if the target vCPU is not the "running", i.e. loaded, vCPU, as the only reason that code existed was for the directed yield case where KVM wants to check the CPL of a vCPU that may or may not be loaded on the current pCPU. Cc: Like Xu Signed-off-by: Sean Christopherson Reviewed-by: Yuan Yao --- arch/x86/kvm/x86.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 415509918c7f..77494f9c8d49 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -5062,8 +5062,7 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) int idx; if (vcpu->preempted) { - if (!vcpu->arch.guest_state_protected) - vcpu->arch.preempted_in_kernel = !static_call(kvm_x86_get_cpl)(vcpu); + vcpu->arch.preempted_in_kernel = kvm_arch_vcpu_in_kernel(vcpu); /* * Take the srcu lock as memslots will be accessed to check the gfn @@ -13093,7 +13092,7 @@ bool kvm_arch_dy_has_pending_interrupt(struct kvm_vcpu *vcpu) bool kvm_arch_vcpu_preempted_in_kernel(struct kvm_vcpu *vcpu) { - return kvm_arch_vcpu_in_kernel(vcpu); + return vcpu->arch.preempted_in_kernel; } bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu) @@ -13116,9 +13115,6 @@ bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu) if (vcpu->arch.guest_state_protected) return true; - if (vcpu != kvm_get_running_vcpu()) - return vcpu->arch.preempted_in_kernel; - return static_call(kvm_x86_get_cpl)(vcpu) == 0; } From patchwork Wed Jan 10 00:39:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 186634 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2411:b0:101:2151:f287 with SMTP id m17csp498452dyi; Tue, 9 Jan 2024 16:41:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IHP3nmDjT93/uLCxIS3PDL6hpmnwcqP2jV1IAuNNS22PbA0yd2+1cc6Kz/RsUkyHsPErNy4 X-Received: by 2002:ae9:f406:0:b0:783:2c1d:9176 with SMTP id y6-20020ae9f406000000b007832c1d9176mr281460qkl.110.1704847267206; Tue, 09 Jan 2024 16:41:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704847267; cv=none; d=google.com; s=arc-20160816; b=dOCb+ngJ/vubR+HkKCqq0kYfmuZQ8YV1o0SCrG1Rm7WNns8iSBDBrfAUaVrPGn7nwq oH5845/G1KnQ6IUuBpBjFuaI4EksHis7RGTSZUDXgmQgqLuTfQ0C/a1bRCM7YKj/u2ra QvdUUjBnolYN0ySCiJKQHLMLUJs6tZYI6qRnwvWEz3uos1RJ4C2yUeRwGGvgHLcZI7Zq rwUMgbX4JHRK8hV9GTp8wpd05A6zITsmnmrITR3wSmzmdsGcm8fIWewsyh6PK3+CYcFa miWIpKEIaI9jdOic4hpujeJGr42J1ngODT7Gz311NR2HAqDV1l8mKUNCs5UcHcquvp5O 3W0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:from:subject:message-id:references:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:in-reply-to:date :reply-to:dkim-signature; bh=Pqe71wm1M+G2sxafHwJo+rZxz6yjUptaYMkbv+1aMM0=; fh=/j5JD0kNmt6w2ElaoSjWxIvbDK7Ar0LSE5o5EAaCtME=; b=MghJufHYReRfPZO6UpXPx/PpOBrVLw1Qp76uNQlYG8KUhm4ZqJAzIOkkuHJGVh3vFP GOl7ZxCH/ih86O0YdQWeQhttZDXtAfOLZuVW51nD4CbVIUr5/6AhEzFJPWv07MjDyro9 XxXqHQr8gmW4eV2EgWn32R82R0yQujrv2YPnxrEBVCS//sHE3F4/vte8nezRhacNvsqX /V6ntpoh9bxiuLrWBH69RhdxXgPfL1oVHykFN1CCqmmL6pOgpqsbR8QkxfJIzmywnxLS Ktd0IZP3BcYaZ/FnYtDed+VgmnfCdRj5Svb0tQuCCxBoSAu+QzQPyOKTeGjnjdY/u521 lEtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=YZutqnol; spf=pass (google.com: domain of linux-kernel+bounces-21590-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-21590-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id s2-20020a05620a29c200b00783293452b2si3430215qkp.680.2024.01.09.16.41.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jan 2024 16:41:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-21590-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=YZutqnol; spf=pass (google.com: domain of linux-kernel+bounces-21590-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-21590-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 049281C25249 for ; Wed, 10 Jan 2024 00:41:07 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0B8EFDDA0; Wed, 10 Jan 2024 00:39:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="YZutqnol" Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2EC8753A6 for ; Wed, 10 Jan 2024 00:39:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-28c183f8205so4131316a91.3 for ; Tue, 09 Jan 2024 16:39:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1704847186; x=1705451986; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=Pqe71wm1M+G2sxafHwJo+rZxz6yjUptaYMkbv+1aMM0=; b=YZutqnol1HrLWmrIvBtq9YKcUcRem3wQuRHt0Z6JPlQJdhkdkkIy6b0H1Novt9dfrw x3Y1+dfoAsXhqHNqwgbrnIiRlbJrc1EZam8ca79n9SxW1xiOyB/jpe0vrw2kSzE91B7u 68QOdMNX6JKL3kBG7xhNoNfRph7JkNN9N6Do87ftmzaNsunYJBzQp7iEaDfW7t9SUP/I i3twlbvl2vaB70CY//4mX6SxTNsvZNX//3chVKTAw8c3k3CCWemLxE1nYOb0uQb0DkwQ zmJGzI7RlvjNTEOkWNt4KIEgXvGz/9cvXycDoWCuV8bse1qrm3bqFacrFtIUWnDFt3rd hUhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704847186; x=1705451986; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Pqe71wm1M+G2sxafHwJo+rZxz6yjUptaYMkbv+1aMM0=; b=ZUcjaq9oXAqYRG6nGpV/CS3N4EG8ndXde576AeO4VubeXRPkL0m5UajS1K2FbI66Ct 093SS5WWia6BDIk6eon6XaWJTTXwsKm4eEwufupj5jEXMv0O7GowDI+CrbBz1Oq9JT1E qW3pYRIHMnFeQ5prfOM9Wz1RgMW7lms0x9vjThi2H+zRokUZ8jnwN9D+xi6VLnEIMm10 hQ5Ti0bgSeAvWc1EA1UI1EGOqXltUw1dA8TVrdronYVAvIXr35UxThJ6qVydod/2IYLN oASlWwAHgL+I3vJy8SK37FusGW5aG1DNxvlXJTVYQ+YDaSfO1o77ni4na1v5Yow6CkG3 xkNw== X-Gm-Message-State: AOJu0Yx5j1xahQpfaxRqX72e+TN40Y/fhWLc/EO4JjlwrXiYAqyzN6U1 f3zq1zouiEwAzC3jRJyeNHArRDBSrRGxxlCCBg== X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90b:38c2:b0:28b:4489:38fc with SMTP id nn2-20020a17090b38c200b0028b448938fcmr10289pjb.2.1704847186504; Tue, 09 Jan 2024 16:39:46 -0800 (PST) Reply-To: Sean Christopherson Date: Tue, 9 Jan 2024 16:39:37 -0800 In-Reply-To: <20240110003938.490206-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240110003938.490206-1-seanjc@google.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20240110003938.490206-4-seanjc@google.com> Subject: [PATCH 3/4] KVM: x86: Clean up directed yield API for "has pending interrupt" From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Like Xu X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787661927865663235 X-GMAIL-MSGID: 1787661927865663235 Directly return the boolean result of whether or not a vCPU has a pending interrupt instead of effectively doing: if (true) return true; return false; Signed-off-by: Sean Christopherson Reviewed-by: Yuan Yao --- arch/x86/kvm/x86.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 77494f9c8d49..b7996a75d9a3 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -13083,11 +13083,8 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) bool kvm_arch_dy_has_pending_interrupt(struct kvm_vcpu *vcpu) { - if (kvm_vcpu_apicv_active(vcpu) && - static_call(kvm_x86_dy_apicv_has_pending_interrupt)(vcpu)) - return true; - - return false; + return kvm_vcpu_apicv_active(vcpu) && + static_call(kvm_x86_dy_apicv_has_pending_interrupt)(vcpu); } bool kvm_arch_vcpu_preempted_in_kernel(struct kvm_vcpu *vcpu) From patchwork Wed Jan 10 00:39:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 186636 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2411:b0:101:2151:f287 with SMTP id m17csp499852dyi; Tue, 9 Jan 2024 16:45:27 -0800 (PST) X-Google-Smtp-Source: AGHT+IFBZKVLUcrJzbjNj8xYjUX2hd8qaTK5K36MIJNaS9hhB6EF4IUMtaF2vC8kkW1hHj1jmr9B X-Received: by 2002:a05:6a00:13a8:b0:6da:bed1:c8b with SMTP id t40-20020a056a0013a800b006dabed10c8bmr2054831pfg.20.1704847527574; Tue, 09 Jan 2024 16:45:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704847527; cv=none; d=google.com; s=arc-20160816; b=E6ZM98eTsQMhaz03GvnO6TsdM/4R/yApQBudevyTWB4mBSWqJgF6YHzg0Tx5rBIHir D5KgWgmtqpkaYAx2pl7zb+TObdHt/v9R7F85KElOCba64KM1q3OKj8feY8fZMJcoLUip dtlUbNdrOZJMh2GjsLDuFP/25rG6TjgZBLUO4pTPtKBifH6KtrFo67qVHjzGt9lkRt6h IMkDjYKMMyfyZun+qaPi8b24AbDNjQEsMgaHlnuBPFK3cV7uKA0Yg7vsw3HT1GzcPUZW n62iTT2EezxOOhRCQirPSFS4cmPn5Dh38dqkLE005lssTKWKgG/JOTUK+fZIynxG2gv5 DrFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:from:subject:message-id:references:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:in-reply-to:date :reply-to:dkim-signature; bh=D4tvOVGYXZj07Mh3AbKScJlIRDF+gPUSkrxYwSocJBU=; fh=/j5JD0kNmt6w2ElaoSjWxIvbDK7Ar0LSE5o5EAaCtME=; b=r5SAwadNjLd3i5eqftwqHD04BTchtxXD7H4jG1kVUIjl159gQqHc2m+7/rvWlnKvyQ w9p2q1DcWsDTWOAbY+dhcvhyD9KA1cVxhuvNxSvmrd1OGRTqd3xa5ft3088kyviA4cN3 w0mz90WT8oUlVqd/XeRuRD6MivB2LLEMq7hOytcgfdc6ZQSkswNMx5027zsk5R0zynsk bS1JIS7xM38q/MmhleF/KMXEHOlgj9XMDF20tGaryMh4PmBHkUwEba6loAJ/14Ov1k3r UQrwQTabEQH+jctgmxv95L20D5j9+txlMcKMyylbu9bLavRVMHI429JQ+pRzfrqesKq6 74Lw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=eKOR2f2l; spf=pass (google.com: domain of linux-kernel+bounces-21591-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-21591-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id 10-20020a63164a000000b005c677a35324si2540888pgw.464.2024.01.09.16.45.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jan 2024 16:45:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-21591-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=eKOR2f2l; spf=pass (google.com: domain of linux-kernel+bounces-21591-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-21591-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 4945AB262B6 for ; Wed, 10 Jan 2024 00:41:27 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BA446DF6B; Wed, 10 Jan 2024 00:39:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="eKOR2f2l" Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E4DE944F for ; Wed, 10 Jan 2024 00:39:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dbedc37d66cso3176653276.3 for ; Tue, 09 Jan 2024 16:39:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1704847188; x=1705451988; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=D4tvOVGYXZj07Mh3AbKScJlIRDF+gPUSkrxYwSocJBU=; b=eKOR2f2lty8vnakGYTNRzUplaVRRnXqedSIK3sreykitPI9o67BRVaBrxSgFLagtTX E7idXtH06VESju55/7pn2PyR9wabHnLKrg5hFMvFSPAUBTkBm0GI+QypdLjs+qCwUrkd Tr00OJcLOoRFHnPquwThbMR409+RjGDPa2clm160YkiOxvc3vjm8NNC0mPmNBFOulQpN pUunmH8MValLTymY4F4IUS2XDYXCzQ/GV6a4oGQ/P7ko0du8/zY5NfxmxWjypNQDV4Pf AxCYZDRc/nO9+8OaCOAOu+L839lOI1VXgGoH5etbh4FrviDVDQGYl4DsLckswoz7/7vG Y7hA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704847188; x=1705451988; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=D4tvOVGYXZj07Mh3AbKScJlIRDF+gPUSkrxYwSocJBU=; b=X8oxZisewDyqgKX6YWgr160pa2FmWJjBUw+EgFPpvKJHnX/XuaQ5PZnVWBBp7dtO4F NUD7K3roSQibAlh/2Hn/sO/+xCaSYP+XTzyATCkG4do2TNDSZhSXYR4hK4GARZf4SLfg NfUHubyYduzrG+XlDS55Dd7eiAiE3hH9sE/9vwo7kCFobU3Z4/OS6ysrENOMs16ZwS0s SXN8wk+bfZqhRYhbF3sYY/YvFIduBa1o/xY6Jm2XJtURMAuaeWwYM+dNaGf4ZMniPRwf LZudMEQItmDKCSPSsCABSGfWR8eVdbqOvgFp8YJr0J0loU6csMvuzUQpk1bS70Pk9Xkm Oiwg== X-Gm-Message-State: AOJu0Yxbcxz/pLmLDbdGawDJ7rgRii8JUbbz5Aei/INgbRM/B5d6fYd1 hxsYA4WgGQ2B8v24Vd/xs5cOBk9SEp2G6eP7fw== X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:8749:0:b0:dbe:d426:c456 with SMTP id e9-20020a258749000000b00dbed426c456mr6512ybn.4.1704847188423; Tue, 09 Jan 2024 16:39:48 -0800 (PST) Reply-To: Sean Christopherson Date: Tue, 9 Jan 2024 16:39:38 -0800 In-Reply-To: <20240110003938.490206-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240110003938.490206-1-seanjc@google.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20240110003938.490206-5-seanjc@google.com> Subject: [PATCH 4/4] KVM: Add a comment explaining the directed yield pending interrupt logic From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Like Xu X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1787662201052591080 X-GMAIL-MSGID: 1787662201052591080 Add a comment to explain why KVM treats vCPUs with pending interrupts as in-kernel when a vCPU wants to yield to a vCPU that was preempted while running in kernel mode. Signed-off-by: Sean Christopherson --- virt/kvm/kvm_main.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 6326852bfb3d..4a9e7513c585 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -4089,6 +4089,13 @@ void kvm_vcpu_on_spin(struct kvm_vcpu *me, bool yield_to_kernel_mode) continue; if (kvm_vcpu_is_blocking(vcpu) && !vcpu_dy_runnable(vcpu)) continue; + + /* + * Treat the target vCPU as being in-kernel if it has a + * pending interrupt, as the vCPU trying to yield may + * be spinning waiting on IPI delivery, i.e. the target + * vCPU is in-kernel for the purposes of directed yield. + */ if (READ_ONCE(vcpu->preempted) && yield_to_kernel_mode && !kvm_arch_dy_has_pending_interrupt(vcpu) && !kvm_arch_vcpu_preempted_in_kernel(vcpu))