From nobody Fri Oct 3 21:07:57 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 EDACC304BB5 for ; Mon, 25 Aug 2025 20:06:34 +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=1756152397; cv=none; b=VmWBrDRWjRWDo70zRgzNathw9JjmewCNj+yKZP1+lYZcZxEkMDvK2Jb+80ytiFvOWsydnaott+55/nSlNxTUE3GyTZGQkBfy1pdXmkwMXURj9H/47PYB3yHSBuhIv70bt6mAEg4jwmuXx63d2E+yCbdX5hl7na0KsHeu1Xa8Utw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756152397; c=relaxed/simple; bh=3CyWxc3bBWcKOng0lDUJyf2wCvHLahNPzrrtR5W4C3U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=V/IHv1IHiJStkP2S+q/zZ8zRRsydC+9HuYq5UneyrjcU9Vm9j1SfIUfDhB/j2364tqvUW1hCpp9cjisjDtU7s7jcioHRGIUhbWzuve8Qnqo5mvIGSnCT2F4WlBA3x4SR5ZjUUZ0ePtG++u+NR3Kmz9SCujTCp/U/3KA0a6zs0MU= 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=rqoAProS; 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="rqoAProS" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-24458264c5aso52263345ad.3 for ; Mon, 25 Aug 2025 13:06:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756152394; x=1756757194; 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=CT7JgTEeo8ssIUb6BIDGd5TM5agUhLYUjQZKEJ9GRpQ=; b=rqoAProSjLzJcNYSQ0Jvt+HVN9pMiePGmyD1VXKO6VTSY4eSKoTlOrb8AH4Ar5CqS5 b0Nvc/fYVkOSgREHh3S+Ky7XFR2rNguABL/lrBOOogGx4BrZd3/6HEEKHdmt13blM/sO bMCC80oTywFsTHIUNL3pjKdW/W7SvFAletZZQLN2tHl6pBD4TWqYsS+6f+C4JgSBrIpH T3atW9Ly7tE3ofqTlpntiWw6RJGiLBWVjNsr947+kmVlcRkTDjCEmdFrSdXHEoQlLIVf 0aShBlOOxCwRsgWoorQiSR+/+xiTV7f3L5oxMuS1BYcl3Lt9cKAE+Bw491cDnSSVuaiu eUQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756152394; x=1756757194; 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=CT7JgTEeo8ssIUb6BIDGd5TM5agUhLYUjQZKEJ9GRpQ=; b=f4IGwRkYUUF7WVgWiJpVIcggKCXwnKSpFN6RMMlC+jQKAqJQejgO9J2UJkmdA49oP5 BiusTS8jlZNw5KyD76QQt5QcEjlJRI+LfhPD8s+3eFO5et+RN+c8lnEKacydfGtWK5z4 9Pth2oo11wEqSmdCqBUvpg+w+oEmdza58QLGT31Y1D9CkvkYWEjn9y6ztQnDAN4KvRhL hgYsLeh5IarTDsFQkL5JAUhV/lWfwHTfa4hy+LqlgoW+puyzIUAoBvKyaZt079I4wqpG qmbvIJhegqFGVxDmH31zCF670FpTba6AVac8/SzIG+pqbHwJfVGlm+XBtRI/cgyqEjn0 dRSA== X-Gm-Message-State: AOJu0YyfjMb5UTWEvV8a4SxQr0jo8zxen/1RCcYXvx4iCNU8d2STtgPC uTRVog1VKpvdmKa1mPkqGjEId8xAeiInIxMCE2b96dGxOSObmoV8o1bO2dBcnugdtZbmffX/q53 Dv+XJ2w== X-Google-Smtp-Source: AGHT+IHfBbVUXQztG4xcJ+8aXPPjjnJpBA+jqNiJZvuMravmup3swJ9oylnciy13R3aKiPcwGzmYXXd0xTE= X-Received: from pjvb15.prod.google.com ([2002:a17:90a:d88f:b0:311:c197:70a4]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f611:b0:246:60d4:8708 with SMTP id d9443c01a7336-24660d4883amr156063605ad.49.1756152394181; Mon, 25 Aug 2025 13:06:34 -0700 (PDT) Reply-To: Sean Christopherson Date: Mon, 25 Aug 2025 13:06:22 -0700 In-Reply-To: <20250825200622.3759571-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: <20250825200622.3759571-1-seanjc@google.com> X-Mailer: git-send-email 2.51.0.261.g7ce5a0a67e-goog Message-ID: <20250825200622.3759571-6-seanjc@google.com> Subject: [PATCH 5/5] Drivers: hv: Use common "entry virt" APIs to do work 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 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 --- drivers/hv/Kconfig | 1 + drivers/hv/mshv.h | 2 -- drivers/hv/mshv_common.c | 45 ------------------------------------- drivers/hv/mshv_root_main.c | 9 +++++--- 4 files changed, 7 insertions(+), 50 deletions(-) diff --git a/drivers/hv/Kconfig b/drivers/hv/Kconfig index 57623ca7f350..cdb210cd3710 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.h b/drivers/hv/mshv.h index db3aa3831c43..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(void); - #endif /* _MSHV_H */ diff --git a/drivers/hv/mshv_common.c b/drivers/hv/mshv_common.c index b953b5e21110..aa2be51979fd 100644 --- a/drivers/hv/mshv_common.c +++ b/drivers/hv/mshv_common.c @@ -138,48 +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. - */ -static 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; -} - -int mshv_do_pre_guest_mode_work(void) -{ - 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; - -} -EXPORT_SYMBOL_GPL(mshv_do_pre_guest_mode_work); diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c index 6f677fb93af0..387491ca16d6 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 @@ -507,9 +508,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_do_pre_guest_mode_work(); - 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.261.g7ce5a0a67e-goog