From nobody Fri Oct 3 21:07:27 2025 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.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 1C163284B4E for ; Mon, 25 Aug 2025 20:06:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756152389; cv=none; b=hK5tfoYXu1abcsEXcMORRiLi1JxEUtlEspNLOYBd6TCSOx30ozZMfSUC3GkUTuck6VUlGZO3WMqHgu6qUqKD5Gro8ZaWqb8TFeUvSO4ps5LoHCpruWLDFHpv/FheAX4keE+LFo3ZmDOl/6aGBvySewytYwDo7fflhENTlW0RaCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756152389; c=relaxed/simple; bh=aOaAMFU0lRUzQeN1F6iLwL6S3YUHwj3pFv409qQl9yQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=CkIs+7ssMhQXf1DtQfO6Yy73WVkHvgByqxnQFIm6qRQqx9JntmNv4iDNqBtFT1zRcvYBHYVbUSu/JMAFsCxfhtjCkPaeMrXvjlMoh3MCzPlVHe5eEdzesizrRqTpKMmCV9+1aABbP4mFhXPsQt3CGp7yzH7sODEm96nfbtRdlbY= 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=paRzXkPY; arc=none smtp.client-ip=209.85.215.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="paRzXkPY" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b47174bdce2so3790455a12.2 for ; Mon, 25 Aug 2025 13:06:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756152387; x=1756757187; 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=n6KAJgpe+g35DHpdkouiNXTkH/lGhIRNqTvdrNu3evo=; b=paRzXkPYY6C9gGx1xtvlFnhsaQhvZWvKcnW7AzKfSVqSynNxgDM8yGutVYQPcSZIqi 6gw1Yuomw9vSmb7Zk1lN+IP7uiFDCG2oZuBv8uUzDxRN8Naf33a6LeWFNevpvUvSu9uc 5rkslGWHL+o6Du9K1s5WKNnO/BHQi/ytiMXjAfGXdOeo4NZh8v0lw49iBPYwVL62Uu8W nxA+HmbVhfO9u9Dv6dpJDBZydZeTuflEsnS/6DkxGRgF1F4CtTxL1V+XGQRGrMsqg9D8 ej2H9xd1wj74wxBJsPNq9uLa1kLwZLjDrDzdZRgpb4A9nf7X88gHm4e0rZ6CNWegY3qz qhMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756152387; x=1756757187; 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=n6KAJgpe+g35DHpdkouiNXTkH/lGhIRNqTvdrNu3evo=; b=NpWO2jWK5hdbyPqP9T0vdIkmMjcyravx5v63Sq4AA6HM1w3kMqY1tnZg3PQKhzvxOl jahiWsEqgSih+2ppLBDUWV6g8E83CdbgWt3AlNmAOsWQAAN9gJtlYSApzX+LTSO1Co+9 d0l2/xfsbKuGaF4xs/98nlPOxqFz2fZ6z/fEEI7jpER+q719DANsOIVGW77hGwjDOq5g O8EsJmx3VcY83IoHVPXL4dNxa4ZS/3nTRTz7sqkh0OegQv9B9yug0igkYgw0ydIT24VR OWEJcDp6LMpxh4CWdd3CVrKKrm+rGnPoK3+Qm9yhgpMyNXJxLNO1Es5N4wnTa+sszfwf d9Bw== X-Gm-Message-State: AOJu0Yz85Etyi10WCtb/c9rvOsxvSL0mUCtshnhaGGmj1/oV4rVVLCDV VRxhFSRdRqrdPLWNmZu3Z7IUTNM/HpcZBqCx5ntYmVMUXb22eU03NqDfqq/hphcoF6DCiezVShM 11ZT0mQ== X-Google-Smtp-Source: AGHT+IF91dn1j6fIvX+uRWorld3If0wpZl5jf5hDJFPUly2WnQsNSAnJfoCi7L3EWOQImM7m2slTmOJmyMA= X-Received: from pjbok14.prod.google.com ([2002:a17:90b:1d4e:b0:325:8fba:708c]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:fc4b:b0:246:76ed:e25d with SMTP id d9443c01a7336-24676edecf2mr117886095ad.50.1756152387296; Mon, 25 Aug 2025 13:06:27 -0700 (PDT) Reply-To: Sean Christopherson Date: Mon, 25 Aug 2025 13:06:18 -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-2-seanjc@google.com> Subject: [PATCH 1/5] Drivers: hv: Move TIF pre-guest work handling fully into mshv_common.c 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" Move the root partition's handling of pending thread work fully into mshv_common.c so that the "work pending" and "do work" code is co-located. Splitting the flags-to-check logic makes the code unnnecessarily difficult to maintain, e.g. it would be all too easy to add a check in "do work" but not in "work pending", and vice versa. Note, this adds an extra CALL+RET when no work is pending; that will be remedied in the near feature by switching to common virtualization entry APIs. No functional change intended. Signed-off-by: Sean Christopherson --- drivers/hv/mshv.h | 2 +- drivers/hv/mshv_common.c | 24 +++++++++++++++++++++++- drivers/hv/mshv_root_main.c | 24 +----------------------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/drivers/hv/mshv.h b/drivers/hv/mshv.h index 0340a67acd0a..db3aa3831c43 100644 --- a/drivers/hv/mshv.h +++ b/drivers/hv/mshv.h @@ -25,6 +25,6 @@ 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); +int mshv_do_pre_guest_mode_work(void); =20 #endif /* _MSHV_H */ diff --git a/drivers/hv/mshv_common.c b/drivers/hv/mshv_common.c index 6f227a8a5af7..1acc47c4be0d 100644 --- a/drivers/hv/mshv_common.c +++ b/drivers/hv/mshv_common.c @@ -146,7 +146,7 @@ EXPORT_SYMBOL_GPL(hv_call_get_partition_property); * * Returns: 0 on success, -errno on error. */ -int mshv_do_pre_guest_mode_work(ulong th_flags) +static int __mshv_do_pre_guest_mode_work(ulong th_flags) { if (th_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) return -EINTR; @@ -159,4 +159,26 @@ int mshv_do_pre_guest_mode_work(ulong th_flags) =20 return 0; } + +int mshv_do_pre_guest_mode_work(void) +{ + const ulong work_flags =3D _TIF_NOTIFY_SIGNAL | _TIF_SIGPENDING | + _TIF_NEED_RESCHED | _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 72df774e410a..6f677fb93af0 100644 --- a/drivers/hv/mshv_root_main.c +++ b/drivers/hv/mshv_root_main.c @@ -487,28 +487,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_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) { @@ -529,7 +507,7 @@ static long mshv_run_vp_with_root_scheduler(struct mshv= _vp *vp) u32 flags =3D 0; struct hv_output_dispatch_vp output; =20 - ret =3D mshv_pre_guest_mode_work(vp); + ret =3D mshv_do_pre_guest_mode_work(); if (ret) break; =20 --=20 2.51.0.261.g7ce5a0a67e-goog