From nobody Fri Oct 3 16:47:17 2025 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 5EA3F1DA3D for ; Thu, 28 Aug 2025 00:02:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339325; cv=none; b=Olv2v3dOfZpjYn4HCd27d14n0BFWWu4TLKBQiRsyhyW49wTUuXdS2DPCgI8aW7OJLiciPu3dNoSG2TIEeNHpdYo0H9Xy4spRuwJV5XiZzvN8Q+hpEi0Zt6e9/JiKHo3vibGnmweSZyIwU4yiMtVZ+x2ZH11TeivZFZXISujvYXY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339325; c=relaxed/simple; bh=yezIQljWRff+Ph2Kkfldm8tP8XBUOynmTR8J0FoBino=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Qeo8rCmWZJrNbiSxbJtrGawtjH7g1WQf65EXSiXBp4875RlsI+bbVDrPDMoOzR46rtLuHKBgJdZX24FuQj4Xu7/OKEotLqKbPHcgLstUIgEqStlKiQJPz6xWqpyoTy/UpwdwvGEBw21K7mNnEEWZTGru9PciDQku/sw1CsHKAaY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=LYm0wZ+2; arc=none smtp.client-ip=209.85.210.202 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="LYm0wZ+2" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-7720cb56ee3so696698b3a.1 for ; Wed, 27 Aug 2025 17:02:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756339324; x=1756944124; 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=kCYLCx+qR2vxxpcmuDTRXW8z6xS3j6g2rCWoMpSsv0A=; b=LYm0wZ+2LAQFXy2+f47kTv5INk+IEhM5tDGrt1mLK2eKgQYHHae8l8OHKHYLJ62k4N QTQGcUJt/xbjtaz4uXq0Aul5xaiXiBwJqrfYfwBt18C8CjGJpMb/s5siJnOJ7llSugcd waOnNEmm2+jKt4pRj+8B1xLrkwJaHqiKo0GLmcMXEDLKnmPVlcSGvLeAqFzeYg9jfy3L HC9XwOMNq0m0Ntv4qCgs1sVzNGXuAA/XWvaim7bIBcQGN49CV0ihpCEINl5h1HZ5a7xn bJ8H8rXeqCAScAp3pNUsmbDqMi+am5k3m5EbIAtjxmrdHbESkEAp69N/mHEzTDos76k4 jHxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756339324; x=1756944124; 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=kCYLCx+qR2vxxpcmuDTRXW8z6xS3j6g2rCWoMpSsv0A=; b=RgexnB9ZsbfcTFKxj96x8Apb5z2Tp+jLFl55g77Ya6gqgxqtFyyn94hm5zSuWgjilV LS9aIJpompN33ZabA0iDT07A4hFZ1fVTkNoe9o3nrnrxSL8ReiHzls+QnADtMU77zExN r/tJw7zryWzaKzakfXDrgOpUMgFy3UuqEB1V+uEMTVECpzvnDXGA4qtjDupqZthvVZfb BWpYwUbbdZPutwQpq43fpAS8JvzGZdSrdf1dLuYG/FPVQ51SVX9/q2oVaGhrKgB2lP7+ mZ9nvfX7oONdFmXL492WjA8nAOV0zer26h9G5RWAkXsX19wAeKW/LbmIlcCFp9tbJSUH 8x0Q== X-Gm-Message-State: AOJu0YxHTlq0ih2IILVreUo+mUTMDUvBBAw+pwTq3nP0ko+yDiXBvAgd A15nhZ9qpMYXSKyl879R2h9d1dbY/B8M1Dk00wINZ6r3e3YfTjDGaPiuotiLXX+fNBZDW8eCMaw 54egZ3A== X-Google-Smtp-Source: AGHT+IHDUlpPfgfETOO31fD//wXWMymV5Mnw/Y+lifpogBKPY1IBHbcv76HZ+xFt3eQXYgFR8TyJX2ZK1/M= X-Received: from pfgs8.prod.google.com ([2002:a05:6a00:1788:b0:771:f315:17c4]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:a85:b0:76b:d8f7:d30b with SMTP id d2e1a72fcca58-7702f9f4896mr22345026b3a.10.1756339323354; Wed, 27 Aug 2025 17:02:03 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 27 Aug 2025 17:01:50 -0700 In-Reply-To: <20250828000156.23389-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: <20250828000156.23389-1-seanjc@google.com> X-Mailer: git-send-email 2.51.0.268.g9569e192d0-goog Message-ID: <20250828000156.23389-2-seanjc@google.com> Subject: [PATCH v2 1/7] Drivers: hv: Handle NEED_RESCHED_LAZY before transferring to guest From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Catalin Marinas , Will Deacon , Tianrui Zhao , Bibo Mao , Huacai Chen , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Peter Zijlstra , Andy Lutomirski , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvm@vger.kernel.org, loongarch@lists.linux.dev, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-hyperv@vger.kernel.org, rcu@vger.kernel.org, Nuno Das Neves , Mukesh R Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Check for NEED_RESCHED_LAZY, not just NEED_RESCHED, prior to transferring control to a guest. Failure to check for lazy resched can unnecessarily delay rescheduling until the next tick when using a lazy preemption model. Note, ideally both the checking and processing of TIF bits would be handled in common code, to avoid having to keep three separate paths synchronized, but defer such cleanups to the future to keep the fix as standalone as possible. Cc: Nuno Das Neves Cc: Mukesh R Fixes: 621191d709b1 ("Drivers: hv: Introduce mshv_root module to expose /de= v/mshv to VMMs") Fixes: 64503b4f4468 ("Drivers: hv: Introduce mshv_vtl driver") Signed-off-by: Sean Christopherson Reviewed-by: Nuno Das Neves Tested-by: Nuno Das Neves --- drivers/hv/mshv_common.c | 2 +- drivers/hv/mshv_root_main.c | 3 ++- drivers/hv/mshv_vtl_main.c | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/hv/mshv_common.c b/drivers/hv/mshv_common.c index 6f227a8a5af7..eb3df3e296bb 100644 --- a/drivers/hv/mshv_common.c +++ b/drivers/hv/mshv_common.c @@ -151,7 +151,7 @@ int mshv_do_pre_guest_mode_work(ulong th_flags) if (th_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) return -EINTR; =20 - if (th_flags & _TIF_NEED_RESCHED) + if (th_flags & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)) schedule(); =20 if (th_flags & _TIF_NOTIFY_RESUME) diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c index 932932cb91ea..0d849f09160a 100644 --- a/drivers/hv/mshv_root_main.c +++ b/drivers/hv/mshv_root_main.c @@ -484,7 +484,8 @@ mshv_vp_wait_for_hv_kick(struct mshv_vp *vp) static int mshv_pre_guest_mode_work(struct mshv_vp *vp) { const ulong work_flags =3D _TIF_NOTIFY_SIGNAL | _TIF_SIGPENDING | - _TIF_NEED_RESCHED | _TIF_NOTIFY_RESUME; + _TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY | + _TIF_NOTIFY_RESUME; ulong th_flags; =20 th_flags =3D read_thread_flags(); diff --git a/drivers/hv/mshv_vtl_main.c b/drivers/hv/mshv_vtl_main.c index dc6594ae03ad..12f5e77b7095 100644 --- a/drivers/hv/mshv_vtl_main.c +++ b/drivers/hv/mshv_vtl_main.c @@ -728,7 +728,8 @@ static int mshv_vtl_ioctl_return_to_lower_vtl(void) preempt_disable(); for (;;) { const unsigned long VTL0_WORK =3D _TIF_SIGPENDING | _TIF_NEED_RESCHED | - _TIF_NOTIFY_RESUME | _TIF_NOTIFY_SIGNAL; + _TIF_NOTIFY_RESUME | _TIF_NOTIFY_SIGNAL | + _TIF_NEED_RESCHED_LAZY; unsigned long ti_work; u32 cancel; unsigned long irq_flags; --=20 2.51.0.268.g9569e192d0-goog From nobody Fri Oct 3 16:47:17 2025 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 2633512FF6F for ; Thu, 28 Aug 2025 00:02:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339327; cv=none; b=bpj4dw4CMk5ghKAARKnghSo4jbsgOc0JEe0gfLSgATSVx/GMqWh10m81edGI5oYDlQTSzxYtH4Q6AqeGJq2/5cu3UFdTWFbnhAcfkvxi45ba33trJ/OZImXFKIsdnr2E4vQJcaIZWT0GlNg7wOuy9X606UaEWQk2P4Qbr8nvf1U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339327; c=relaxed/simple; bh=8tZ83PeYs29SmFwlLYawA90+tGBTxdUNJGqvgVUYI08=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=W1BVJ6GpM9r2sODxKthvJZ2Chn0tvSx3/ibOe+HlfY/P6oGZsBnteLVBGwf11HwiyedlftbOYQmcfx9IFjkpewBp6dlZTniCKm2J2kWe337oMhLd+h6MfozpX+McD1Vn3sw7JvnE99NuM9zgA286yDNi187f4048mpxB+qUyrQo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=yo+AOOCE; arc=none smtp.client-ip=209.85.216.73 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="yo+AOOCE" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-324e4c3af5fso368143a91.3 for ; Wed, 27 Aug 2025 17:02:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756339325; x=1756944125; 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=hDymskQNp6wG2uiiMHxVPzsL1nAJPxy4zRxFOrP95kA=; b=yo+AOOCEgQsPtXsvEZ3HLVcsX1TmXb2v7Tx+yKYWB17Taupoci1mHoBlWVe28a4bs2 AsY+GUQDG1/883XQ1o4nO+jPq0xLEyraGBiG40dNPFuzgziGLXNIkOfMQSyTcXohftCe h09d91Rq2CcH4LY16snMRZa12iL9z9kOD/D+IoXX/waF3iGnXfqulzx7IHl8igthuTyl Z8ZIwoN1Ub8S9PovdB9eTq6QHzlcYByPjvhk32rvT87HJBhNKqzv4lV7Zt28QP4B3bck P0JDPtsS5c+8H3vMjven3/YyoNrd2Sdnz9fXfParttV3jgLhuu7PhwMyVjFMwy8YYYSL YcqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756339325; x=1756944125; 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=hDymskQNp6wG2uiiMHxVPzsL1nAJPxy4zRxFOrP95kA=; b=IqhyqEHz8V9MeP5tMK/eiToXL0ox8YzKvD9U/5GUsO1tTVfQ+zaJPfSs5kzAvdke9T ugfJoei7xco5klaSQokFeT1bDTpWpm4nYX3Hlk+UtEkL+q936qTn/CNdyv81iY/j25Xt Q0ZtFAUHbyeB92Ka+fCMAbT0q/V2wW+IQ6QjP/FfuOoEc+e8WhllOwoZsW955zQAm1OC mubFveNYYfrSH5gG1fbxYy7/BFR5eYOkU9zm1ZgcbLMWnJAkYAyF3JAgZ7kn/F4b4mGp qtZGZzNRp+mPZCCVzc18ORw8XUADNYNUxrgH2k/NkO7Z0bavTafN1MDBCIu0xpoajUEU F/Jw== X-Gm-Message-State: AOJu0YzIheEPH1Og3N1dklHb2qHHGu3W0CF1PLCvUUnuD4bUyIWF7XkG DMhmVAVJZ6vA8aBuCv2xYBpz5YaQWrcsFG+oelmksbQULCd2PR2/IS+gHrCDyp1z2k/Z4+xHrQh vPXQL4A== X-Google-Smtp-Source: AGHT+IEpldWCysonYjdHETjodWyZtDlIBYcwDxX/6JZFBAIAnGNdK+zSnqMrfXxPLk2m5pFyKQhTG4/yaKw= X-Received: from pjj15.prod.google.com ([2002:a17:90b:554f:b0:325:833b:6f27]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:55c4:b0:327:aaeb:e814 with SMTP id 98e67ed59e1d1-327aaebf1b1mr940666a91.23.1756339325323; Wed, 27 Aug 2025 17:02:05 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 27 Aug 2025 17:01:51 -0700 In-Reply-To: <20250828000156.23389-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: <20250828000156.23389-1-seanjc@google.com> X-Mailer: git-send-email 2.51.0.268.g9569e192d0-goog Message-ID: <20250828000156.23389-3-seanjc@google.com> Subject: [PATCH v2 2/7] Drivers: hv: Disentangle VTL return cancellation from SIGPENDING From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Catalin Marinas , Will Deacon , Tianrui Zhao , Bibo Mao , Huacai Chen , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Peter Zijlstra , Andy Lutomirski , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvm@vger.kernel.org, loongarch@lists.linux.dev, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-hyperv@vger.kernel.org, rcu@vger.kernel.org, Nuno Das Neves , Mukesh R Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Check for return to a lower VTL being cancelled separately from handling pending TIF-based work, as there is no need to immediately process pending work; the kernel will immediately exit to userspace (ignoring preemption) and handle the pending work at that time. Disentangling cancellation from the TIF-based work will allow switching to common virtualization APIs for detecting and processing pending work. Signed-off-by: Sean Christopherson --- drivers/hv/mshv_vtl_main.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/hv/mshv_vtl_main.c b/drivers/hv/mshv_vtl_main.c index 12f5e77b7095..aa09a76f0eff 100644 --- a/drivers/hv/mshv_vtl_main.c +++ b/drivers/hv/mshv_vtl_main.c @@ -731,19 +731,21 @@ static int mshv_vtl_ioctl_return_to_lower_vtl(void) _TIF_NOTIFY_RESUME | _TIF_NOTIFY_SIGNAL | _TIF_NEED_RESCHED_LAZY; unsigned long ti_work; - u32 cancel; unsigned long irq_flags; struct hv_vp_assist_page *hvp; int ret; =20 local_irq_save(irq_flags); + if (READ_ONCE(mshv_vtl_this_run()->cancel)) { + local_irq_restore(irq_flags); + preempt_enable(); + return -EINTR; + } + ti_work =3D READ_ONCE(current_thread_info()->flags); - cancel =3D READ_ONCE(mshv_vtl_this_run()->cancel); - if (unlikely((ti_work & VTL0_WORK) || cancel)) { + if (unlikely(ti_work & VTL0_WORK)) { local_irq_restore(irq_flags); preempt_enable(); - if (cancel) - ti_work |=3D _TIF_SIGPENDING; ret =3D mshv_do_pre_guest_mode_work(ti_work); if (ret) return ret; --=20 2.51.0.268.g9569e192d0-goog From nobody Fri Oct 3 16:47:17 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.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 ECF0618FC92 for ; Thu, 28 Aug 2025 00:02:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339329; cv=none; b=bH8sC0mmYET/gFxEvfXcHue6FNmDHo1U7ORgUaKFy77+6YghQ6cs5IMu2q0rVEhywYnPNnOrsXsgddqszvI1YX9/KhvkGujCRM2fMpu61AmpXNoaas83CiRgtFaVYIOOfDluCo+wvuoSqMTzvubdHdAvUFa7ZK6TnyB3XibLT/o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339329; c=relaxed/simple; bh=TvCX+8FkP7MFHYKfg/0KhAOHMZdZcfiHEdWLUolI1Zo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=sDsz+fLaSBuSrJUCxST1j3EOHemcdTgLTHixQ6u2JNMHbPzqYSeXhFGSyoaAus2DOjBzuqG+FUlbfQvl7u2EvdI1xCKTjRCHnlz4xizOpAL3RmvNPSWrdTFROK9SczG0KyBMPIybOeYPycQTa07WnRrlCIPpfVqDtrClNvgtJeI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=FwGjinL6; arc=none smtp.client-ip=209.85.210.201 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="FwGjinL6" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-770593ba14fso519163b3a.2 for ; Wed, 27 Aug 2025 17:02:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756339327; x=1756944127; 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=vhbQgqknyAyVeKaXs8kP6grJ1hrwQUkSmJiE25IRpuQ=; b=FwGjinL6djn0iX+mCxZgJ6VgeV7qBbQopg+f1tDftimoOdpxj0PE1cGZiTSMRRw8Z4 bsRWFdiReGjHjjopEPvTo+25kWh2mZ4u6aFcZYEGcC+Nmhtxko3ZIGCaMf/iqh0FuS9Z 7RlAjao2y4po8a6a/DfbW38NOdniScT5kUdoRmDH/UVwTTLM0PmaKTNDlZGs9inTQbU7 82iOF6OVv73twgxpHgP6raLu6kw2J8MpCQui73xwaIj9RxdWX1OTBMLwP2tBizWnQpY4 zmdvSDiF/+ZLqrCr+oqyRDYlp47T7+7/i0/sfonud1ThTK1460RajvcywdvQbvTPl596 +cYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756339327; x=1756944127; 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=vhbQgqknyAyVeKaXs8kP6grJ1hrwQUkSmJiE25IRpuQ=; b=vIL+eiA8j+aOZGNLkAN9270BtwKOxsfgR7VH6t5X062Ti1cvax24gcBcGKQ5Dv/thE /Nl2B59PYM0dft66YVOESNmuCW6yt3uUhe1BDG81FPZctUyiR4uUL91zyGTZK/qSd1WW GeV1teOjbWnvXBqNxo0Z9UCqFSe1YXBRJUKg/dCi8gEGFc1fq/t4Ojao29/z0eKbHbj8 hvsAtZxGy3X7yNIDDfHN/NV/o2jWBL+nene83uhb4oLi5qXQosO6l7ddbrxD3YF6T3tF KLcOh+Gfb7gGguSaYG/Ft2ATpILhYtV0ESS7IcJMj3904o4sZJdSKwqtXDyxLssCLehF ksCQ== X-Gm-Message-State: AOJu0YwVAuuh/TId9bKsaL31VHuyTt+1/mMmCSm/XSlajB82S9h0VnaH PYSZzC4lcg3dMVPHXUh0BWy+6n2atZ221Qo6vCEz+xYJbaTFxfsV/tSu5eE6ypGQO2Y1UGwbDl4 zq66bCw== X-Google-Smtp-Source: AGHT+IFSTSPK462uYm9CJ0EAHOKjQ8TiWstiYBGpgePwdPA6VvAffLDDZpu/ZHt6d1MsFofssMNf6pVc4TI= X-Received: from pfbdr10.prod.google.com ([2002:a05:6a00:4a8a:b0:772:a5a:298b]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:4b46:b0:76e:885a:c1c9 with SMTP id d2e1a72fcca58-7702fc24f39mr26347774b3a.27.1756339327187; Wed, 27 Aug 2025 17:02:07 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 27 Aug 2025 17:01:52 -0700 In-Reply-To: <20250828000156.23389-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: <20250828000156.23389-1-seanjc@google.com> X-Mailer: git-send-email 2.51.0.268.g9569e192d0-goog Message-ID: <20250828000156.23389-4-seanjc@google.com> Subject: [PATCH v2 3/7] Drivers: hv: Disable IRQs only after handling pending work before VTL return From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Catalin Marinas , Will Deacon , Tianrui Zhao , Bibo Mao , Huacai Chen , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Peter Zijlstra , Andy Lutomirski , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvm@vger.kernel.org, loongarch@lists.linux.dev, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-hyperv@vger.kernel.org, rcu@vger.kernel.org, Nuno Das Neves , Mukesh R Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Swap the order of checking for TIF-based work and cancellation, and disable IRQs only after checking and processing TIF-based work; checking TIF with IRQs enabled is a-ok, e.g. IRQs and preemption _must_ be enabled before handling the pending work. Signed-off-by: Sean Christopherson --- drivers/hv/mshv_vtl_main.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/hv/mshv_vtl_main.c b/drivers/hv/mshv_vtl_main.c index aa09a76f0eff..4ca13c54c0a0 100644 --- a/drivers/hv/mshv_vtl_main.c +++ b/drivers/hv/mshv_vtl_main.c @@ -735,16 +735,8 @@ static int mshv_vtl_ioctl_return_to_lower_vtl(void) struct hv_vp_assist_page *hvp; int ret; =20 - local_irq_save(irq_flags); - if (READ_ONCE(mshv_vtl_this_run()->cancel)) { - local_irq_restore(irq_flags); - preempt_enable(); - return -EINTR; - } - ti_work =3D READ_ONCE(current_thread_info()->flags); if (unlikely(ti_work & VTL0_WORK)) { - local_irq_restore(irq_flags); preempt_enable(); ret =3D mshv_do_pre_guest_mode_work(ti_work); if (ret) @@ -753,6 +745,13 @@ static int mshv_vtl_ioctl_return_to_lower_vtl(void) continue; } =20 + local_irq_save(irq_flags); + if (READ_ONCE(mshv_vtl_this_run()->cancel)) { + local_irq_restore(irq_flags); + preempt_enable(); + return -EINTR; + } + mshv_vtl_return(&mshv_vtl_this_run()->cpu_context); local_irq_restore(irq_flags); =20 --=20 2.51.0.268.g9569e192d0-goog From nobody Fri Oct 3 16:47:17 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.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 1DC621A3160 for ; Thu, 28 Aug 2025 00:02:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339331; cv=none; b=sDpsa8D2gNHTECh+MJPLQcpXeHxt9SoIqWR+Yoz7txBP3+SCOCL6QE2BNJ+jdx0CZuvF1YPMbomfjfkBIMS67n/be8C7KAALuwEoq9MTpn3HyrMRlPxcHRT1nq6YQ/ucNcbv4+2kj89mPB8HePkc3vKZJEYr9vPD7iR20+KJmoE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339331; c=relaxed/simple; bh=XyMaLcJYGhb12wif0PPs0kTeGE1PmcfW6YNjB0soymQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=lO7YtVwpQcHc8qUFIRGb/FqtkdNlrR0KUWNwjMnpKx/WcPPIZfpLCnqzf2QqEljf9k+duhWudjGeR+nbfvDp8SStMDTrqBA1yIvPns5/j7yJ0zNbVgVbKIxiZYobDHow1DBy6CVftaQ95KtHZ3AK4MYxAkh7GAP9+w9f42SByhs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=PwZea+1z; arc=none smtp.client-ip=209.85.214.201 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="PwZea+1z" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-246364842e7so7175695ad.1 for ; Wed, 27 Aug 2025 17:02:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756339329; x=1756944129; 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=t0b6nfV8ACtHngFYCFD4a6X0clQjFgCPW+omDXt4bTs=; b=PwZea+1z48Xmutbw39sD2L02BmTSTl+x902t+tiiCmEO3/c+YIEhFqJC1bTT86dpiW lQfeCg29thtUOQ7gp+a1SXW2BlHxqQxqFnEc6vgCPnpHy2wF9mSv5VEn6RiL1u6Ku1ez Tcy0jkALlodkhv9uYF34VPmsykcOJoyqYY/ZgTvXkxWAc86N75ucEAePMGPfdDTa7w3n laZNPCrbl0fBLlNqETJbuHoP+JwJyCiRqkzhk5vE91sIWcMeC4RFptAbajSNv0cCE4Sg oNnTTERvsumfJ2L3Nl1OGHLKXXkBRee5w1S/ewdYVhNcQwP7bKwmuilUim4ZeEcWCo3L WcZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756339329; x=1756944129; 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=t0b6nfV8ACtHngFYCFD4a6X0clQjFgCPW+omDXt4bTs=; b=nJDIOdmv0U1LqFICwWos+IHa4jfDePB7bzCZNLekHchr0M8+BYcI+4aohHdlwM8yAp 7bCJNI5+9LHjKm4S5JdDBoIqRBMHh7WrCqAprLq2NYd4zYTgWxwdzILgR2L3KHP/frYF /GPAzUsa5DrqDJfNgES+75wL18YkvMc7PY6Fxkn64opTOaZQ1e1pItsmV8xhIMVy+LiC XSCnm4c18IMvWTs0nxkW4GTEERh6UUnF+FremBmubpxuXdl0ZbN0QIElqbcgRe9bDBz2 yN8LGwP2PwWleVldljnvGvPG88pduh7QT35CUhTaZun+cN5PS2tWSnnkApDQ2BC6g0Ei xwrg== X-Gm-Message-State: AOJu0YwF2WqOjcOmi98liepgma3gX32yjth38FKK3wCWU4T3McAZ86Ql SkS7cXRpKP4m38GkqwLBMko6jFgiAGcrHNuH6PRC/HsxAWT/zLG7pXpdaCWKXLq4u13y8PqgOLA CBOvdUQ== X-Google-Smtp-Source: AGHT+IH/zSg0NOaA8AO8xJkIMVcmzaCiAN5K9jibnSscidupr23ZKkHWPw6r1BmEsVqQvRiXUejojziqfr0= X-Received: from pjbpm10.prod.google.com ([2002:a17:90b:3c4a:b0:31e:fac4:4723]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:238e:b0:240:50ef:2f00 with SMTP id d9443c01a7336-2462eea80fbmr326811935ad.26.1756339329158; Wed, 27 Aug 2025 17:02:09 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 27 Aug 2025 17:01:53 -0700 In-Reply-To: <20250828000156.23389-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: <20250828000156.23389-1-seanjc@google.com> X-Mailer: git-send-email 2.51.0.268.g9569e192d0-goog Message-ID: <20250828000156.23389-5-seanjc@google.com> Subject: [PATCH v2 4/7] entry/kvm: KVM: Move KVM details related to signal/-EINTR into KVM proper From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Catalin Marinas , Will Deacon , Tianrui Zhao , Bibo Mao , Huacai Chen , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Peter Zijlstra , Andy Lutomirski , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvm@vger.kernel.org, loongarch@lists.linux.dev, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-hyperv@vger.kernel.org, rcu@vger.kernel.org, Nuno Das Neves , Mukesh R Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move KVM's morphing of pending signals into userspace exits into KVM proper, and drop the @vcpu param from xfer_to_guest_mode_handle_work(). How KVM responds to -EINTR is a detail that really belongs in KVM itself, and invoking kvm_handle_signal_exit() from kernel code creates an inverted module dependency. E.g. attempting to move kvm_handle_signal_exit() into kvm_main.c would generate an linker error when building kvm.ko as a module. Dropping KVM details will also converting the KVM "entry" code into a more generic virtualization framework so that it can be used when running as a Hyper-V root partition. Lastly, eliminating usage of "struct kvm_vcpu" outside of KVM is also nice to have for KVM x86 developers, as keeping the details of kvm_vcpu purely within KVM allows changing the layout of the structure without having to boot into a new kernel, e.g. allows rebuilding and reloading kvm.ko with a modified kvm_vcpu structure as part of debug/development. Signed-off-by: Sean Christopherson Reviewed-by: Thomas Gleixner --- arch/arm64/kvm/arm.c | 3 +-- arch/loongarch/kvm/vcpu.c | 3 +-- arch/riscv/kvm/vcpu.c | 3 +-- arch/x86/kvm/vmx/vmx.c | 1 - arch/x86/kvm/x86.c | 3 +-- include/linux/entry-kvm.h | 11 +++-------- include/linux/kvm_host.h | 13 ++++++++++++- kernel/entry/kvm.c | 13 +++++-------- 8 files changed, 24 insertions(+), 26 deletions(-) diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 888f7c7abf54..418fd3043467 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -6,7 +6,6 @@ =20 #include #include -#include #include #include #include @@ -1177,7 +1176,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) /* * Check conditions before entering the guest */ - ret =3D xfer_to_guest_mode_handle_work(vcpu); + ret =3D kvm_xfer_to_guest_mode_handle_work(vcpu); if (!ret) ret =3D 1; =20 diff --git a/arch/loongarch/kvm/vcpu.c b/arch/loongarch/kvm/vcpu.c index d1b8c50941ca..514256b25ba1 100644 --- a/arch/loongarch/kvm/vcpu.c +++ b/arch/loongarch/kvm/vcpu.c @@ -4,7 +4,6 @@ */ =20 #include -#include #include #include #include @@ -251,7 +250,7 @@ static int kvm_enter_guest_check(struct kvm_vcpu *vcpu) /* * Check conditions before entering the guest */ - ret =3D xfer_to_guest_mode_handle_work(vcpu); + ret =3D kvm_xfer_to_guest_mode_handle_work(vcpu); if (ret < 0) return ret; =20 diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index f001e56403f9..251e787f2ebc 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -7,7 +7,6 @@ */ =20 #include -#include #include #include #include @@ -910,7 +909,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) run->exit_reason =3D KVM_EXIT_UNKNOWN; while (ret > 0) { /* Check conditions before entering the guest */ - ret =3D xfer_to_guest_mode_handle_work(vcpu); + ret =3D kvm_xfer_to_guest_mode_handle_work(vcpu); if (ret) continue; ret =3D 1; diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index aa157fe5b7b3..d7c86613e50a 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -28,7 +28,6 @@ #include #include #include -#include =20 #include #include diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index a1c49bc681c4..0b13b8bf69e5 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -59,7 +59,6 @@ #include #include #include -#include #include #include =20 @@ -11241,7 +11240,7 @@ static int vcpu_run(struct kvm_vcpu *vcpu) =20 if (__xfer_to_guest_mode_work_pending()) { kvm_vcpu_srcu_read_unlock(vcpu); - r =3D xfer_to_guest_mode_handle_work(vcpu); + r =3D kvm_xfer_to_guest_mode_handle_work(vcpu); kvm_vcpu_srcu_read_lock(vcpu); if (r) return r; diff --git a/include/linux/entry-kvm.h b/include/linux/entry-kvm.h index 16149f6625e4..3644de7e6019 100644 --- a/include/linux/entry-kvm.h +++ b/include/linux/entry-kvm.h @@ -21,8 +21,6 @@ _TIF_NOTIFY_SIGNAL | _TIF_NOTIFY_RESUME | \ ARCH_XFER_TO_GUEST_MODE_WORK) =20 -struct kvm_vcpu; - /** * arch_xfer_to_guest_mode_handle_work - Architecture specific xfer to gue= st * mode work handling function. @@ -32,12 +30,10 @@ struct kvm_vcpu; * Invoked from xfer_to_guest_mode_handle_work(). Defaults to NOOP. Can be * replaced by architecture specific code. */ -static inline int arch_xfer_to_guest_mode_handle_work(struct kvm_vcpu *vcp= u, - unsigned long ti_work); +static inline int arch_xfer_to_guest_mode_handle_work(unsigned long ti_wor= k); =20 #ifndef arch_xfer_to_guest_mode_work -static inline int arch_xfer_to_guest_mode_handle_work(struct kvm_vcpu *vcp= u, - unsigned long ti_work) +static inline int arch_xfer_to_guest_mode_handle_work(unsigned long ti_wor= k) { return 0; } @@ -46,11 +42,10 @@ static inline int arch_xfer_to_guest_mode_handle_work(s= truct kvm_vcpu *vcpu, /** * xfer_to_guest_mode_handle_work - Check and handle pending work which ne= eds * to be handled before going to guest mode - * @vcpu: Pointer to current's VCPU data * * Returns: 0 or an error code */ -int xfer_to_guest_mode_handle_work(struct kvm_vcpu *vcpu); +int xfer_to_guest_mode_handle_work(void); =20 /** * xfer_to_guest_mode_prepare - Perform last minute preparation work that diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 15656b7fba6c..598b9473e46d 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2,7 +2,7 @@ #ifndef __KVM_HOST_H #define __KVM_HOST_H =20 - +#include #include #include #include @@ -2450,6 +2450,17 @@ static inline void kvm_handle_signal_exit(struct kvm= _vcpu *vcpu) vcpu->run->exit_reason =3D KVM_EXIT_INTR; vcpu->stat.signal_exits++; } + +static inline int kvm_xfer_to_guest_mode_handle_work(struct kvm_vcpu *vcpu) +{ + int r =3D xfer_to_guest_mode_handle_work(); + + if (r) { + WARN_ON_ONCE(r !=3D -EINTR); + kvm_handle_signal_exit(vcpu); + } + return r; +} #endif /* CONFIG_KVM_XFER_TO_GUEST_WORK */ =20 /* diff --git a/kernel/entry/kvm.c b/kernel/entry/kvm.c index 8485f63863af..6fc762eaacca 100644 --- a/kernel/entry/kvm.c +++ b/kernel/entry/kvm.c @@ -1,17 +1,14 @@ // SPDX-License-Identifier: GPL-2.0 =20 #include -#include =20 -static int xfer_to_guest_mode_work(struct kvm_vcpu *vcpu, unsigned long ti= _work) +static int xfer_to_guest_mode_work(unsigned long ti_work) { do { int ret; =20 - if (ti_work & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) { - kvm_handle_signal_exit(vcpu); + if (ti_work & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) return -EINTR; - } =20 if (ti_work & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)) schedule(); @@ -19,7 +16,7 @@ static int xfer_to_guest_mode_work(struct kvm_vcpu *vcpu,= unsigned long ti_work) if (ti_work & _TIF_NOTIFY_RESUME) resume_user_mode_work(NULL); =20 - ret =3D arch_xfer_to_guest_mode_handle_work(vcpu, ti_work); + ret =3D arch_xfer_to_guest_mode_handle_work(ti_work); if (ret) return ret; =20 @@ -28,7 +25,7 @@ static int xfer_to_guest_mode_work(struct kvm_vcpu *vcpu,= unsigned long ti_work) return 0; } =20 -int xfer_to_guest_mode_handle_work(struct kvm_vcpu *vcpu) +int xfer_to_guest_mode_handle_work(void) { unsigned long ti_work; =20 @@ -44,6 +41,6 @@ int xfer_to_guest_mode_handle_work(struct kvm_vcpu *vcpu) if (!(ti_work & XFER_TO_GUEST_MODE_WORK)) return 0; =20 - return xfer_to_guest_mode_work(vcpu, ti_work); + return xfer_to_guest_mode_work(ti_work); } EXPORT_SYMBOL_GPL(xfer_to_guest_mode_handle_work); --=20 2.51.0.268.g9569e192d0-goog From nobody Fri Oct 3 16:47:17 2025 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 CCE55204C1A for ; Thu, 28 Aug 2025 00:02:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339333; cv=none; b=ICjQo8jyX57bHNIXUTez2lqMmzuO3yerYb+/UggIByOyEAYkVX3a6ARna3lyOglEJXAYSn+hlSuI+rFGp9E+G040K8oc20GVbS3I0FKbK02tG9kuB09KPo5nHYPvTshv1wwb+wr4yrVfFauP94d6OAe+2OCY2o8TYxioBheHvYc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339333; c=relaxed/simple; bh=lsbTtJ9REHlgrqBN+k6iaEHNVEPv1fMDNzSuVRZk8kQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=lVRjRzZzz12ApbzckztvIZzYZx21+QHq/PR6kQCI3Rku4G685kDSxK4E2bFthewsgMoYKfBK/+zCzvXiVWprTyxbCb+84qf9BQ6DH9hgSkhEw6uGFhlWsuk52Soc9TUuqYEK2+xftxaFSB5g9T0oj5nj3okG/KWZ/RDi02Vuejo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=qVi2AUVK; arc=none smtp.client-ip=209.85.216.73 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="qVi2AUVK" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-3235e45b815so405493a91.0 for ; Wed, 27 Aug 2025 17:02:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756339331; x=1756944131; 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=7ZBmpPS6PywnvKIddGOxOnP1jmQ+MNdB8M5wZqe5Cyo=; b=qVi2AUVKCwLQy5R04zWPPRucgyj4qO1yf8a48gMZyqHYJiyxJ8LILF+LtlfV0PrlmN BXQ3anT5Ty8dk4YwFa8rOcJY0UhxGDpB6ukt/5tATGaowl4F/CvNkoYvEE0Re4fxp7Eu bolvWFeITS41QU4FF/J1BgjHOhZdKixTFPgDJd9NOdL+mxOYoothF6XZc5vH8okXOZT9 xgETTd8416y2QYokrv3y5sZTIAvCtLig7UUDSMecddrsCrbtgnubCLBn6rhN5G39gX6d CnHTC/QD4L4QhgvJ/QmfUragKTZ5gwIYGMoWCSfhv55pNhobM26CZQ7oxHRMb6WFLqOa QUeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756339331; x=1756944131; 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=7ZBmpPS6PywnvKIddGOxOnP1jmQ+MNdB8M5wZqe5Cyo=; b=CYyhHSn+n7gYh4RCTQWUkISDrNiZxPCymQl9AMYrfFPtCevNLNt2/9nB7ccknrqfB2 rDBXqLLZ3Yy88SgUUfPRnRWNfi4FpMhtkPrbbcUqU+RwmAObZr7CNsew1PqinqjFnPxR iw81PepbwB8UVAXGxRYI4W03jZ/jaqYmTD9etBQCrTaZkw8R/XazvknFXhhcT//gx6uP nmZDwqvn8uvyf1nIhpIlg9EI4dIyB4Mv7bEdJYh+/knTb1U4QMEpa8OuUs3NWmVF2IJN JSYdQnTw0ukxVkt+4ISRVX7sa4bK4RIRWS/XfAs2oOBg4vpoWEVuN2rAXd9nslWgl/WG yaFA== X-Gm-Message-State: AOJu0YxFF0448D9RZ7AJ+TGzNfIOjcYQVtTlbVjW6YpiCidcretcQxqT qnH+h9ZlAkQPR73ZfxwpIIDRuh7TCn+/rPe5lfc2SGsG8U/S6ViBG/LAn0B66wf/Uv+gGGwnjHt BvNWC/w== X-Google-Smtp-Source: AGHT+IEObhMRiog6LB3x56k1ysUr452rBBv/DRbv5B4tUYWRR2fTs8YO333KIDdDJ77/kyKV99u2TWP8gGM= X-Received: from pjbpm6.prod.google.com ([2002:a17:90b:3c46:b0:325:238b:5dc6]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2ccd:b0:321:4760:c65a with SMTP id 98e67ed59e1d1-32517d1e054mr26335387a91.27.1756339331031; Wed, 27 Aug 2025 17:02:11 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 27 Aug 2025 17:01:54 -0700 In-Reply-To: <20250828000156.23389-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: <20250828000156.23389-1-seanjc@google.com> X-Mailer: git-send-email 2.51.0.268.g9569e192d0-goog Message-ID: <20250828000156.23389-6-seanjc@google.com> Subject: [PATCH v2 5/7] entry: Rename "kvm" entry code assets to "virt" to genericize APIs From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Catalin Marinas , Will Deacon , Tianrui Zhao , Bibo Mao , Huacai Chen , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Peter Zijlstra , Andy Lutomirski , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvm@vger.kernel.org, loongarch@lists.linux.dev, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-hyperv@vger.kernel.org, rcu@vger.kernel.org, Nuno Das Neves , Mukesh R Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename the "kvm" entry code files and Kconfigs to use generic "virt" nomenclature so that the code can be reused by other hypervisors (or rather, their root/dom0 partition drivers), without incorrectly suggesting the code somehow relies on and/or involves KVM. No functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: Joel Fernandes Reviewed-by: Thomas Gleixner --- MAINTAINERS | 2 +- arch/arm64/kvm/Kconfig | 2 +- arch/loongarch/kvm/Kconfig | 2 +- arch/riscv/kvm/Kconfig | 2 +- arch/x86/kvm/Kconfig | 2 +- include/linux/{entry-kvm.h =3D> entry-virt.h} | 8 ++++---- include/linux/kvm_host.h | 6 +++--- include/linux/rcupdate.h | 2 +- kernel/entry/Makefile | 2 +- kernel/entry/{kvm.c =3D> virt.c} | 2 +- kernel/rcu/tree.c | 6 +++--- virt/kvm/Kconfig | 2 +- 12 files changed, 19 insertions(+), 19 deletions(-) rename include/linux/{entry-kvm.h =3D> entry-virt.h} (94%) rename kernel/entry/{kvm.c =3D> virt.c} (97%) diff --git a/MAINTAINERS b/MAINTAINERS index fe168477caa4..c255048333f0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -10200,7 +10200,7 @@ L: linux-kernel@vger.kernel.org S: Maintained T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/entry F: include/linux/entry-common.h -F: include/linux/entry-kvm.h +F: include/linux/entry-virt.h F: include/linux/irq-entry-common.h F: kernel/entry/ =20 diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig index 713248f240e0..6f4fc3caa31a 100644 --- a/arch/arm64/kvm/Kconfig +++ b/arch/arm64/kvm/Kconfig @@ -25,7 +25,7 @@ menuconfig KVM select HAVE_KVM_CPU_RELAX_INTERCEPT select KVM_MMIO select KVM_GENERIC_DIRTYLOG_READ_PROTECT - select KVM_XFER_TO_GUEST_WORK + select VIRT_XFER_TO_GUEST_WORK select KVM_VFIO select HAVE_KVM_DIRTY_RING_ACQ_REL select NEED_KVM_DIRTY_RING_WITH_BITMAP diff --git a/arch/loongarch/kvm/Kconfig b/arch/loongarch/kvm/Kconfig index 40eea6da7c25..ae64bbdf83a7 100644 --- a/arch/loongarch/kvm/Kconfig +++ b/arch/loongarch/kvm/Kconfig @@ -31,7 +31,7 @@ config KVM select KVM_GENERIC_HARDWARE_ENABLING select KVM_GENERIC_MMU_NOTIFIER select KVM_MMIO - select KVM_XFER_TO_GUEST_WORK + select VIRT_XFER_TO_GUEST_WORK select SCHED_INFO select GUEST_PERF_EVENTS if PERF_EVENTS help diff --git a/arch/riscv/kvm/Kconfig b/arch/riscv/kvm/Kconfig index 5a62091b0809..c50328212917 100644 --- a/arch/riscv/kvm/Kconfig +++ b/arch/riscv/kvm/Kconfig @@ -30,7 +30,7 @@ config KVM select KVM_GENERIC_DIRTYLOG_READ_PROTECT select KVM_GENERIC_HARDWARE_ENABLING select KVM_MMIO - select KVM_XFER_TO_GUEST_WORK + select VIRT_XFER_TO_GUEST_WORK select KVM_GENERIC_MMU_NOTIFIER select SCHED_INFO select GUEST_PERF_EVENTS if PERF_EVENTS diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig index 2c86673155c9..f81074b0c0a8 100644 --- a/arch/x86/kvm/Kconfig +++ b/arch/x86/kvm/Kconfig @@ -40,7 +40,7 @@ config KVM_X86 select HAVE_KVM_MSI select HAVE_KVM_CPU_RELAX_INTERCEPT select HAVE_KVM_NO_POLL - select KVM_XFER_TO_GUEST_WORK + select VIRT_XFER_TO_GUEST_WORK select KVM_GENERIC_DIRTYLOG_READ_PROTECT select KVM_VFIO select HAVE_KVM_PM_NOTIFIER if PM diff --git a/include/linux/entry-kvm.h b/include/linux/entry-virt.h similarity index 94% rename from include/linux/entry-kvm.h rename to include/linux/entry-virt.h index 3644de7e6019..42c89e3e5ca7 100644 --- a/include/linux/entry-kvm.h +++ b/include/linux/entry-virt.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0 */ -#ifndef __LINUX_ENTRYKVM_H -#define __LINUX_ENTRYKVM_H +#ifndef __LINUX_ENTRYVIRT_H +#define __LINUX_ENTRYVIRT_H =20 #include #include @@ -10,7 +10,7 @@ #include =20 /* Transfer to guest mode work */ -#ifdef CONFIG_KVM_XFER_TO_GUEST_WORK +#ifdef CONFIG_VIRT_XFER_TO_GUEST_WORK =20 #ifndef ARCH_XFER_TO_GUEST_MODE_WORK # define ARCH_XFER_TO_GUEST_MODE_WORK (0) @@ -90,6 +90,6 @@ static inline bool xfer_to_guest_mode_work_pending(void) lockdep_assert_irqs_disabled(); return __xfer_to_guest_mode_work_pending(); } -#endif /* CONFIG_KVM_XFER_TO_GUEST_WORK */ +#endif /* CONFIG_VIRT_XFER_TO_GUEST_WORK */ =20 #endif diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 598b9473e46d..70ac2267d5d0 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -2,7 +2,7 @@ #ifndef __KVM_HOST_H #define __KVM_HOST_H =20 -#include +#include #include #include #include @@ -2444,7 +2444,7 @@ static inline int kvm_arch_vcpu_run_pid_change(struct= kvm_vcpu *vcpu) } #endif /* CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE */ =20 -#ifdef CONFIG_KVM_XFER_TO_GUEST_WORK +#ifdef CONFIG_VIRT_XFER_TO_GUEST_WORK static inline void kvm_handle_signal_exit(struct kvm_vcpu *vcpu) { vcpu->run->exit_reason =3D KVM_EXIT_INTR; @@ -2461,7 +2461,7 @@ static inline int kvm_xfer_to_guest_mode_handle_work(= struct kvm_vcpu *vcpu) } return r; } -#endif /* CONFIG_KVM_XFER_TO_GUEST_WORK */ +#endif /* CONFIG_VIRT_XFER_TO_GUEST_WORK */ =20 /* * If more than one page is being (un)accounted, @virt must be the address= of diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 120536f4c6eb..1e1f3aa375d9 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -129,7 +129,7 @@ static inline void rcu_sysrq_start(void) { } static inline void rcu_sysrq_end(void) { } #endif /* #else #ifdef CONFIG_RCU_STALL_COMMON */ =20 -#if defined(CONFIG_NO_HZ_FULL) && (!defined(CONFIG_GENERIC_ENTRY) || !defi= ned(CONFIG_KVM_XFER_TO_GUEST_WORK)) +#if defined(CONFIG_NO_HZ_FULL) && (!defined(CONFIG_GENERIC_ENTRY) || !defi= ned(CONFIG_VIRT_XFER_TO_GUEST_WORK)) void rcu_irq_work_resched(void); #else static __always_inline void rcu_irq_work_resched(void) { } diff --git a/kernel/entry/Makefile b/kernel/entry/Makefile index 77fcd83dd663..2333d70802e4 100644 --- a/kernel/entry/Makefile +++ b/kernel/entry/Makefile @@ -14,4 +14,4 @@ CFLAGS_common.o +=3D -fno-stack-protector =20 obj-$(CONFIG_GENERIC_IRQ_ENTRY) +=3D common.o obj-$(CONFIG_GENERIC_SYSCALL) +=3D syscall-common.o syscall_user_dispatc= h.o -obj-$(CONFIG_KVM_XFER_TO_GUEST_WORK) +=3D kvm.o +obj-$(CONFIG_VIRT_XFER_TO_GUEST_WORK) +=3D virt.o diff --git a/kernel/entry/kvm.c b/kernel/entry/virt.c similarity index 97% rename from kernel/entry/kvm.c rename to kernel/entry/virt.c index 6fc762eaacca..c52f99249763 100644 --- a/kernel/entry/kvm.c +++ b/kernel/entry/virt.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 =20 -#include +#include =20 static int xfer_to_guest_mode_work(unsigned long ti_work) { diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 174ee243b349..995489b72535 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -573,7 +573,7 @@ void rcutorture_format_gp_seqs(unsigned long long seqs,= char *cp, size_t len) } EXPORT_SYMBOL_GPL(rcutorture_format_gp_seqs); =20 -#if defined(CONFIG_NO_HZ_FULL) && (!defined(CONFIG_GENERIC_ENTRY) || !defi= ned(CONFIG_KVM_XFER_TO_GUEST_WORK)) +#if defined(CONFIG_NO_HZ_FULL) && (!defined(CONFIG_GENERIC_ENTRY) || !defi= ned(CONFIG_VIRT_XFER_TO_GUEST_WORK)) /* * An empty function that will trigger a reschedule on * IRQ tail once IRQs get re-enabled on userspace/guest resume. @@ -602,7 +602,7 @@ noinstr void rcu_irq_work_resched(void) if (IS_ENABLED(CONFIG_GENERIC_ENTRY) && !(current->flags & PF_VCPU)) return; =20 - if (IS_ENABLED(CONFIG_KVM_XFER_TO_GUEST_WORK) && (current->flags & PF_VCP= U)) + if (IS_ENABLED(CONFIG_VIRT_XFER_TO_GUEST_WORK) && (current->flags & PF_VC= PU)) return; =20 instrumentation_begin(); @@ -611,7 +611,7 @@ noinstr void rcu_irq_work_resched(void) } instrumentation_end(); } -#endif /* #if defined(CONFIG_NO_HZ_FULL) && (!defined(CONFIG_GENERIC_ENTRY= ) || !defined(CONFIG_KVM_XFER_TO_GUEST_WORK)) */ +#endif /* #if defined(CONFIG_NO_HZ_FULL) && (!defined(CONFIG_GENERIC_ENTRY= ) || !defined(CONFIG_VIRT_XFER_TO_GUEST_WORK)) */ =20 #ifdef CONFIG_PROVE_RCU /** diff --git a/virt/kvm/Kconfig b/virt/kvm/Kconfig index 727b542074e7..ce843db53831 100644 --- a/virt/kvm/Kconfig +++ b/virt/kvm/Kconfig @@ -87,7 +87,7 @@ config HAVE_KVM_VCPU_RUN_PID_CHANGE config HAVE_KVM_NO_POLL bool =20 -config KVM_XFER_TO_GUEST_WORK +config VIRT_XFER_TO_GUEST_WORK bool =20 config HAVE_KVM_PM_NOTIFIER --=20 2.51.0.268.g9569e192d0-goog From nobody Fri Oct 3 16:47:17 2025 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 E63FA225403 for ; Thu, 28 Aug 2025 00:02:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339335; cv=none; b=ugYgUKn71Oq3pDem7usEtIxsnoDmfe2ptDT59zpKxEmJjQclhgfAh4BADZWRSruYh2+9k0qvDvtLHIGM22GsKJ1RTp+4joiKY3KQnvktALZVQ8UbP7Yt1vdjHcff8PfcfNgYCyZ8adVtiCUOJynBdPAi1+R8Zu+UqiemInW+gvs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339335; c=relaxed/simple; bh=HB2czoPRXRoML34y9sGK0CPNDZK1NSst82B/XrgzCeI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=InNu5y4VUdYHN3e88nmpaMVn04gmLuSF9URQYNdnpHFKN91r9PYPqNvuxD0eQt2A3/hodpT3YP+dMFZrRgFv+8jycBpayoFS2jGB8EMOmqtPJvOxhzSD3MPmELASzCkKBxAhO4P8WmQSMzBrBJCsjWF4KAJnTPFV3HkWgj4DaXg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=cYoZOaTP; arc=none smtp.client-ip=209.85.216.73 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="cYoZOaTP" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-32752f91beaso435623a91.2 for ; Wed, 27 Aug 2025 17:02:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756339333; x=1756944133; 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=EmsaxLywmqXJrqAtwLwAP27sFBwlzqDgNEuWnDn/370=; b=cYoZOaTPFuAf+Db7HaxfsruIOBXoup/dWieeEWTsQqupSNoghDppsp+pHzUfq57ILL XaOVdawezy8HHtO/pKjrtDZfZZ2IfkcSivHuSU2jArq1I5yGA7TtE3abZpT+UcNaYUPr KteClzJ0UwKpHPAEsLAkMSFk5tqMFQCMMpZwTZ72g88almOPeep3Y9/xOoFPezW7nV5g xQvodxlfPsoCT3c8EaM3ahJKWmiFCXX8nl6ojOOnL1LC+qU+7XZFmF9Zw7dkAsux+lpk n2hfUZeckTa8Rdcs/ZL5oCMbfiB1ZjygX2lW/1alBGVyWdEPjYu/PmWvvpTrtOe2H/Z1 eEKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756339333; x=1756944133; 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=EmsaxLywmqXJrqAtwLwAP27sFBwlzqDgNEuWnDn/370=; b=czlMf33Oe7G7o+iot9K+5wQzF9rtmaSXQbK50P/ASDt0Bnhh+oSDX9+S2o6xqlzh4Q 72JmIlMMUWUnaKvGULgBiGgv8zOREt/gKWsAff2bFrM0WTFRe+dTKxUbxck42q3bdbi3 z59rRo2EmflWfsx/qJMgHZf1D3ZZ5/qcUKUtPjaLRMXkNhkg5pOyqMGdyrsoilTIS1ZG fNbZ72jsMQOAYSBOEcZpgPLdqndDJ1d4HNoWSwFsremeLJvVZGncVOQCWVBbmK8XIYAi fVv2xI7KEs5JSygtd1QEG2qxQrmkD14wPHJBY4agmkbJyNzXf8P391NJh+SzKNcHSmAd k82Q== X-Gm-Message-State: AOJu0Yz4vhbLYt68mYJuCW0o4lDwoivPgS/tO+h+xi2uvPZFH/WHNyma hJYRR0aHfbZbfHrW1YO6Jhfsrvw6alYb6I3DKnm4A/4OHy4tXZAdsd2MySaOiD95kuwhJ8JrfDW 5kt165w== X-Google-Smtp-Source: AGHT+IHWkrv7kVZHVzSto7MjJE9ImCnU6mvGeqto5tWqGBVv3p+HjVdYjEAK6cb7aWSN7qrvwO4+vOKCqys= X-Received: from pjur11.prod.google.com ([2002:a17:90a:d40b:b0:325:9404:7ff3]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2785:b0:31f:9114:ead8 with SMTP id 98e67ed59e1d1-32515e2d5a0mr28901913a91.6.1756339332928; Wed, 27 Aug 2025 17:02:12 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 27 Aug 2025 17:01:55 -0700 In-Reply-To: <20250828000156.23389-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: <20250828000156.23389-1-seanjc@google.com> X-Mailer: git-send-email 2.51.0.268.g9569e192d0-goog Message-ID: <20250828000156.23389-7-seanjc@google.com> Subject: [PATCH v2 6/7] Drivers: hv: Use common "entry virt" APIs to do work in root before running guest From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Catalin Marinas , Will Deacon , Tianrui Zhao , Bibo Mao , Huacai Chen , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Peter Zijlstra , Andy Lutomirski , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvm@vger.kernel.org, loongarch@lists.linux.dev, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-hyperv@vger.kernel.org, rcu@vger.kernel.org, Nuno Das Neves , Mukesh R Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the kernel's common "entry virt" APIs to handle pending work prior to (re)entering guest mode, now that the virt APIs don't have a superfluous dependency on KVM. No functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: Nuno Das Neves Tested-by: Nuno Das Neves --- drivers/hv/Kconfig | 1 + drivers/hv/mshv_root_main.c | 32 ++++++-------------------------- 2 files changed, 7 insertions(+), 26 deletions(-) diff --git a/drivers/hv/Kconfig b/drivers/hv/Kconfig index 2e8df09db599..894037afcbf9 100644 --- a/drivers/hv/Kconfig +++ b/drivers/hv/Kconfig @@ -66,6 +66,7 @@ config MSHV_ROOT # no particular order, making it impossible to reassemble larger pages depends on PAGE_SIZE_4KB select EVENTFD + select VIRT_XFER_TO_GUEST_WORK default n help Select this option to enable support for booting and running as root diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c index 0d849f09160a..7c83f656e071 100644 --- a/drivers/hv/mshv_root_main.c +++ b/drivers/hv/mshv_root_main.c @@ -8,6 +8,7 @@ * Authors: Microsoft Linux virtualization team */ =20 +#include #include #include #include @@ -481,29 +482,6 @@ mshv_vp_wait_for_hv_kick(struct mshv_vp *vp) return 0; } =20 -static int mshv_pre_guest_mode_work(struct mshv_vp *vp) -{ - const ulong work_flags =3D _TIF_NOTIFY_SIGNAL | _TIF_SIGPENDING | - _TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY | - _TIF_NOTIFY_RESUME; - ulong th_flags; - - th_flags =3D read_thread_flags(); - while (th_flags & work_flags) { - int ret; - - /* nb: following will call schedule */ - ret =3D mshv_do_pre_guest_mode_work(th_flags); - - if (ret) - return ret; - - th_flags =3D read_thread_flags(); - } - - return 0; -} - /* Must be called with interrupts enabled */ static long mshv_run_vp_with_root_scheduler(struct mshv_vp *vp) { @@ -524,9 +502,11 @@ static long mshv_run_vp_with_root_scheduler(struct msh= v_vp *vp) u32 flags =3D 0; struct hv_output_dispatch_vp output; =20 - ret =3D mshv_pre_guest_mode_work(vp); - if (ret) - break; + if (__xfer_to_guest_mode_work_pending()) { + ret =3D xfer_to_guest_mode_handle_work(); + if (ret) + break; + } =20 if (vp->run.flags.intercept_suspend) flags |=3D HV_DISPATCH_VP_FLAG_CLEAR_INTERCEPT_SUSPEND; --=20 2.51.0.268.g9569e192d0-goog From nobody Fri Oct 3 16:47:17 2025 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 8514E23F421 for ; Thu, 28 Aug 2025 00:02:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339337; cv=none; b=ks3MkAXUz/0kIFmLw0xWxbGBnrkfAbHDpc5YPA7zssUcf886Oq86rWsAqsrTspmPEuFvei3WuEOgCH08DFL0ZlT3SQg4paa28QoU1PMJ/qqvcJlt3/VFe5EHDwx9Iqqvmttwml5j5ha+XJhReIBF7Y+nfo/MRwlDbaMnwgqcSjs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756339337; c=relaxed/simple; bh=5KZra7rrb6EshYnRt06iajnZTBGSSVrTrCSYe32dt9s=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=e9hu+Vcy9GFKXKXK/4UevXBk068oHE5IEQD4REE4ipTPFIkkBRtN5mVdFd/zmjm75z9aUFShj5AWDwo48+h0yYUJb+nSKcOcgRqbNsulM77+rS6eLQ30WkjXgkBnYUIYhwub5yW/cSGIcQ7NEZxEHimucgfFwqZqyWZWmTq2BjM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=P3ILK07k; arc=none smtp.client-ip=209.85.216.73 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="P3ILK07k" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-324e4c3af5fso368378a91.3 for ; Wed, 27 Aug 2025 17:02:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756339335; x=1756944135; 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=qS5zxATrMXESBFPKwTqytXa2jxoDaW3HrytCSPyurss=; b=P3ILK07kHqpUGuivkSLsoI+MFv54KeHD0qtH79NPU/KqIIn8aXu3po2ImTA6Zbi1rb E5fBA7B2UekDDNvUsAKexzToVzRJc7Mw5dg7uHLZwb62LaaH+ax04wKyjta2qvvu3S+h kTOk1iAlOQBWuwZhpmkRB+iXKBRmnXgrckSG/m3GzzzExftf50JP43JiZxW6f235Lo7V fFCHf9fbjIGrlALSh3sn42twHZWzxgWNcnuQqOMarurbLQfJXVDcqoaiP3Wyv10FIbtY 4WAE16o5571YGlB8Lz65SnxkmdGx0ApLw47O36szCXI96jYaIvBsgiiEaF4hhKpQRkP3 /LPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756339335; x=1756944135; 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=qS5zxATrMXESBFPKwTqytXa2jxoDaW3HrytCSPyurss=; b=qLpl4NmB7uvbwBw4NdvDmp8MOg7stvCfkVj2Keh9WwjwnQtfGTS0rEH5+kxJpxKkgk zh35pWWNyH/AinPQgbp1aZo1NtKHJwz2TQnGLQgePOWf1Io3tObXANXo5g7928Q6T05C Q+gcmSTjY5huVaEo3ZhKNrWOqWGwRLKaQ01KLWJ/9LRhgBu52FoNxzwkxEz/1a4AGzXM yer8+Yz7mX6yqE6c67kFKO9lOmJ/vwCSYpetKCWM4rUrBBIGq1czXUKtTwVfWWCWOdY8 9P8aDn1an5HFAYvD2k8v48fYqJNrHo3hdALxLesR7NKc3S+HjbXeWc4nQvTWZkHrS5H3 h1Vg== X-Gm-Message-State: AOJu0Yxdj3GVn217nyPaRp5KJjXQ8qw4/coLyabYFmGzWxM6DMciuDk0 joyOE93uvbJdk3NI6vzbL/gBbAysSnLWXzYezRaPAVcq8+Jrfwal/ptEX7kY2uiY1CQLciGCPoR w3mO3hA== X-Google-Smtp-Source: AGHT+IHTwHRJ1LtJUNLrZJovplfjTJdtHnbpa9Rw0OlaHYLIVyGS/gJ8LisaniBrYJHJcn/KzpZqw55zABU= X-Received: from pjbsc11.prod.google.com ([2002:a17:90b:510b:b0:321:c36d:1b8a]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3941:b0:327:b01c:4fd4 with SMTP id 98e67ed59e1d1-327b01c52bcmr306189a91.2.1756339334767; Wed, 27 Aug 2025 17:02:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 27 Aug 2025 17:01:56 -0700 In-Reply-To: <20250828000156.23389-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: <20250828000156.23389-1-seanjc@google.com> X-Mailer: git-send-email 2.51.0.268.g9569e192d0-goog Message-ID: <20250828000156.23389-8-seanjc@google.com> Subject: [PATCH v2 7/7] Drivers: hv: Use "entry virt" APIs to do work before returning to lower VTL From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Catalin Marinas , Will Deacon , Tianrui Zhao , Bibo Mao , Huacai Chen , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Peter Zijlstra , Andy Lutomirski , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvm@vger.kernel.org, loongarch@lists.linux.dev, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-hyperv@vger.kernel.org, rcu@vger.kernel.org, Nuno Das Neves , Mukesh R Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the kernel's common "entry virt" APIs to handle pending work prior to returning to a lower VTL. Drop the now-defunct common MSHV helper for doing work as the VTL driver was the last user. No functional change intended. Signed-off-by: Sean Christopherson --- drivers/hv/Kconfig | 1 + drivers/hv/mshv.h | 2 -- drivers/hv/mshv_common.c | 22 ---------------------- drivers/hv/mshv_vtl_main.c | 11 +++-------- 4 files changed, 4 insertions(+), 32 deletions(-) diff --git a/drivers/hv/Kconfig b/drivers/hv/Kconfig index 894037afcbf9..b00b2b3fe3db 100644 --- a/drivers/hv/Kconfig +++ b/drivers/hv/Kconfig @@ -85,6 +85,7 @@ config MSHV_VTL # Therefore, do not attempt to access or modify MTRRs here. depends on !MTRR select CPUMASK_OFFSTACK + select VIRT_XFER_TO_GUEST_WORK default n help Select this option to enable Hyper-V VTL driver support. diff --git a/drivers/hv/mshv.h b/drivers/hv/mshv.h index 0340a67acd0a..d4813df92b9c 100644 --- a/drivers/hv/mshv.h +++ b/drivers/hv/mshv.h @@ -25,6 +25,4 @@ int hv_call_set_vp_registers(u32 vp_index, u64 partition_= id, u16 count, int hv_call_get_partition_property(u64 partition_id, u64 property_code, u64 *property_value); =20 -int mshv_do_pre_guest_mode_work(ulong th_flags); - #endif /* _MSHV_H */ diff --git a/drivers/hv/mshv_common.c b/drivers/hv/mshv_common.c index eb3df3e296bb..aa2be51979fd 100644 --- a/drivers/hv/mshv_common.c +++ b/drivers/hv/mshv_common.c @@ -138,25 +138,3 @@ int hv_call_get_partition_property(u64 partition_id, return 0; } EXPORT_SYMBOL_GPL(hv_call_get_partition_property); - -/* - * Handle any pre-processing before going into the guest mode on this cpu,= most - * notably call schedule(). Must be invoked with both preemption and - * interrupts enabled. - * - * Returns: 0 on success, -errno on error. - */ -int mshv_do_pre_guest_mode_work(ulong th_flags) -{ - if (th_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) - return -EINTR; - - if (th_flags & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)) - schedule(); - - if (th_flags & _TIF_NOTIFY_RESUME) - resume_user_mode_work(NULL); - - return 0; -} -EXPORT_SYMBOL_GPL(mshv_do_pre_guest_mode_work); diff --git a/drivers/hv/mshv_vtl_main.c b/drivers/hv/mshv_vtl_main.c index 4ca13c54c0a0..1eabed16aab9 100644 --- a/drivers/hv/mshv_vtl_main.c +++ b/drivers/hv/mshv_vtl_main.c @@ -8,6 +8,7 @@ * Naman Jain */ =20 +#include #include #include #include @@ -727,22 +728,16 @@ static int mshv_vtl_ioctl_return_to_lower_vtl(void) { preempt_disable(); for (;;) { - const unsigned long VTL0_WORK =3D _TIF_SIGPENDING | _TIF_NEED_RESCHED | - _TIF_NOTIFY_RESUME | _TIF_NOTIFY_SIGNAL | - _TIF_NEED_RESCHED_LAZY; - unsigned long ti_work; unsigned long irq_flags; struct hv_vp_assist_page *hvp; int ret; =20 - ti_work =3D READ_ONCE(current_thread_info()->flags); - if (unlikely(ti_work & VTL0_WORK)) { + if (__xfer_to_guest_mode_work_pending()) { preempt_enable(); - ret =3D mshv_do_pre_guest_mode_work(ti_work); + ret =3D xfer_to_guest_mode_handle_work(); if (ret) return ret; preempt_disable(); - continue; } =20 local_irq_save(irq_flags); --=20 2.51.0.268.g9569e192d0-goog